是個典型的登錄框SQL注入題
在源碼上還有hint
首先進(jìn)行注入前的嘗試,觀察是否有報錯情況,或者是有waf:
正常的輸入,分2種情況:
用戶名正確,顯示密碼錯誤password error
用戶名錯誤,顯示無此用戶no such user!
猜測驗(yàn)證用戶名和驗(yàn)證密碼是分步進(jìn)行的,語句如下:
select uname from user where uname='xxx'select uname,pwd from user where uname='xxx' and pwd='xxx'
存在注入的情況,顯示naive
,證明是有waf的:
簡單測試了一下waf,發(fā)現(xiàn)過濾了or and union select from limit 以及空格,注釋符
,媽耶waf還挺嚴(yán),之后不想通過手動測試,于是采用burpsuite進(jìn)行Fuzz測試。
Burpsuite Fuzzing主要是通過Burpsuite Intruder模塊
,這好比是一把槍,通過特定設(shè)置把子彈(payload)
射向目標(biāo)(target-site)
。
可是子彈從哪來?我們在這之前要做一些準(zhǔn)備工作:
Fuzzdb: https://github.com/fuzzdb-pro...
這是一個fuzz測試的payload庫,上面有大量的測試payload,非常實(shí)用,我們本次sql注入就用到它。
我們使用這個payload就可以了 /attack/sql-injection/detect/xplatform.txt
然后打開Burpsuite,可以先開代理抓一個正常請求包,然后轉(zhuǎn)到Intruder模塊,進(jìn)行如下操作:
選中positions選項(xiàng)卡,選中uname的值部分admin
,然后點(diǎn)擊右側(cè)的add§
,這樣uname的值就會被標(biāo)記為payload的加載位置,其余部分就不需要標(biāo)記了。
選中payloads選項(xiàng)卡,點(diǎn)擊圖中所示的按鈕加載剛剛提到的xplatform.txt
,這樣payload就被加載進(jìn)去了。
選中options選項(xiàng)卡,設(shè)置請求線程數(shù)、重試次數(shù)、超時時間等等信息,不一一列舉了。
最后點(diǎn)擊上方菜單Intruder -> Start attack
,啟動!
等待fuzz完成后,得到如下結(jié)果:
根據(jù)返回包長度可以分辨不同的情況:202是password error
,200是no such user!
,還有189是naive
。
因此可以發(fā)現(xiàn)有可以利用的地方,第42個請求包的返回用戶名正確,證明已經(jīng)繞過waf。
假如并沒有可以利用的payload,可以再觀察189的包看看哪些字段是被ban掉的,從而找到可以利用的字段。結(jié)合前期手測的情況和fuzz的結(jié)果,可以判斷:可使用:
# || && , ascii() left() right() length()
不可使用:
空格 -- or and union select from limit mid() substr() substring()
構(gòu)造payload如下,xxx為payload,當(dāng)xxx為真時返回password error
,而xxx為假時返回no such user
,這就構(gòu)成了一個bool型注入。
uname='||xxx||'&pwd=123
下一步就可以開始實(shí)施注入。
這一步開始,我們就通過bool盲注進(jìn)行爆破pwd
字段,腳本跑起來
通過length()
獲得pwd
字段長度
最終獲得length(pwd)=30
當(dāng)你把握不準(zhǔn)的時候,想到hint的提示,通過 length(uname)=5
驗(yàn)證你的payload,下面也一樣。
由于mid() substr()
被ban了,只能通過left() right()
進(jìn)行字符串截斷,然后逐位爆破30位的pwd
最后得到30位密碼,登錄進(jìn)去,getflag
PS:沒有寫多線程,爆破速度比較慢,之后考慮改進(jìn)一下PPS:之后還要總結(jié)下各類函數(shù)組合使用方式,比如
mid()=substr()=right(left())
完整腳本如下:
利用burpsuite進(jìn)行fuzz測試,大大提高了測試效率,也能快速定位注入點(diǎn),這方面在平時的賽題也比較實(shí)用,關(guān)鍵就在于找到好用的fuzz payload。
靈活使用各類sql函數(shù),找到?jīng)]有被ban的函數(shù)進(jìn)行構(gòu)造從而實(shí)現(xiàn)爆破,如果遇到其他類型waf還要進(jìn)行改寫。
據(jù)說bugkuCTF有類似的一道題 SQL注入2,過去比較一下區(qū)別