0x00 直接看源码吧
早上写了个注入fuzz的脚本,无聊回到实验吧的题目进行测试,发现了这道题
地址:http://ctf5.shiyanbar.com/web/pcat/index.php
分析如下:
1. 看过滤,过滤了一些查询关键词,明注是不可能了,过滤括号,通常的盲注也是实现不了。
2. 看要得到flag的条件,我们输入的密码和查询的密码要一致,而且查询结果只能有一条。
0x01 正确姿势
懒得写思路流程了,这里直接给出两种解题姿势,一种是盲注出密码,一种是使用with rollup 再加php弱类型。
1. 先看盲注吧:
payload: ' or pwd like 's%' limit 1#
解释: 要使查询语句正常而且出结果,必须要有一个为真,这里是根据pwd进行判断的,若此时查询出来的结果中的pwd 的值是以s开头,则返回true ,若不是,则返回false。
我是看人家writeup学到的,不得不承认,要是在知道列名的情况下,这种盲注手段简单方便很多,让我对 like的印象加深了许多。
那剩下来就是脚本的事情了。
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 #
0x01 小结
偏向于盲注的我对like的印象分蹭蹭往上涨,不仅仅停留在绕过“=” 的过滤了
with rollup 也是一种不错的姿势 除非是某些题目故意设定 要不然一般或许有更好的选择吧