Proxy / WAF Protections Bypass
使用路径名操纵绕过 Nginx ACL 规则
技术来自这项研究。
Nginx 规则示例:
为了防止绕过,Nginx在检查之前执行路径规范化。然而,如果后端服务器执行不同的规范化(删除Nginx不删除的字符),可能会绕过此防御。
NodeJS - Express
Nginx版本 | Node.js绕过字符 |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
Flask
Nginx版本 | Flask绕过字符 |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
Spring Boot
Nginx版本 | Spring Boot绕过字符 |
1.22.0 |
|
1.21.6 |
|
1.20.2 |
|
1.18.0 |
|
1.16.1 |
|
PHP-FPM
Nginx FPM配置:
Nginx 被配置为阻止访问 /admin.php
,但可以通过访问 /admin.php/index.php
来绕过此限制。
如何预防
绕过 Mod 安全规则
路径混淆
在这篇文章中解释了 ModSecurity v3(直到3.0.12版本)**不正确地实现了REQUEST_FILENAME
**变量,该变量应该包含访问的路径(直到参数的开头)。这是因为它执行了URL解码以获取路径。
因此,在 mod 安全中,像http://example.com/foo%3f';alert(1);foo=
这样的请求将假定路径只是/foo
,因为%3f
被转换为?
结束了 URL 路径,但实际上服务器收到的路径将是/foo%3f';alert(1);foo=
。
变量REQUEST_BASENAME
和PATH_INFO
也受到了这个 bug 的影响。
在 Mod 安全的第2版中也发生了类似的情况,允许绕过防止用户访问与备份文件相关的特定扩展名文件(如.bak
)的保护,只需发送点 URL 编码为%2e
,例如:https://example.com/backup%2ebak
。
绕过 AWS WAF ACL
格式错误的标头
这项研究提到,可以通过发送一个 AWS 无法正确解析但后端服务器可以解析的“格式错误”标头来绕过应用于 HTTP 标头的 AWS WAF 规则。
例如,发送以下带有 SQL 注入的请求标头 X-Query:
在过去,可以绕过 AWS WAF,因为它无法理解下一行是标头值的一部分,而 NODEJS 服务器可以(已修复)。
参考
最后更新于