这里主要讲v2.0.8版本的XDcms中的一个基于错误的SQL注入漏洞,较v2.0.7版本而言修复了很多注入漏洞,使得注入漏洞大为减少。
至于CMS的下载配置等就不说了,直接审计吧~
先整体看,点击index.php,先判断是否存在文件config.inc.php,若不存在则重定向去安装;然后就是通过require()函数包含/system/common.inc.php文件:
查看/system/common.inc.php文件,看到很多都是定义变量,期间都有包含一些文件,每个文件都点击进去查看一下,其中最值得关注的就是最后的fun.inc.php:
查看该文件发现先包含了几个文件然后就是定义各个函数,其中一个global.inc.php文件显得比较重要,因为涉及到全局变量的东西:
进入global.inc.php文件中查看,有发现对接收的参数进行过滤的操作:
看到其中有两个对输入参数进行过滤的函数,进行查看,知道该函数的定义是在fun.inc.php中:
该过滤作用很强,几乎绕过不了,但是可以发现的就是调用该函数进行过滤时只是对GET方法进行过滤,在这里没有对POST等方法进行过滤,接着搜索一下关于$_POST的内容看看,其中POST很多都进行了过滤,但是有的会遗漏,其中有文件是涉及到SQL的delete语句便利用不到了,找到其中的一个文件\system\modules\member\index.php:
注意到$fields这个变量没有被过滤且是一个数组,因为该页面是注册页面的主页,所以通过注册一个用户的信息并用火狐的Live HTTP headers插件来进行抓包:
POST发送的内容为:username=aaaaaa&password=123456&password2=123456&fields[truename]=aaaaaa&fields[email]=aaaaaa&submit=+ע+