前言
不知不觉又过了一年,本来想写的文章是分享我是如何学习代码审计的。
写到一半全部删了,觉得自己还不够经验写这样的东西,以免自己的文章对各位大佬带来误导。
早上在一网站的 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吗?额… 整年过的不好都没事,希望母亲病情有所好转,早日康复…