【PyHacker】編寫WAF指紋探測與Sqlmap相結合
使用Python編寫探測WAF指紋指令碼,再結合到Sqlmap中,這樣以後再探測網站時,如果識別到此WAF指紋,就會顯示出來。本文屬於巡安似海PyHacker系列課程
編寫探測識別WAF指令碼
00x1:
首先我們要了解WAF,尋找WAF的特徵
比如安全狗,當訪問不存在的頁面
尋找關鍵字:如safedog
00x2:
ok,分析完畢,我們來測試一下
沒毛病,我們再去找一個waf,加入進去
以雲鎖為例,還是首先分析
沒有發現特別明顯的特徵
接著利用sql語句觸發Waf
https://www.yunsuo.com.cn/%20and%201=1
雲鎖竟然沒用自己的產品...
那就以奇安信雲防護為例,老規矩,檢視原始碼尋找特徵
這一塊可以當做特徵(eventID">eventID)
測試一下,莫得問題
00x3:
那我們還可以把特徵,全部放入字典中,或者txt文字載入
這樣可以方便收集waf,這裡以txt為例
Waf.txt內容為:
safedog|safedog
eventID|qianxin
yunsuo_session|yunsuo
通過Python開啟Waf.txt 檢視每個Waf的識別規則
waf = [] def waflist(): file = open('waf.txt') for line in file: str = line.strip().split("|") #去除換行等字元,以|分割 waf_data={} if len(str)==2: #判斷是否屬於waf格式 waf_data['waf']=str[0] waf_data['name'] = str[1] waf.append(waf_data) waflist() print waf
方便呼叫:
完善驗證機制:
請求 /and 1=1.php,觸發waf
req = requests.get(url=u+'/and%201=1.php',headers=headers,verify=False,timeout=3)
批量驗證網站是否存在WAF:
def main(): waflist() print u"\n載入waf完畢\n" f = open('url.txt','r') for url in f: url = url.strip() if 'http' not in url: u = 'http://' + url wafreq(u)
到這我們腦子裡就有個概念了,WAF指紋識別如何尋找的,如何粗略的編寫的,接下來就結合到Sqlmap中,讓它在檢測網站時存在此WAF指紋能夠識別到。
Pyhacker 之 編寫SQLMAP Waf探測
以前,sqlmap 是專門有一個WAF的目錄,來進行探測waf
命令:(已變成自動檢測)
sqlmap.py -u "http://www.xxx.com" --identify-waf --batch
到現在,sqlmap已經進行了修改,路徑也變了
C:\Python27\sqlmap\thirdparty\identywaf
我們只需要修改data.json裡面的waf特徵即可,如:safedog (607行)
Company :哪家公司產品
Name:waf名稱
regex:正則匹配
那我們來進行修改,以剛才的奇安信為例:
"regex": "Server: eventID|493",
原理:
Sqlmap會自動執行sql語句 來觸發waf
我們只需要寫入特徵
修改之前:
修改之後:
已經可以探測到WAF了,這更方便於我們進行下一步操作
你可以去收集更多的waf特徵,來進行匹配啦。
喜歡關注一下叭~