BUUCTF:[SUCTF 2019]EasySQL

2020-10-07 13:00:33

題目地址: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;

在這裡插入圖片描述