Struts2 历史RCE漏洞 EXP汇总 常用工具流量特征分析
字数 1907 2025-08-26 22:11:29

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漏洞主要源于:

  1. 用户输入未经充分过滤直接传入OGNL解析器
  2. 关键安全配置未正确设置
  3. 特殊功能插件(如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. 防御建议

  1. 及时升级到最新Struts2版本
  2. 禁用不必要的插件和功能
  3. 严格过滤用户输入
  4. 生产环境关闭devMode
  5. 使用WAF防护已知攻击模式

6. 漏洞复现环境

推荐使用:

  • Vulhub (https://github.com/vulhub/vulhub)
  • VulApps (https://github.com/Medicean/VulApps)

7. 参考资源

  1. OGNL官方文档
  2. Struts2安全公告
  3. Marshalsec工具(用于S2-052漏洞利用)

:本文档仅用于安全研究和防御目的,请勿用于非法用途。实际测试需获得系统所有者授权。

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属性或使用通配符 利用方式 : RCE Payload : 3.2 S2-053 (CVE-2017-12611) 影响版本 :2.0.1-2.3.33, 2.5-2.5.10 漏洞成因 :Freemarker模板引擎双重解析OGNL RCE Payload : 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(部分除外) 利用条件 :需开启动态方法调用 利用方式 : 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 固定请求头: 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漏洞利用) 注 :本文档仅用于安全研究和防御目的,请勿用于非法用途。实际测试需获得系统所有者授权。