通常,即使绕过了WAF的防护,前提条件是后端服务器是否存在对应的漏洞,后端在开发时一定要在代码中加入参数的过滤与校验,不能只指望WAF在中间进行防护,减少威胁面,编写安全的代码,才是正确的做法。
通配符?,*
在bash shell中,问号?表示通配符,可以替换任意的单个字符(非空),*表示通配符,可以匹配任意长度(包括空)。例如下面的命令与/usr/sbin/cat /etc/passwd是等价的。来自exploit-db上的一篇文章
/usr/s?in/?at /et?/pass?d
大小写
特征库在编写正则表达式时,可能忽略了对大写的校验。例如select.*from,从而让Select from轻松绕过,正确的写法时,在任何防护的正则表达式前都加上(?i),表示后面的正则表达式匹配均忽略大小写。
注释/**/
在SQL查询语句中加入注释,例如select/**/from,当WAF不摘除注释而去匹配正则表达式时,可能会匹配不上,从而绕过。