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的反序列化类型