WebLogic两处任意文件上传漏洞动态分析(CVE-2018-2894)

笔者从进击者的维度简单的画了一个草图,最初进击者肯定必要设置设置设备摆设摆设事情目录,由于默认的事情目录在URL造访的时刻弗成达,然落后击者斟酌是从config.do页面上传keystore文件照样从begin.do上传,终极都是成功上传小马,只是小马的造访款式和路径不尽相同

0×01 媒介

CNCERT前几天发看护布告称发明Oracle公司出品的基于JavaEE布局的中心件WebLogic产品存在一个远程上传破绽,并获得了厂商切实着实认,迫害程度评分高达9.8分鉴于厂商已进行了安然修复,笔者对该破绽进行了一次阐发

WebLogic治理端未授权的两个页面存在随意率性上传getshell破绽,可直接获取权限两个页面分手为/ws_utc/begin.do,/ws_utc/config.do;破绽的影响范围 Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3;相关链接: http://www.oracle.com/technetwork/security-advisory/cpujul2018-4258247.html#AppendixFMW, 下文笔者从这两个文件入手来系统调试跟踪找出漏洞孕育发生的道理和位置

0×02 简介和道理

笔者首先造访了一下 http://IP/ws_utc/config.do并且将默认的目录WSTestPageWorkDir改动为 user_projectsdomainsbase_domaintmpsd如下图:

事情台设置一个新的目录后,weblogic会将原本目录下的子目录和文件一路转移到新设定的目录下,但旧的目录依然保留由于不是重点,笔者对这块的阐发就此略过如下图:

假如要从道理上彻底搞清楚weblogic破绽孕育发生的历程还必要看下图,简单的描述一下,进击者开始进击后,Weblogic在办事端做了很多的判断,假如设定了新的事情目录,那么法度榜样会自动拷贝所有旧目录下的子目录和文件到新的设定目录里,并且设定新的目录作为事情目录,假如进击者经由过程begin.do上传的话,Weblogic在办事端会判断有没有upload目录,假如不存在会自动创建,再接着在upload目录下创建Rs_Upload_款式化后的作为目录名,紧接着获取到import_file_name字段名作为后续的文件名拼接的一部分;假如经由过程config.do上传的话就获取GET哀求中的timestamp参数作为后续webshell的文件名中的一部分,照样看下图吧:

0×03 begin.do页面上传破绽

首先在IDE里搭建好WebLogic情况,把利用跑起来后点击页面右上方的文件夹按钮,这里实现的是一个导入的功能

选择随意率性文件上传,笔者选择上传jsp文件:

抓取数据包可以看到着实真正存在上传破绽的地址是:

http://IP:7001/ws_utc/resources/ws/config/import?timestamp=1532403983779

由于是破绽复现和阐发,笔者一边上传的时刻就一边把数据包抓取下来,获得下图的HTTP:

这段没什么可说的便是一个简单的上传数据流,表单字段import_file_name是关键值,从产品防御的角度来看检测它们也是关键的特性之一

接下来就必要在IDE里动态定位到破绽的触发点,由于weblogic大年夜多半破绽都和T3协议有关联,根据之前阐发过的weblogic破绽定位的调试断点是在com.bea.core.weblogic.rmi.client_4.0.0.0.jar包里,多次调试后一步步跳转到了破绽触发的核心包

并且查到了对应的触发破绽类名的位置: comoraclewebservicestestclientwsutilRSDataHelper.class

定位到的措施convertFormDataMultiPart,代码如下:

代码中反省了当前事情目录下是否存在upload目录,假如没有的话则创建,并且调用了cleanObsoleteFile措施强制遍历了一次目录中所有的文件,并且发明文件就删除掉落,调试历程如下图 :

再创建了一个以字符串Rs_Upload_打头的加款式化后的光阴命名的目录,并且作为上传文件保存的目录

[1] [2]下一页

接下来法度榜样得到了上传的表单的form-data , 颠末轮回遍历获取了所有的表单字段和对应的value,数据做两块存储,一块保存在kvMap聚拢中、获取的附件经由过程saveAttacheFile措施保存到磁盘中,代码如下:

下图红圈处是拼接后的物理路径名:

接着追踪调试到 execute措施,位于ImportTestCaseAction.class类中,实际的路径是:user_projectsdomainsbase_domainserversAdminServertmp_WL_internalcom.oracle.webservices.wls.ws-testclient-app-wls_12.1.3cmprq0warWEB-INFlibws-testpage-impl.jar!comoraclewebservicestestclientwsactionImportTestCaseAction.class

因为笔者导入的文件款式以及数据并非weblogic能处置惩罚的,以是法度榜样在context.createUnmarshaller措施处抛出空指针非常的差错,这就导致了上传成功后Response的状态码是500,这也可以作为防御产品检测的特性之一动态调试非常如下图:

到此begin.do页面未授权造访引起的随意率性文件上传破绽已经很晴明,防御的策略可以检测表单字段

0×04 config.do页面上传破绽

造访 http://IP:7001/ws_utc/config.do 页面后点击左侧的“安然”菜单,添加一个Keystore,随意率性设置名字和密码,当然文件也是随意率性款式上传,这里真的很随意

点击提交后,抓取触发地址: http://IP/ws_utc/resources/setting/keystore?timestamp=1532400069848 ; 抓取的包如下

和之前的套路一样,上传的时刻就已经打开了IDE调试功能,断点后照样定位到RSDataHelper.class 文件,如下图

此次获取的表单字段是ks_filename,值得收藏,加入特性检测范畴内;再跟进看下关键的shell天生那一步

上传后的shell位于事情台设置设置设备摆设摆设的目录下的/config/keystore/目录中,文件名的款式相对来说简单,采纳了POST哀求中URL地址上携带的参数timestamp的值加高低划线拼接起来的文件名,让笔者大年夜跌眼镜的是weblogic作为有名软件供给商存在这样初级的破绽其实匪夷所思,再加上其一系列的反序列化绕过破绽,只能说weblogic的产品能不用就不用,其实不可少用为妙

0×05 防御步伐

1.设置Config.do、begin.do页面登录授权后造访;

2.IPS等防御产品可以加入响应的特性;

3.进级到官方最新版本

0×06参考链接

https://www.secrss.com/articles/4008

http://www.oracle.com/technetwork/security-advisory/cpujul2018-4258247.html#AppendixFMW

上一页[1] [2]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

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

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包