Web应用防火墙通常会被部署在Web客户端与Web服务器之间,以过滤来自服务器的恶意流量。而作为一名渗透测试人员,想要更好的突破目标系统,就必须要了解目标系统的WAF规则,以及想办法绕过该规则。本文将以CloudFlare WAF和ModSecurity OWASP CRS3为例,为大家进行演示如何使用未初始化的Bash变量,来绕过基于WAF正则表达式的过滤器和模式匹配。
未初始化变量
在之前两篇关于过WAF的文章中,我为大家介绍了如何在Linux系统上通过滥用bash globbing进程,来绕过WAF规则集并执行远程命令的技巧。在本文中我将向大家展示另一种,使用未初始化bash变量绕过基于正则表达式的过滤器和模式匹配的技巧。echo "uninitialized_variable=$uninitialized_variable"
未初始化变量的值为null(根本没有值)。uninitialized_variable=
可以看出,声明但未初始化和直接设为空值是相同的。
默认情况下,Bash会像Perl那样处理未初始化的变量:即视为空字符串!让我们从一个例子开始。
假设我们要执行cat /etc/passwd命令,我们可以使用以下语法:cat$u /etc$u/passwd$u
可以看到,其中$u会被bash视为空字符串,且对结果输出也没有任何的影响。我们可以简单的验证下,通过echo