因缺思汀的绕过(CTF)

题目链接:http://ctf5.shiyanbar.com/web/pcat/index.php
老规矩,先看源码,发现可以看到后台代码;
这里写图片描述
打开进行代码审计,关键代码如下:
这里写图片描述
因缺思汀的绕过(CTF)_第1张图片
代码大意:关键字过滤;第二部分代码从数据库中取出uname,确保取出的数据
只有一行,最后取出的pwd与提交的pwd相比较,相同则输出flag;
思路:利用group by pwd with rollup在查询中的一个特点,他可以返回pwd所在的那一条记录,通过limit控制返回哪一条,因此他不可以返回多条,一旦返回2条及以上,pwd就会为空,但同一条记录中的其他字段则是正常的
那么利用这一点令查询结果为空,我们输入的pwd也为空值,则构成了if(null==null)为true
即:输入的用户名为:’ or 1=1 group by pwd with rollup limit 1 offset 2 #
这里解释一下此时执行的SQL:
SELECT * FROM interest where uname=’ ’ or 1=1
group by pwd with rollup (在数据库中添加一行使得pwd=NULL)
limit 1 (只查询一行)
offset 2 (从第二行开始查询)

注释

你可能感兴趣的:(CTF)