wafw00f源码及流量特征分析
字数 954 2025-08-11 21:26:06
WAFW00F工具深度解析:原理、使用与流量特征分析
一、WAFW00F工具概述
WAFW00F是一款专业的Web应用防火墙(WAF)指纹识别工具,主要用于探测目标网站是否部署了WAF以及识别具体的WAF类型。
工作原理
- 正常请求探测:发送标准HTTP请求并分析响应,识别已知WAF特征
- 恶意请求触发:若正常请求无法识别,则发送包含恶意负载的请求尝试触发WAF
- 算法分析:若前两步均失败,则通过算法分析响应特征猜测是否存在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探测:
-
XSS攻击向量
<script>alert("XSS");</script> -
SQL注入攻击向量
UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or ' -
目录遍历攻击向量
..etc/passwd -
命令注入攻击向量
/bin/cat /etc/passwd; ping 127.0.0.1; curl google.com -
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})
请求示例
-
XSS探测请求
http://target.com/?s=<script>alert("XSS");</script> -
复合攻击请求(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指纹特征:
- 阿里云盾:特定Cookie或响应头
- 百度云加速:特定错误页面内容
- Cloudflare:
__cfduidCookie和特定响应头
七、流量特征总结
-
URL特征
- 包含标准化攻击字符串参数
- 参数名通常为单字母(a, b, c, s等)
-
请求头特征
- 使用固定User-Agent
- 包含DNT头
- 标准的浏览器Accept头
-
行为特征
- 先发送正常请求,无果后发送恶意请求
- 短时间内连续发送多种攻击类型的探测请求
八、防御与检测建议
-
WAF配置建议
- 对标准化攻击字符串进行拦截
- 监控短时间内多次攻击尝试
-
检测规则
# 检测XSS探测字符串 if ($query_string ~* "<script>alert$"XSS"$;</script>") { return 403; } # 检测SQLi探测字符串 if ($query_string ~* "UNION SELECT ALL FROM information_schema") { return 403; } -
日志监控
- 记录包含特征字符串的请求
- 分析User-Aent为
wafw00f或默认Chrome 78的请求
九、高级使用技巧
-
自定义攻击向量
# 修改lib/evillib.py中的攻击字符串 xsstring = 'custom xss payload' -
扩展指纹库
# 在plugins/目录下新建指纹文件 def is_waf(self): return self.matchCookie(r'^MyWAF_Cookie=') or \ self.matchHeader(('X-MyWAF', '.+')) -
结合代理使用
wafw00f http://example.com --proxy http://127.0.0.1:8080
十、总结
WAFW00F作为专业的WAF识别工具,其工作原理和流量特征具有明显模式。通过分析其源码和流量特征,安全团队可以:
- 更好地防御自动化WAF探测
- 优化WAF规则以减少误报
- 开发更精准的WAF识别方案
理解这些原理也有助于红队成员更有效地进行WAF绕过和渗透测试。