项目地址

https://github.com/sandrogauci/wafw00f

项目简介

WAFW00F识别和指纹Web应用防火墙(WAF)产品。

其工作原理是首先通过发送一个正常http请求,然后观察其返回有没有一些特征字符,若没有在通过发送一个恶意的请求触发waf拦截来获取其返回的特征来判断所使用的waf。

Wafw00f用来判断WAF设备的函数如下:

   AdminFolder = '/Admin_Files/'
    xssstring = '<script>alert(1)</script>'
    dirtravstring = '../../../../etc/passwd'
    cleanhtmlstring = '<invalid>hello'
    isaservermatch = 'Forbidden ( The server denied the specified Uniform Resource Locator (URL). Contact the server administrator.  )'

使用“python wafw00f.py -h”可以查看工具的使用方法,运行示例:

python wafw00f.py http://www.victim.org/

基于Cookie的检测

Wafw00f的探测大部分是基于Cookie的检测。

F5asm的检测规则如下:

def isf5asm(self):
        # credit goes to W3AF
        return self.matchcookie('^TS[a-zA-Z0-9]{3,6}=')

基于响应头的检测

Profense在响应头会包含'server','profense'的信息。

    def isprofense(self):
        """
        Checks for server headers containing "profense"
        """
        return self.matchheader(('server','profense'))

sqlmap

Sqlmap是一款检测和利用SQLi漏洞工具,也是基于python编写,业内认同率较高,sqlmap用来探测WAF类型想比较Wafw00f来说还多一些。

参考:

https://github.com/sqlmapproject/sqlmap/tree/master/waf

Sqlmap用来探测每种WAF设备都是一个python文件,同样是从cookie信息或者返回头信息进行判断。

以Mod_Security为例

#!/usr/bin/env python
 
"""
Copyright (c) 2006-2013 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""
 
import re
 
from lib.core.enums import HTTP_HEADER
from lib.core.settings import WAF_ATTACK_VECTORS
 
__product__ = "ModSecurity: Open Source Web Application Firewall (Trustwave)"
 
def detect(get_page):
    retval = False
 
    for vector in WAF_ATTACK_VECTORS:
        page, headers, code = get_page(get=vector)
        retval = code == 501 and re.search(r"Reference #[0-9A-Fa-f.]+", page, re.I) is None
        retval |= re.search(r"Mod_Security|NOYB", headers.get(HTTP_HEADER.SERVER, ""), re.I) is not None
        if retval:
            break
    return retval

 

Sqlmap用来探测WAF的命令如下:

python sqlmap.py -u “http://www.victim.org/ex.php?id=1” --identify-waf

貌似必须是或自己修改的类似动态参数才能使用。

xenoitx

检测和利用XSS漏洞的神器,WAF检测也是其中的功能之一。