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 | public function index() |
1 | payload |
0x03 修补方法
在filterExp()方法中增加NOT LIKE