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

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

文章插图
 
  1. 全局搜索GetDbRowById函数:根据之前的审计,函数本身没有对参数过滤,其中调用的GetQueryResult函数也没有过滤,可能存在SQL注入 。

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

文章插图
 
可以发现GetDbRowById函数在
include/library/Table.class.php文件存在调用:_Fetch函数和FetchForce函数
某团购CMS的SQL注入漏洞代码审计

文章插图
 

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

文章插图
 

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

文章插图
 
其中_Fetch函数在同类中的Fetch方法被调用:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
因此需要全局搜索Fetch函数和FetchForce函数:
首先来搜索FetchForce函数,结果如下,还挺多的
某团购CMS的SQL注入漏洞代码审计

文章插图
 
首先要说的就是搜索的结果不一定全部存在注入,需要再次寻找其中疏于过滤的点进行验证,下面举几个栗子:
文件:/ajax/chargecard.php
某团购CMS的SQL注入漏洞代码审计

文章插图
 
不需要登录便可以直接访问这个文件,当$action为query时可以调用函数,且$secret不存在过滤,开启debug调试跟踪参数的流程:先输入secret=123’
可以看到对secret参数没有进行任何过滤便传入FetchForce函数:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
将存在恶意字符的参数拼接SQL语句,造成SQL注入,因为此处存在对空格等字符的正则匹配,所以可以使用/**/代替空格 。
某团购CMS的SQL注入漏洞代码审计

文章插图
 
因为此处不存在回显,要使用盲注,使用时间盲注验证,一个用时2秒,一个用时5秒
某团购CMS的SQL注入漏洞代码审计

文章插图
 

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

文章插图
 
而且同文件下存在另外一处注入:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
这个地方用方法也差不多,就改一下action参数便可以 。
再举一个不存在注入的情况:/ajax/manage.php
某团购CMS的SQL注入漏洞代码审计

文章插图
 

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

文章插图
 
虽然调用了FetchForce函数,但是溯源之后发现对id变量进行了强制转换,因此属于不能利用的点 。与此同时new.php也属于同理情况:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
同时如果继续搜索审计就能发现其他存在注入的点:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
其余的文件就不一一看了 。
接下来查看Fetch函数:搜索结果如下
某团购CMS的SQL注入漏洞代码审计

文章插图
 
先来看文件:/ajax/system.php
某团购CMS的SQL注入漏洞代码审计

文章插图
 

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

文章插图
 
不过这个地方应该是需要管理员登录的,登录之后传参是这个亚子的:
某团购CMS的SQL注入漏洞代码审计

文章插图
 
可以采用和之前相同的时间盲注:
某团购CMS的SQL注入漏洞代码审计

文章插图
 

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

文章插图
 
再看另外一处漏洞:/api/call.php,此处不需要任何登录,可以在前台直接访问到文件,而且其中多个参数存在注入:
某团购CMS的SQL注入漏洞代码审计

文章插图
 

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

文章插图
 
再之后很多便与上面的审计方法类似,还存在可以利用的点,也会存在许多无法利用的点,就不一一写出来了 。


推荐阅读