某团购CMS的SQL注入漏洞代码审计

作者:会上树的猪 合天智汇
0x00 SQL注入漏洞:简单介绍一下SQL语句:通俗来理解就是开发者盲目相信用户,没有严格检查用户输入,导致用户可以输入恶意参数进入程序逻辑,最终拼接恶意参数改变原本的SQL语句逻辑,造成SQL注入漏洞 。
0x01 关于CMS本次审计的CMS是基于Web应用的B/S架构的团购网站建设解决方案的建站系统,它可以让用户高效、快速、低成本的构建个性化、专业化、强大功能的团购网站,采用php和MySQL数据库开发技术,版本CV1.6 。商业案例如下:

某团购CMS的SQL注入漏洞代码审计

文章插图
 
审计结果实战测试:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
0x02 漏洞分析:首先在本地搭建一个网站,方便之后测试,一键安装也没啥说的,跳过 。重点讲讲这个团购CMS的SQL操作 。这个团购CMS将SQL操作全部写到了
include/library/DB.class.php文件:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
然后分析这个文件,发现这里面的函数有些使用了:mysql_real_escape_string函数对参数进行过滤,整数参数就强制转换int类型
某团购CMS的SQL注入漏洞代码审计

文章插图
 
关于mysql_real_escape_string函数的注入可以尝试宽字节注入,当数据库编码采用GBK的时候可以尝试bypass函数检查,但是此处不适用 。之后审计发现其中存在几个未对参数进行过滤直接执行SQL语句的函数:GetDbRowById、GetQueryResult、GetField 。
某团购CMS的SQL注入漏洞代码审计

文章插图
 

某团购CMS的SQL注入漏洞代码审计

文章插图
 

某团购CMS的SQL注入漏洞代码审计

文章插图
 
此处采用敏感函数回溯的方法进行审计,先全局搜索这些函数,然后想办法对达到触发条件 。
  1. 全局搜索GetField函数,发现没有被引用的地方 。

某团购CMS的SQL注入漏洞代码审计

文章插图
 
2、全局搜索GetQueryResult函数,搜索结果比较多,如下:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
先尝试审计第一处:/ajax/manage.php,如下,如果存在,可以通过$id变量进行注入 。
某团购CMS的SQL注入漏洞代码审计

文章插图
 
追踪如何触发函数:第490行,当变量action满足条件即可:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
而继续回溯,$action的来源$_GET:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
同时也发现id变量被强制类型转换了,哦豁,这下安逸了,这个点基本利用不了了 。同时测试过程中此处还有一处调用了未过滤SQL函数:
某团购CMS的SQL注入漏洞代码审计

文章插图
 

某团购CMS的SQL注入漏洞代码审计

文章插图
 
不过都用到了ID参数进行注入,所以不能利用,放弃 。
之后选择其他可能存在的地方继续审计:/manage/user/index.php
某团购CMS的SQL注入漏洞代码审计

文章插图
 

某团购CMS的SQL注入漏洞代码审计

文章插图
 
但是这两处同样存在intval参数过滤 。
某团购CMS的SQL注入漏洞代码审计

文章插图
 
再继续搜索,发现/manage/vote/feedback.php
某团购CMS的SQL注入漏洞代码审计

文章插图
 
此处$question[‘id’]参数来源于前一个查询结果,可以考虑二次注入,不过此处因为id参数为提交问卷时系统自动生成,所以无法利用了 。
某团购CMS的SQL注入漏洞代码审计

文章插图
 
最后两处调用这个函数的地方在DB.class.php中:其中一个属于LimitQuery函数调用,因为存在过滤,所以利用比较困难:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
另外一处便是GetDbRowById调用,此处不存在过滤,可能存在注入,这个审计便放到下一部分:


推荐阅读