概述
最近爆出了weblogic漏洞,有表哥在推特上发布了poc截图,不过对部分位置进行了模糊化处理,而那些位置正是漏洞触发的必要字符串。

远程调试
- 在
startWebLogic.sh中加入
|
|

- idea 进行remote调试

漏洞分析
结合CNVD的漏洞通报,说是_async里的wls9_async_response的war包存在漏洞,那么直接反编译看这个war包即可。由于Weblogic并非开源项目,为了分析执行流,需要对weblogic.jar进行反编译。这里我使用jd.gui.exe进行反编译。
看了下web.xml,以下三处url均指向
weblogic.wsee.async.AsyncResponseBean:
|
|
于是打开其中一个url:http://192.168.111.191:7001//_async/AsyncResponseService

走的是soap,便用soapui发包看一下一般的格式:

与推特上的图格式基本一致,只是还缺少部分内容。
回头继续看AsyncResponseBean内容,AsyncResponseBean中仅有2个函数。

往上看父类AbstractAsyncResponseBean的内容,发现onAsyncDelivery()调用这类函数。
再往上就没了,emmm… 有点懵,由于不了解weblogic整个的逻辑处理流程。
就决定顺着来找找,经过分析,发现与HandlerIterator.java有关
下断点看看
此处依次循环调用21个的handler:


此处与此次POC相关的为
|
|
前2个handler主要是检查此次poc数据包的大致格式需包含如下属性以及标签:
- 属性:
|
|
- soapenv:Header 中的标签
|
|
- soapenv:Body中的标签
|
|
而最后1个WorkAreaHandler的调用链如下:


在 WorkContextXmlInputAdapter.java中,没有任何过滤就直接调用XMLDecoder方法,而XMLDecoder本身是用于将XML文件反序列成java的对象,因而造成的漏洞的发生。

所以poc主体需要的格式基本如下:
|
|
后续跟进
针对上面的PoC,官方的10271的补丁,补丁如下:
|
|
绕过
本质上这个漏洞与CVE-2017-10271漏洞触发点相同,都是WorkContextXmlInputAdapter.java 里的XmlDecoder方法导致的,只是入口不一样而已。
去年官方的补丁早已增加了黑名单的限制,
分别对 Object new method void进行了判断,进行了防护。
根据大佬的说法,有多种绕过方式:
- UnitOfWorkChangeSet二次反序列化通过7u21 gadget触发rce
- UnitOfWorkChangeSet二次反序列化通过JtaTransactionManager实现jndi注入
- JdbcRowSetImpl实现jndi注入(需要绕过
) - EventData这个类构造函数,二次xmldecoder导致RCE
- FileSystemXmlApplicationContext spel表达式注入这个类实现RCE
其中exp影响也是递增的:
第一个Poc只能用于10.3.6版本(服务器环境必须是7u21)。
第二个poc能用于10.3.6,(jdk版本在1.8版本以下)。
第三个poc只能用于12.1.3,(jdk 1.7及以上)
第四个poc只能用于12.1.3,不用外连服务器(jdk不受限制)。
第五个poc则可通杀10.3.6和12.1.3版本(jdk版本不受限制)
最后一个通杀POC:
|
|
|
|