apache ofbiz CVE-2021-26295 RMI反序列化分析
作者:Jambolt 编辑:白帽子社区运营团队
"白帽子社区在线CTF靶场BMZCTF,欢迎各位在这里练习、学习,BMZCTF全身心为网络安全赛手提供优质学习环境,链接(http://www.bmzclub.cn/)
"











经过了一串的参数设定进入 requestHandler.doRequest

先获取 ControllerConfig 处理路径的xml位置

statusCode为空时 设置为302

获取当前请求路径

跟入 org/apache/ofbiz/webapp/control/RequestHandler.java runEvent()

跟入 org/apache/ofbiz/webapp/control/RequestHandler.java invoke()

在 org/apache/ofbiz/webapp/event/SOAPEventHandler.java 中 校验wsdl 失败后进入校验 text/xml 获取了请求中的xml字段

在 ModelService model = dispatcher.getDispatchContext().getModelService(serviceName); 触发了dnslog请求的执行

之后 deserialize()

获取到dnslog的url

跟入 org/apache/ofbiz/service/GenericDispatcherFactory.java runSync()

步入多步后到达 org/apache/ofbiz/service/ServiceDispatcher.java runSync()

跟入 org/apache/ofbiz/entity/serialize/XmlSerializer.java deserializeCustom() tag-name cusobj 通过校验

获取到 hex 字节码 转化为 byte[] valueBytes 之后被 UtilObject.getObject()调用

第一次dnslog请求 触发点

org/apache/ofbiz/base/util/UtilObject.java 中 序列化字符串通过SafeObjectInputStream()处理 后进行 readobject()触发反序列化

org/apache/ofbiz/base/util/SafeObjectInputStream.java 中 whitelist 数组

跟入readobject()在 java/io/ObjectInputStream.java 触发执行


diff 结果

断点于 org/apache/ofbiz/base/util/SafeObjectInputStream.java resolveClass() 在下面的调用链 后进入 类过滤

此POC 依次对 java.util.HashMap -> java.net.URL 过滤
ysoserial 中的 URLDNS 类


测试POC的反序列化类型


