Struts2 历史RCE漏洞分析与利用指南
1. Struts2漏洞概述
Apache Struts2是一个基于MVC设计模式的Java Web应用框架,其核心机制使用OGNL(Object-Graph Navigation Language)表达式处理视图层数据。由于对用户输入过滤不严,Struts2历史上存在大量远程代码执行(RCE)漏洞。
2. OGNL机制与漏洞原理
2.1 OGNL基础
- OGNL是Struts2默认的表达式语言
- 允许访问Java对象的方法和属性
- 支持静态方法调用和对象实例化
2.2 漏洞成因
Struts2漏洞主要源于:
- 用户输入未经充分过滤直接传入OGNL解析器
- 关键安全配置未正确设置
- 特殊功能插件(如Rest插件)引入的安全问题
3. 主要漏洞分析
3.1 S2-057 (CVE-2018-11776)
影响版本:≤2.3.34 和 ≤2.5.16
漏洞条件:
- alwaysSelectFullNamespace=true
- action元素未设置namespace属性或使用通配符
利用方式:
/${1+1}/actionChain1.action
RCE Payload:
${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context)...}
3.2 S2-053 (CVE-2017-12611)
影响版本:2.0.1-2.3.33, 2.5-2.5.10
漏洞成因:Freemarker模板引擎双重解析OGNL
RCE Payload:
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm)...}
3.3 S2-052 (CVE-2017-9805)
影响版本:2.1.2-2.3.33, 2.5-2.5.12
漏洞成因:Rest插件处理XML时XStream反序列化漏洞
利用方式:
- 修改Content-Type为
application/xml - 发送恶意XML数据
3.4 S2-048 (CVE-2017-9791)
影响版本:2.3.x
漏洞成因:Struts1插件中ActionMessage类OGNL注入
3.5 S2-045/S2-046 (CVE-2017-5638)
影响版本:2.3.5-2.3.31, 2.5.0-2.5.10
漏洞成因:Jakarta插件文件上传Content-Type处理不当
S2-045利用点:Content-Type头
S2-046利用点:filename参数
3.6 S2-037/S2-033
影响版本:2.3.20-2.3.28(部分除外)
漏洞成因:Rest插件method参数OGNL注入
3.7 S2-032
影响版本:2.3.20-2.3.28(部分除外)
利用条件:需开启动态方法调用
利用方式:
?method:#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS...
3.8 S2-019
影响版本:2.0.0-2.3.15.1
利用条件:struts.devMode=true
3.9 S2-016
影响版本:2.0.0-2.3.15
利用方式:通过redirect/redirectAction前缀注入OGNL
3.10 S2-015
影响版本:2.0.0-2.3.14.2
利用方式:基于通配符的动作映射
3.11 S2-013/S2-012
影响版本:2.0.0-2.3.14
漏洞成因:标签includeParams属性处理不当
3.12 S2-009/S2-005/S2-003
漏洞系列:参数处理绕过防护机制
3.13 S2-001
漏洞成因:表单验证失败时OGNL表达式二次解析
4. 检测工具特征分析
4.1 天融信工具特征
- Cookie在第一行
- 默认Cookie值:
SessionId=96F3F15432E0660E0654B1CE240C4C36 - 固定请求头:
Accept: text/html, image/gif, image/jpeg, *; q=.2, /; q=.2
4.2 Struts2-Scan特征
- 类似天融信工具风格
- 可自定义Cookie
4.3 K8工具特征
- Accept头在第一行
- 无Cookie字段
4.4 安恒工具特征
- 固定User-Agent:
Auto Spider 1.0 - 请求中常带有"x"参数
5. 防御建议
- 及时升级到最新Struts2版本
- 禁用不必要的插件和功能
- 严格过滤用户输入
- 生产环境关闭devMode
- 使用WAF防护已知攻击模式
6. 漏洞复现环境
推荐使用:
- Vulhub (https://github.com/vulhub/vulhub)
- VulApps (https://github.com/Medicean/VulApps)
7. 参考资源
- OGNL官方文档
- Struts2安全公告
- Marshalsec工具(用于S2-052漏洞利用)
注:本文档仅用于安全研究和防御目的,请勿用于非法用途。实际测试需获得系统所有者授权。