早上寫了個注入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 也是一種不錯的姿式 除非是某些題目故意設定 要否則通常或許有更好的選擇吧