# 代理 / WAF 防护绕过
从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家) 支持 HackTricks 的其他方式: * 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family) * **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或**关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
## 使用路径名操纵绕过 Nginx ACL 规则 技术[来自这项研究](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)。 Nginx 规则示例: ```plaintext location = /admin { deny all; } location = /admin/ { deny all; } ``` 为了防止绕过,Nginx在检查之前执行路径规范化。然而,如果后端服务器执行不同的规范化(删除Nginx不删除的字符),可能会绕过此防御。 ### **NodeJS - Express** | Nginx版本 | **Node.js绕过字符** | | ------------- | ----------------------------- | | 1.22.0 | `\xA0` | | 1.21.6 | `\xA0` | | 1.20.2 | `\xA0`, `\x09`, `\x0C` | | 1.18.0 | `\xA0`, `\x09`, `\x0C` | | 1.16.1 | `\xA0`, `\x09`, `\x0C` | ### **Flask** | Nginx版本 | **Flask绕过字符** | | ------------- | -------------------------------------------------------------- | | 1.22.0 | `\x85`, `\xA0` | | 1.21.6 | `\x85`, `\xA0` | | 1.20.2 | `\x85`, `\xA0`, `\x1F`, `\x1E`, `\x1D`, `\x1C`, `\x0C`, `\x0B` | | 1.18.0 | `\x85`, `\xA0`, `\x1F`, `\x1E`, `\x1D`, `\x1C`, `\x0C`, `\x0B` | | 1.16.1 | `\x85`, `\xA0`, `\x1F`, `\x1E`, `\x1D`, `\x1C`, `\x0C`, `\x0B` | ### **Spring Boot** | Nginx版本 | **Spring Boot绕过字符** | | ------------- | --------------------------------- | | 1.22.0 | `;` | | 1.21.6 | `;` | | 1.20.2 | `\x09`, `;` | | 1.18.0 | `\x09`, `;` | | 1.16.1 | `\x09`, `;` | ### **PHP-FPM** Nginx FPM配置: ```plaintext location = /admin.php { deny all; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } ``` Nginx 被配置为阻止访问 `/admin.php`,但可以通过访问 `/admin.php/index.php` 来绕过此设置。 ### 如何防止 ```plaintext location ~* ^/admin { deny all; } ``` ## 绕过 Mod 安全规则 ### 路径混淆 [**在这篇文章中**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/)解释了 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`也受到了这个错误的影响。 在 Mod 安全的第2版中也发生了类似的情况,允许绕过防止用户访问与备份文件相关的特定扩展名文件(如`.bak`)的保护,只需发送点 URL 编码为`%2e`,例如:`https://example.com/backup%2ebak`。 ## 绕过 AWS WAF ACL ### 格式错误的标头 [这项研究](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)提到,可以通过发送一个 AWS 无法正确解析但后端服务器可以解析的“格式错误”标头来绕过应用于 HTTP 标头的 AWS WAF 规则。 例如,发送以下带有 SQL 注入的请求标头 X-Query: ```http GET / HTTP/1.1\r\n Host: target.com\r\n X-Query: Value\r\n \t' or '1'='1' -- \r\n Connection: close\r\n \r\n ``` 可以绕过AWS WAF,因为它无法理解下一行是标头值的一部分,而NODEJS服务器可以(已修复)。 ## 参考 * [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) * [https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass)
从零开始学习AWS黑客技术 htARTE(HackTricks AWS Red Team Expert) 支持HackTricks的其他方式: * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品 * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。