某CMS前台SQL注入

免责申明

本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。


一、前言
    这个CMS是一个比较知名的CMS(这里不会透漏),目前已经修复了,是一位第二期报名的学员审计的,还是挺有实力的,审计思路也是比较好的,分享出来一起学习。
二、审计过程

xxxxCMS是基于ThinkPHP开发的一套网站,用户使用量比较大。

开始分析。

首先看入口文件index.php文件之后发现框架入口文件夹为app,我们查看app文件夹。

查看目录结果也可以知道,我们的Action即为Controller层面。

在Public文件当中发现存在一个方法为WXapi,其中进行实例化了YdWx类,并且调用了方法valid以及方法responseMsg方法。

我们分别跟入这两个方法。

这个方法进行调用了方法checkSignature方法,继续跟入。

这里接受三个参数,并没有什么太大的用处,我们查看两外一个方法。

这个方法首先进行接受用户传递进来的数据流file_get_contents方 法,然后给到了方法postStr方法。

并且在下面就是进行调用等方式,我们暂且不进行跟入,这里查看相关方法在227行。

在这里调用了一个方法为simplexml_load_string方法,这个方法是进行解析XML文档的,将我们传递的参数放入了这里面进行解析,其实如果第三个参数LIBXML_NOCDATA这是一个常量,如果允许加载外部资源的话也会造成一个XXE漏洞。

我们继续往下分析,这边给到了参数postObj变量。

从我们传入的数据当中赋值给相关的参数FromUserName等标签。

并且在237–241行代码当中进行了过滤,防止了SQL注入的产生。

只允许字符和数字不允许别的符号。

并且当参数msgText等于test的时候进入下面的方法。

继续往下走。

在这里又去接受了一个参数为Context参数,这个参数给到了变量p1然后调用了方法findReply方法。

这里虽然也给我们的参数进行了过滤但是最终返回给的变量是data,也就是我们的data是进行过滤之后的语句,然而p1还是我们传入的原始数据。

然后判断data是否存在数据,如果存在则调用方法runKeyword方法,并且将原始数据p1传入到了该方法。

然后发现方法直接传递到了TP当中的链式查询中的where方法,造成了SQL注入漏洞。

三、漏洞poc

漏洞POC

POST /xxxxxxx?=testaaaa HTTP/1.1
Host: 192.168.100.106:666
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 289


   <![CDATA[aaa]]>
   <![CDATA[aaas]]>
   shell
   <![CDATA[text]]>
   <![CDATA[aa'union select sleep(10),2,3# ]]>
   6364149417119100008
四、完结
     代码审计第四期,富含PHP、JAVA、NET代码审计,顺带APP、小程序、WEB当中参数逆向以及JAVA工具二开与SRC案例讲解,其中多多0day讲解,实战案例分析,不拿着靶场去做,想学习速速报名了。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容