wafw00f源码及流量特征分析
字数 954 2025-08-11 21:26:06

WAFW00F工具深度解析:原理、使用与流量特征分析

一、WAFW00F工具概述

WAFW00F是一款专业的Web应用防火墙(WAF)指纹识别工具,主要用于探测目标网站是否部署了WAF以及识别具体的WAF类型。

工作原理

  1. 正常请求探测:发送标准HTTP请求并分析响应,识别已知WAF特征
  2. 恶意请求触发:若正常请求无法识别,则发送包含恶意负载的请求尝试触发WAF
  3. 算法分析:若前两步均失败,则通过算法分析响应特征猜测是否存在WAF

二、工具架构与核心组件

源码文件结构

wafw00f/
├── bin/                  # 可执行文件
├── lib/
│   ├── asciiarts.py      # ASCII艺术字
│   ├── evillib.py        # 请求构造核心(重要)
│   ├── plugins/          # WAF指纹库(重要)
│   │   ├── aliyundun.py  # 阿里云盾指纹
│   │   ├── huaweicloud.py # 华为云指纹
│   │   ├── baidu.py      # 百度云加速指纹
│   │   └── ...           # 其他WAF指纹
│   ├── __init__.py
│   ├── main.py           # 主逻辑(重要)
│   ├── manager.py        # 插件加载器
│   └── wafprio.py
└── ...

三、核心攻击向量分析

WAFW00F使用以下五类固定攻击字符串进行WAF探测:

  1. XSS攻击向量

    <script>alert("XSS");</script>
    
  2. SQL注入攻击向量

    UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or '
    
  3. 目录遍历攻击向量

    ..etc/passwd
    
  4. 命令注入攻击向量

    /bin/cat /etc/passwd; ping 127.0.0.1; curl google.com
    
  5. XXE攻击向量

    <!ENTITY xxe SYSTEM "file:///etc/shadow">]><pwn>&hack;</pwn>
    

四、请求构造机制

请求方法实现(main.py)

class WAFW00F(waftoolsengine):
    # 攻击字符串定义如上
    
    def normalRequest(self):
        return self.Request()
        
    def xssAttack(self):
        return self.Request(path=self.path, params={'s': self.xsstring})
        
    def xxeAttack(self):
        return self.Request(path=self.path, params={'s': self.xxestring})
        
    def lfiAttack(self):
        return self.Request(path=self.path + self.lfistring)
        
    def centralAttack(self):
        return self.Request(path=self.path, params={
            'a': self.xsstring, 
            'b': self.sqlistring, 
            'c': self.lfistring
        })
        
    def sqliAttack(self):
        return self.Request(path=self.path, params={'s': self.sqlistring})
        
    def oscAttack(self):
        return self.Request(path=self.path, params={'s': self.rcestring})

请求示例

  1. XSS探测请求

    http://target.com/?s=<script>alert("XSS");</script>
    
  2. 复合攻击请求(centralAttack)

    http://target.com/?a=<script>alert("XSS");</script>&b=UNION SELECT...&c=..etc/passwd
    

五、HTTP请求头特征

默认请求头定义在evillib.py中:

def_headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'en-US,en;q=0.9',
    'DNT': '1',  # Do Not Track
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3770.100 Safari/537.36',
    'Upgrade-Insecure-Requests': '1'
}

六、WAF指纹识别机制

以华为云WAF为例(plugins/huaweicloud.py):

def is_waf(self):
    schemes = [
        # Cookie匹配
        self.matchCookie(r'^HWWAFSESID='),
        # Server头匹配
        self.matchHeader(('Server', r'HuaweiCloudWAF')),
        # 内容匹配
        self.matchContent(r'hwclouds\\.com'),
        self.matchContent(r'hws_security@')
    ]
    return any(schemes)

常见WAF指纹特征:

  1. 阿里云盾:特定Cookie或响应头
  2. 百度云加速:特定错误页面内容
  3. Cloudflare__cfduid Cookie和特定响应头

