java 反序列化漏洞 weblogic版本_WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析...

12月22号,绿盟科技博客发布一篇文章,里面有提及到weblogic由于存在0day漏洞,导致被植入恶意软件用来挖掘比特币。后来经过确认,这次***者所用的漏洞CVE编号为CVE-2017-10271,那么这个漏洞究竟是怎样造成的?

0. 分析环境

IDE:Intellij IDEA

中间件版本: weblogic 10.3.6【未进行任何补丁修复】

发包工具: brupsuite

1. 漏洞成因

我们先来看一下,网上公布的poc进行利用后的weblogic返回的响应,公布的利用poc如下:

/bin/bash

-c

gedit

如下图所示,可以看到返回的是xml数据,而且可以清晰的看到调用栈,调用栈在标签中

b5e33071b488e23d0ffdc0a8a2de9d0b.png

仔细分析weblogic返回的响应,我们可以大概定位到问题点,我们重点关注标签中class以weblogic开头的部分,这部分就是weblogic处理我们请求的调用栈逻辑,weblogic处理完后就到了XMLDecoder

Step 1. 了解处理流程(为了方便查看,调用栈顺序为从上倒下)

weblogic.wsee.jaxws.workcontext.WorkContextServerTube->proce***equest

weblogic.wsee.jaxws.workcontext.WorkContextTube->readHeaderOld

weblogic.wsee.jaxws.workcontext.WorkContextServerTube->receive

weblogic.workarea.WorkContextMapImpl->receiveRequest

weblogic.workarea.WorkContextLocalMap->receiveRequest

weblogic.workarea.spi.WorkContextEntryImpl->readEntry

weblogic.wsee.workarea.WorkContextXmlInputAdapter->readUTF

Step 2.下断点调试

我们将断点设置在weblogic.wsee.jaxws.workcontext.WorkContextServerTube的proce***equest方法中readHeaderOld,如下图所示

beef889dc62331da7782e75326c7ab9f.png

Step 3.调试运行,跟踪

proce***equest中,var1为我们POST的xml数据,类型为Packet;

8073f156381e810b76fb730df0bcc73e.png

var3的值有是var2调用get方法后得来的,我们查看一下WorkAreaConstants.WORK_AREA_HEADER的内容,如下图所示

a77a81494b78950bb361a33cf535aa77.png

对比Poc内容与WorkAreaContants里面的XML_TAG、WORK_AREA_HEADER,我们不难联想到var2.get方法是用来获取work:WorkContext标签之间的内容。

2.readHeaderOld中,我们直接设置断点到weblogic调用栈最后一个函数WorkContextXmlInputAdapter,查看调用函数的参数值是什么?

3c3efa27e4c926053ff985e4b0a3c592.png

可以看到,var4其实对应的是java标签内的代码

1392d1befa8c676b1c3228eb1860e566.png

3.WorkContextXmlInputAdapter中,没有任何过滤就直接调用XMLDecoder方法,而XMLDecoder本身是用于将XML文件反序列成java的对象,因而造成的漏洞的发生。

45a3ad15ef7606753a6e4119b7896e48.png

归根结底,还是weblogic犯了编码上的错误,完全信任用户的输入,然后调用XMLDecoder进行反序列,导致了这个漏洞的发生。

参考链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值