CmsEasy有一个客服聊天模块celive
这里/celive/live/目录下的四个文件header.php,index.php,mainbox.php,send.php
都存在同样的问题,这里拿header.php举例。
文件/celive/live/header.php
这里调用了xajax_live函数
文件/celive/include/celive.class.php
这里调用了registerFunction函数跟进:
文件:/celive/include/xajax.class.php
这里用来注册函数,然后进行一些变量赋值
最后调用了processRequests函数,主要来分析一下这个函数
还是在文件/celive/include/xajax.class.php:
从上面的分析得知,我们POST的内容已经进入了_callFunction函数
还是同一文件,来看看:
然后我们继续往下
现在来看看这里注册的函数:
这里的6个函数使用了我们POST的内容的只有LiveMessage和GetAdminEndChat
来看看LiveMessage,文件/celive/include/xajax.inc.php:
这里的$a就是我们POST进来的$aArgs,这里取得是$a的元素进入了SQL
如这里的$a['email'],$a['email']等,所以我们在POST $aArgs时,必须是一个二维数组了。
再看看GetAdminEndChat函数:
这里$chatid进入了SQL,是一个一维数组
通过上面的分析得知,我们POST的内容进入了函数,进入了SQL
而且这个过程是没有过滤的,因为在celive模块,是一个独立的模块
没有使用全局的过滤,文件/celive/live/header.php中也没有引用全局过滤
最后进去SQL后,也是用celive自有的db模块,也没有过滤,最后导致SQL注入
最后在文件/celive/include/xajax.inc.php中的函数很多都存在注入
一部分是上面分析的6个,无需登录即可访问调用的函数
一部分是登陆后才能访问调用的函数,这些同样存在SQL注入问题,这里通过/celive/admin/live/header.php来进行调用:
admin_xajax_live函数也是进行注册函数,然后通过POST传入参数,调用函数。
第一处SQL注入:
如图证明:
第二处SQL注入:
这里会延迟10秒返回
因为无视任何防御,这里的user(),可以换位任何sql语句,通过盲注来注入数据
利用脚本还是很快的,或者使用SQLmap证明:
如图证明:
第三处SQL注入:
此处需要登录
第四处SQL注入:
此处需要登录
等等
第五处暴力注入:
这里登陆时,没有验证码,没有次数限制等任何防暴力注入处理。
导致可以暴力注入,而且这里的用户必须是管理员。
所以可以进一步暴力注入后,进入后台,编辑模板处拿shell。