hacktricks/pentesting-web/proxy-waf-protections-bypass.md

5.9 KiB
Raw Blame History

代理 / WAF 保护绕过

从零开始学习 AWS 黑客技术,成为 htARTE (HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

绕过 Nginx ACL 规则

Nginx 限制示例:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS

  • 由于Nginx将字符\xa0包含在路径名中,因此不会触发对/admin URI的ACL规则。结果Nginx将HTTP消息转发到后端
  • 当Node.js服务器收到URI /admin\x0a时,将删除字符\xa0,允许成功检索/admin端点。
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

Flask会从URL路径中移除字符\x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B\x09但NGINX不会。

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

以下是通过在路径名末尾添加字符\x09或的ACL保护绕过演示

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配置

location = /admin.php {
deny all;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

可以通过访问 /admin.php/index.php 来绕过它:

如何防止

为了防止这些问题,你必须在 Nginx ACL 规则中使用 ~ 表达式而不是 = 表达式,例如:

COPYCOPY

location ~* ^/admin {
deny all;
}

绕过 AWS WAF ACL 的行折叠技术

通过使用以下语法可以在HTTP头中绕过AWS WAF保护AWS WAF将无法理解X-Query头包含的是sql注入负载而后面的node服务器却能理解

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

参考资料

通过 htARTE (HackTricks AWS Red Team Expert)从零开始学习AWS黑客攻击

支持HackTricks的其他方式