GV32-CMS代码审计记录

现在的cms大多数都是mvc架构,也就是model+view+cotroll
接收并处理参数的在c层,跟数据库的交互则在m层,页面表现在v层。层次分明可以更好的进行审计。这里我主要查找的是sql注入漏洞。注入漏洞的成因就是因为没有对传进来的参数进行过滤。
首先是白盒
sj1
以这个CMS为例,,applicationwww文件夹里面的东西是controll层。用netbeans载入项目后右击www文件夹搜索$_GET[$_POST[$_COOKIE[$_REQUEST[,查看接收了哪些参数。(这里只有$_REQUEST有结果)

没有看到熟悉的select语句,那看看buildsmartydir这个函数的定义。点击buildsmartydir高亮后Ctrl+B转到声明处。

sj2


同时查看下网页上可见的连接。http://127.0.0.1/?load=art&act=detail&id=10,于是我选择了art.php进行分析。
sj3

双击跳转到选定的代码处,21列。

没有看到熟悉的select语句,那看看buildsmartydir这个函数的定义。点击buildsmartydir高亮后Ctrl+B转到声明处。

没有发现跟数据库有关的东西,遂看下一个参数,这里我选择$id(这个参数很常见于数字型sql注入中)

这边的$id没有进行任何过滤,而且两边也没加上单引号就直接带入selectOne里面的,但是得看下selectOne里面有没有过滤。跳到它的声明看看

好的,selectOne里面也没有过滤,那到实际页面看下是不是可以注入。

sj4

(我这里的环境是php5.3gpc=off,根据上面的结果判断这应该是个数字型的注入,所以就算单引号被转义也没关系)这里我不会一句话爆出管理员密码啥的,因为大部分的注入我都是用sqlmap解决。

sj5

同时我也使用wvs对网站进行扫描(黑盒,然后发现了更为惊人的结果)

sj6

这里发现一个php codeinjection,也就是php代码注入。看下它的检查结果。


也就是访问

页面会显示63c19a6da79816b21429e5bb262daed8。很明显,print被执行了。本着知根知底的精神,经过一番查找,在systemclassclass_url.php里面找到了loadact()方法。


看到eval就明白了。带进来的act参数被执行了。

(白盒的方式有两种流,一种是检查所有输入,另一种是根据危险函数反向,这里可以依据eval反向出act有问题)但我并不满足于print,要是能拿个webshell那不是更好。最初的想法是

,可惜菜刀无法连接……然后才想到干脆直接写入webshell。

sj7

到这里我的审计就结束了。php的应用漏洞不止注入、xss等,也有上传,包含、逻辑问题等。(目前我只会找注入)。黑盒跟白盒的结合效果不错。
审计需要的是耐心,但也许看完一整套代码,虽没发现任何可以利用的漏洞,可也学会了如何去防范。
注:90sec确实是圈内不错的安全论坛,还没有论坛账号的同学抓紧申请注册吧:)
91ri.org:小编们最近都在忙着做线下的项目,网站更新的速度较慢,还请各位读者见谅。也希望有着分享精神的同学能给我们投稿,投稿的文章会在工作时间的6小时内审核并发送审核结果到你的邮箱里。
同时在最近几天团队内会出一篇关于android安全的文章,敬请期待~