看一下页面源码,看到source.txt。所以进入同目录下的source.txt
代码审计下,并且百度了一些函数。过滤了很多关键字,因此常规的SQL注入没有头绪。想了挺久,因为要满足三个条件。1:不能输入过滤的关键字2:只能返回一行数据3:并且输入的密码与返回的一行数据中的pwd一样才 print"CTF{xxxxxx}"。所以看了下大佬们的WP,学到了with rollup的语法。详细的讲解可以看这个
https://www.jianshu.com/p/1ecec1f6f3db
简单的来说就是利用with rollup的语法,在最后一行添加了NULL 的数据,即PWD=NULL。所以在POST输入页面,不填写PWD,空字符与NULL相等.因此可以满足了并且用'1 or 1 limit 1 offset 0# , '1 or 1 limit 1 offset 1# , '1 or 1 limit 1 offset 2# 可以看出来当2#的时候,返回的是“一颗赛艇”,即不满足一行的数据的条件,其他的两个都是满足一行数据的条件。因此第三行没数据。所以只有两行数据。因此用了with rollup的语法后,在第三行生成了一行NULL数据。因此payload可以为1' or 1 group by pwd with rollup limit 1 offset 2# pwd不填值。
limit 1 查询一行
offset 2从第三行开始
关于wiht rollup语法,https://www.cnblogs.com/shuangnet/archive/2013/03/26/2982144.html这篇文章讲的是group up 两个字段的情况,之前看了这个,进了这个坑。自己动手试了一下才出了这个坑
自己动手了试了一下