三步法:
一、找到注入點
二、Fuzz出未過濾字符
三、構造payload/寫腳本
例題1
打開題目:
第一步,尋找注入點。
輸入用戶名123456,密碼123456,返回結果username error!
輸入用戶名admin,密碼123456,返回結果password error!
輸入用戶名admin,密碼admin,返回結果password error!
(根據提示已知這是道注入題,所以可判斷注入點在用戶名)
第二步,fuzz出未過濾字符。
fuzz后,發現%返回結果不同
看到sprintf函數,我們能想到php的字符串格式化逃逸漏洞,這個漏洞導致的結果是會將%1$/’變為’。
此時我們再嘗admin%1$\’ and 1=1%23,結果返回了username error!
根據之前測試,and 1=1返回password error!才表示成功。猜測應該是過濾了and,我們再嘗試一下admin%1$\’ or 1=1%23(這里可以再fuzz一次),執行成功了。
第三步,構造payload/寫腳本。
本題未過濾其他字符,剩下的就是盲注了,腳本大家根據題目自行編寫,最終拿到flag。
例題2
打開題目:
第一步,找到注入點。
在搜索框輸入1,返回you are in...
在搜索框輸入2,返回you are not in...
由此判斷是盲注,注入點是id=1處。
第二步,fuzz出未過濾字符。
這些是被過濾掉的(空格也被過濾了),or沒有被過濾,我們嘗試輸入1'/**/or/**/'1'='1
明明沒有過濾掉or,應該是后端給過濾了,嘗試雙寫繞過:1'/**/oorr/**/'1'='1,還是you are not in...,再用%0a代替/**/(即空格)
雖然沒顯示you are in,但是應該是注入成功了。
第三步,構造payload/寫腳本。
剩下的就是盲注了,大家根據題目自行編寫就好了,最終拿到flag。
總結:
此類題目的難與易主要在於尋找注入點,對於難一點的題目,出題人會把注入點藏得很隱蔽,需要大家不斷地嘗試,細心地去尋找。