代码审计之UsualToolCMS

前言

不知不觉又过了一年,本来想写的文章是分享我是如何学习代码审计的。

写到一半全部删了,觉得自己还不够经验写这样的东西,以免自己的文章对各位大佬带来误导。

早上在一网站的 CMS建站 分类中,看到这款CMS,就审计了一下。

希望能对学习代码审计的童鞋带来点帮助,各位大佬见笑了哈。

版本: UsualToolCMS-8.0-Release
MD5 (UsualToolCMS-8.0-Release.zip) = 3bcf74b94f22e6cca8e35fe43905292b

安装

正常安装就好,不过这个系统在设置数据库连接参数时挺有意思的。

一般别的 CMS 系统都是一个 input=text,然后填入对应的参数接口,它这里是 textarea 文本框,让你自己填写进去。(存在任意文件删除,所以这里提一下提一嘴

前端反射XSS

我比较喜欢审计前台的代码,一般每个PHP后缀的文件我都会去点开看看,尝试读一下里面的代码。

然后就了发现此处:

问题存在:umedit/php/imageUp.php

接收了一个 $_GET['callback'] 参数,在后面的代码中输出到浏览器。

SSRF漏洞

问题存在:cmsadmin/ueedit/php/Uploader.class.php

触发方式:/cmsadmin/ueedit/php/controller.php?action=catchimage&source[]=http://0.0.0.0

首先接收我们传递的 $_GET['action']=catchimage,走到对应的 include

然后在 action_crawler.php 文件中,会通过循环数组中的参数最终调用 get_headers 函数。

文件:cmsadmin/ueedit/php/Uploader.class.php

就这样,我们可以通过判断返回的消息,验证 ssrf 是否正确。

当前请求一个不存在的地址会返回:

验证下 http://127.0.0.1 是不是真的请求不到:

然后我们来请求一台存在的服务器 http://192.168.1.199

这个时候返回的是:

提示:链接contentType不正确

这是因为后面的代码中,判断了请求的连接是否是一个图片。

所以,SSRF 在这里是存在的。

XXE和盲注

问题存在:cmsadmin/wechat/index.php

这里看到,当 echostr 不存在的时候,走 $mywechat->responseMsg() 方法

跟进:class/UsualToolCMS_WeChat.php

这里存在两个漏洞,当 libxml 低于 2.9 时,会存在 XXE 漏洞加载外部DTD。

另一个就是 SQL 注入了,可以看到 $msgname 被直接拼接进了SQL语句。

因为 cms_wechat_message 这个表里默认没数据,所以这里要用到时间盲注的技巧。

payload:

<!--?xml version="1.0" ?-->
<userInfo>
    <FromUserName><![CDATA[' union select 1,2,3,4 and sleep(2)-- ]]></FromUserName>
    <MsgType>text</MsgType>
    <Content>12312</Content>
</userInfo>

类似的地方还存在:paypal/index.php,接收参数 $_GET["no"],因为表里没数据,也只能使用时间盲注来验证。

任意文件删除

问题存在:myupimg.php

但受到第4、第5行影响(第4加载的session.php文件里,又将第5行的代码重写了一遍,汗),需要前台登录才可以,刚好前台默认是允许注册的。

登录后,我们来实现删除安装锁文件,通过重装写入 shell :

总结

对这款CMS的审计暂时这里了,没太多想说的话,祝大家2019年学业有成,身体健康。

我的2019吗?额… 整年过的不好都没事,希望母亲病情有所好转,早日康复…


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。