mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
138 lines
7.7 KiB
Markdown
138 lines
7.7 KiB
Markdown
# Contournement des protections Proxy / WAF
|
|
|
|
<details>
|
|
|
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Autres façons de soutenir HackTricks :
|
|
|
|
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
|
|
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% embed url="https://websec.nl/" %}
|
|
|
|
## Contournement des règles ACL Nginx avec la manipulation des noms de chemin <a href="#heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules" id="heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules"></a>
|
|
|
|
Techniques [de cette recherche](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
|
|
|
|
Exemple de règle Nginx :
|
|
```plaintext
|
|
location = /admin {
|
|
deny all;
|
|
}
|
|
|
|
location = /admin/ {
|
|
deny all;
|
|
}
|
|
```
|
|
Pour éviter les contournements, Nginx effectue une normalisation des chemins avant de les vérifier. Cependant, si le serveur backend effectue une normalisation différente (en supprimant des caractères que Nginx ne supprime pas), il pourrait être possible de contourner cette défense.
|
|
|
|
### **NodeJS - Express**
|
|
|
|
| Version Nginx | **Caractères de contournement 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**
|
|
|
|
| Version Nginx | **Caractères de contournement 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**
|
|
|
|
| Version Nginx | **Caractères de contournement Spring Boot** |
|
|
| ------------- | ------------------------------------------- |
|
|
| 1.22.0 | `;` |
|
|
| 1.21.6 | `;` |
|
|
| 1.20.2 | `\x09`, `;` |
|
|
| 1.18.0 | `\x09`, `;` |
|
|
| 1.16.1 | `\x09`, `;` |
|
|
|
|
### **PHP-FPM**
|
|
|
|
Configuration FPM Nginx :
|
|
```plaintext
|
|
location = /admin.php {
|
|
deny all;
|
|
}
|
|
|
|
location ~ \.php$ {
|
|
include snippets/fastcgi-php.conf;
|
|
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
|
|
}
|
|
```
|
|
Nginx est configuré pour bloquer l'accès à `/admin.php` mais il est possible de contourner cela en accédant à `/admin.php/index.php`.
|
|
|
|
### Comment prévenir
|
|
```plaintext
|
|
location ~* ^/admin {
|
|
deny all;
|
|
}
|
|
```
|
|
## Contourner les règles de Mod Security <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
|
|
|
|
### Confusion de chemin
|
|
|
|
[**Dans ce post**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/), il est expliqué que ModSecurity v3 (jusqu'à 3.0.12) a **mal implémenté la variable `REQUEST_FILENAME`** qui était censée contenir le chemin d'accès (jusqu'au début des paramètres). Cela est dû au fait qu'il effectuait un décodage d'URL pour obtenir le chemin.\
|
|
Par conséquent, une requête comme `http://example.com/foo%3f';alert(1);foo=` dans ModSecurity supposera que le chemin est simplement `/foo` car `%3f` est transformé en `?` terminant le chemin de l'URL, mais en réalité le chemin que le serveur recevra sera `/foo%3f';alert(1);foo=`.
|
|
|
|
Les variables `REQUEST_BASENAME` et `PATH_INFO` ont également été affectées par ce bogue.
|
|
|
|
Quelque chose de similaire s'est produit dans la version 2 de Mod Security qui permettait de contourner une protection empêchant l'utilisateur d'accéder à des fichiers avec des extensions spécifiques liées aux fichiers de sauvegarde (comme `.bak`) simplement en envoyant le point encodé en URL en `%2e`, par exemple : `https://example.com/backup%2ebak`.
|
|
|
|
## Contourner les ACL AWS WAF <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
|
|
|
|
### En-tête malformée
|
|
|
|
[Cette recherche](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) mentionne qu'il était possible de contourner les règles AWS WAF appliquées aux en-têtes HTTP en envoyant un en-tête "malformé" qui n'était pas correctement analysé par AWS mais l'était par le serveur backend.
|
|
|
|
Par exemple, en envoyant la requête suivante avec une injection SQL dans l'en-tête 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
|
|
```
|
|
Il était possible de contourner AWS WAF car il ne comprenait pas que la ligne suivante faisait partie de la valeur de l'en-tête alors que le serveur NODEJS le faisait (ce problème a été corrigé).
|
|
|
|
## Références
|
|
|
|
* [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/)
|
|
|
|
|
|
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% embed url="https://websec.nl/" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Autres façons de soutenir HackTricks:
|
|
|
|
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|