七、流量特征总结

  1. URL特征

    • 包含标准化攻击字符串参数
    • 参数名通常为单字母(a, b, c, s等)
  2. 请求头特征

    • 使用固定User-Agent
    • 包含DNT头
    • 标准的浏览器Accept头
  3. 行为特征

    • 先发送正常请求,无果后发送恶意请求
    • 短时间内连续发送多种攻击类型的探测请求

八、防御与检测建议

  1. WAF配置建议

    • 对标准化攻击字符串进行拦截
    • 监控短时间内多次攻击尝试
  2. 检测规则

    # 检测XSS探测字符串
    if ($query_string ~* "<script>alert$"XSS"$;</script>") {
        return 403;
    }
    
    # 检测SQLi探测字符串
    if ($query_string ~* "UNION SELECT ALL FROM information_schema") {
        return 403;
    }
    
  3. 日志监控

    • 记录包含特征字符串的请求
    • 分析User-Aent为wafw00f或默认Chrome 78的请求

九、高级使用技巧

  1. 自定义攻击向量

    # 修改lib/evillib.py中的攻击字符串
    xsstring = 'custom xss payload'
    
  2. 扩展指纹库

    # 在plugins/目录下新建指纹文件
    def is_waf(self):
        return self.matchCookie(r'^MyWAF_Cookie=') or \
               self.matchHeader(('X-MyWAF', '.+'))
    
  3. 结合代理使用

    wafw00f http://example.com --proxy http://127.0.0.1:8080
    

十、总结

WAFW00F作为专业的WAF识别工具,其工作原理和流量特征具有明显模式。通过分析其源码和流量特征,安全团队可以:

  1. 更好地防御自动化WAF探测
  2. 优化WAF规则以减少误报
  3. 开发更精准的WAF识别方案

理解这些原理也有助于红队成员更有效地进行WAF绕过和渗透测试。

WAFW00F工具深度解析:原理、使用与流量特征分析 一、WAFW00F工具概述 WAFW00F是一款专业的Web应用防火墙(WAF)指纹识别工具,主要用于探测目标网站是否部署了WAF以及识别具体的WAF类型。 工作原理 正常请求探测 :发送标准HTTP请求并分析响应,识别已知WAF特征 恶意请求触发 :若正常请求无法识别,则发送包含恶意负载的请求尝试触发WAF 算法分析 :若前两步均失败,则通过算法分析响应特征猜测是否存在WAF 二、工具架构与核心组件 源码文件结构 三、核心攻击向量分析 WAFW00F使用以下五类固定攻击字符串进行WAF探测: XSS攻击向量 SQL注入攻击向量 目录遍历攻击向量 命令注入攻击向量 XXE攻击向量 四、请求构造机制 请求方法实现(main.py) 请求示例 XSS探测请求 复合攻击请求(centralAttack) 五、HTTP请求头特征 默认请求头定义在 evillib.py 中: 六、WAF指纹识别机制 以华为云WAF为例( plugins/huaweicloud.py ): 常见WAF指纹特征: 阿里云盾 :特定Cookie或响应头 百度云加速 :特定错误页面内容 Cloudflare : __cfduid Cookie和特定响应头 七、流量特征总结 URL特征 包含标准化攻击字符串参数 参数名通常为单字母(a, b, c, s等) 请求头特征 使用固定User-Agent 包含DNT头 标准的浏览器Accept头 行为特征 先发送正常请求,无果后发送恶意请求 短时间内连续发送多种攻击类型的探测请求 八、防御与检测建议 WAF配置建议 对标准化攻击字符串进行拦截 监控短时间内多次攻击尝试 检测规则 日志监控 记录包含特征字符串的请求 分析User-Aent为 wafw00f 或默认Chrome 78的请求 九、高级使用技巧 自定义攻击向量 扩展指纹库 结合代理使用 十、总结 WAFW00F作为专业的WAF识别工具,其工作原理和流量特征具有明显模式。通过分析其源码和流量特征,安全团队可以: 更好地防御自动化WAF探测 优化WAF规则以减少误报 开发更精准的WAF识别方案 理解这些原理也有助于红队成员更有效地进行WAF绕过和渗透测试。