題目地址:https://buuoj.cn/challenges#[SUCTF%202019]EasySQL
SQL查詢,觀察回顯,這裡應該是用var_dump()
輸出
在測試查詢的時候發現有些字元能使用,有些字元被過濾了,因此查詢點進行fuzz測試,看看過濾了哪些字元
回包長度為523的都是可以使用的,其他的字元均已被過濾
PS:這裡使用Burp進行fuzz的執行緒不要開太高,容易報429,fuzz的字元不多可以慢慢跑
;
可以使用,嘗試堆疊注入
首先這裡的query
引數無論我們輸入數位什麼都只會回顯Array([0]= > 1)
,輸入字母不會顯,但是也沒顯示是過濾的,所以query
的值如果為非數位則無法正確查詢得到資料回顯,那麼查詢語句就應該長這樣
$sql = "select ".$post['query']."||flag from Flag";
知道查詢語句了就好做了,先看一個非預期解
非預期解
||
在SQL語句中表示或
,在查詢表中的欄位內容時,逗號,
用於查詢多個欄位名
payload
*,1
預期解
通過修改SQL設定將或運運算元||
設定為連線符
set sql_mode=PIPES_AS_CONCAT;
payload
1;set sql_mode=PIPES_AS_CONCAT;select 1
這樣拼接得到的語句就應該是
select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag;