早上写了个注入fuzz的脚本,无聊回到实验吧的题目进行测试,发现了这道题php
地址:http://ctf5.shiyanbar.com/web/pcat/index.phpweb
分析以下:测试
1. 看过滤,过滤了一些查询关键词,明注是不可能了,过滤括号,一般的盲注也是实现不了。3d
2. 看要获得flag的条件,咱们输入的密码和查询的密码要一致,并且查询结果只能有一条。blog
懒得写思路流程了,这里直接给出两种解题姿式,一种是盲注出密码,一种是使用with rollup 再加php弱类型。ip
1. 先看盲注吧:源码
payload: ' or pwd like 's%' limit 1#it
解释: 要使查询语句正常并且出结果,必需要有一个为真,这里是根据pwd进行判断的,若此时查询出来的结果中的pwd 的值是以s开头,则返回true ,若不是,则返回false。io
我是看人家writeup学到的,不得不认可,要是在知道列名的状况下,这种盲注手段简单方便不少,让我对 like的印象加深了许多。class
那剩下来就是脚本的事情了。
2. with rollup
这是个人一个知识盲区,出题人估计一开始的出发点也是这个吧,因此我也想记录一下。
我的下面通俗解释一下 with rollup: 要配合 group by 一块儿使用,"group by username with rollup",简单说一下,就是使用with rollup 查询以后,查询结果集合里面会多一条NULL 记录,这一题利用NULL 和空字符相等,而后获得flag。测试以下图:
提交 username=' or 1 group by pwd with rollup limit 1 offset 2 #
偏向于盲注的我对like的印象分蹭蹭往上涨,不单单停留在绕过“=” 的过滤了
with rollup 也是一种不错的姿式 除非是某些题目故意设定 要否则通常或许有更好的选择吧