快捷搜索:  网络  CVE  渗透  后门  扫描  木马  黑客  as

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

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_projects\domains\base_domain\tmp\sd\  以下图:

image.png工作台配置一个新的目录后,weblogic会将原来目录下的子目录以及文件一块儿转移到新设定的目录下,但旧的目录依然保留。因为不是重点,笔者对这块的阐发就此略过。笔者从攻击者的维度简单的画了一个草图,最初攻击者肯定需要设置工作目录,因为默认的工作目录在URL走访的时辰不可达,然后攻击者考虑是从config.do页面上传keystore文件照样从begin.do上传,终极都是成功上传小马,只是小马的走访格式以及路径不绝相同。以下图:

image.png要是要从道理上彻底弄清楚weblogic漏洞产生的过程还需要看下图,简单的描摹一下,攻击者最先攻击后,Weblogic在服务端做了很多的判定,要是设定了新的工作目录,那么程序会自动拷贝所有旧目录下的子目录以及文件到新的设定目录里,并且设定新的目录作为工作目录,要是攻击者通过begin.do上传的话,Weblogic在服务端会判定有没有upload目录,要是不存在会自动创建,再接着在upload目录下创建Rs_Upload_格式化后的作为目录名,紧接着获取到import_file_name字段名作为后续的文件名拼接的一部分;要是通过config.do上传的话就获取GET要求中的timestamp参数作为后续webshell的文件名中的一部分,照样看下图吧:

image.png

0×03 begin.do页面上传漏洞

起首在IDE里搭建好WebLogic环境,把应用跑起来后点击页面右上方的文件夹按钮,这里完成的是一个导入的功能

选择任意文件上传,笔者选择上传jsp文件:

image.png

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

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

因为是漏洞复现以及阐发,笔者一边上传的时辰就一边把数据包抓取下来,得到下图的HTTP:

image.png

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

接下来就需要在IDE里动态定位到漏洞的触发点,因为weblogic大多数漏洞都以及T3协定有关联,根据之前阐发过的weblogic漏洞定位的调试断点是在com.bea.core.weblogic.rmi.client_4.0.0.0.jar包里,多次调试后一步步跳转到了漏洞触发的核心包 

image.png

并且查到了对应的触发漏洞类名的地位: \com\oracle\webservices\testclient\ws\util\RSDataHelper.class

定位到的要领convertFormDataMultiPart,代码以下:

image.png

代码中检查了当前工作目录下是否存在upload目录,要是没有的话则创建,并且调用了cleanObsoleteFile要领强制遍历了一次目录中所有的文件,并且发现文件就删除掉,调试过程以下图 :

image.pngimage.pngimage.png再创建了一个以字符串Rs_Upload_打头的加格式化后的时间命名的目录,并且作为上传文件保存的目录。

image.png接下来程序获患了上传的表单的form-data , 经过轮回遍历获取了所有的表单字段以及对应的value,数据做两块存储,一块保存在kvMap集合中、获取的附件通过saveAttacheFile要领保存到磁盘中,代码以下:

image.png

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

image.png

接着追踪调试到 execute要领,位于ImportTestCaseAction.class类中,实际的路径是:\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3\cmprq0\war\WEB-INF\lib\ws-testpage-impl.jar!\com\oracle\webservices\testclient\ws\action\ImportTestCaseAction.class

image.png由于笔者导入的文件格式和数据并非weblogic能处理的,所以程序在context.createUnmarshaller要领处抛出空指针异常的错误,这就导致了上传成功后Response的状态码是500,这也能够作为防御产品检测的特征之一。动态调试异常以下图:

image.png到此begin.do页面未授权走访引起的任意文件上传漏洞已经很明朗,防御的策略可以检测表单字段

image.png

0×04 config.do页面上传漏洞

走访 http://IP:7001/ws_utc/config.do 页面后点击左边的“安全”菜单,工控黑客 ,添加一个Keystore,任意配置名字以及暗码,当然文件也是任意格式上传,这里真的很随便。

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

image.png以及之前的套路同样,上传的时辰就已经关上了IDE调试功能,断点后照样定位到RSDataHelper.class 文件,以下图

image.png这次获取的表单字段是ks_filename,值得收躲,加入特征检测范畴内;再跟进看下症结的shell生成那一步

image.png上传后的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

*

您可能还会对下面的文章感兴趣: