hacktricks/pentesting-web/abusing-hop-by-hop-headers.md
2023-06-03 13:10:46 +00:00

89 lines
9.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# En-têtes hop-by-hop
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus important en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
{% embed url="https://www.rootedcon.com/" %}
## Qu'est-ce qu'un en-tête hop-by-hop ?
Un en-tête hop-by-hop est un en-tête conçu pour être traité et consommé par le proxy qui traite actuellement la requête, par opposition à un en-tête de bout en bout.
Selon [RFC 2616](https://tools.ietf.org/html/rfc2616#section-13.5.1), la spécification HTTP/1.1 traite par défaut les en-têtes suivants comme hop-by-hop : `Keep-Alive`, `Transfer-Encoding`, `TE`, `Connection`, `Trailer`, `Upgrade`, `Proxy-Authorization` et `Proxy-Authenticate`. Lorsqu'il rencontre ces en-têtes dans une requête, un proxy conforme doit traiter ou exécuter ce que ces en-têtes indiquent, et ne pas les transmettre à l'étape suivante.
En plus de ces valeurs par défaut, une requête [peut également définir un ensemble personnalisé d'en-têtes à traiter comme hop-by-hop](https://tools.ietf.org/html/rfc2616#section-14.10) en les ajoutant à l'en-tête `Connection`, comme ceci :
```
Connection: close, X-Foo, X-Bar
```
## La théorie de l'abus des en-têtes hop-by-hop
En théorie, les mandataires devraient supprimer les en-têtes hop-by-hop reçus avant de les envoyer à la prochaine adresse. Mais vous pouvez constater dans la nature que cela est fait par certains mandataires et que d'autres envoient simplement tous les en-têtes en ajoutant leur propre en-tête `Connection`.
![](<../.gitbook/assets/image (138).png>)
## Test de suppression hop-by-hop
Si vous trouvez un en-tête qui modifie la réponse du serveur s'il est défini ou non, vous pouvez rechercher des suppressions hop-by-hop. Par exemple, l'en-tête de cookie fera en sorte que la réponse du serveur soit radicalement différente si elle est définie (avec un contenu valide) ou non.
Ainsi, envoyez une demande avec un en-tête valide et avec cette valeur de l'en-tête Connection `Connection: close, Cookie` si la réponse est la même que si le cookie n'était pas envoyé, alors il y a un mandataire qui supprime les en-têtes.
Vous pouvez trouver si la réponse du serveur est différente si un en-tête est supprimé en utilisant cette technique en utilisant [ce script](https://gist.github.com/ndavison/298d11b3a77b97c908d63a345d3c624d). Ensuite, si vous passez une liste d'en-têtes connus, tels que [celle-ci](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/BurpSuite-ParamMiner/lowercase-headers), vous pouvez observer quels en-têtes causent des effets malgré le fait qu'ils ne soient pas dans votre demande initiale :
```
for HEADER in $(cat headers.txt); do python poison-test.py -u "https://target" -x "$HEADER"; sleep 1; done
```
Cela va parcourir toute la liste des en-têtes et afficher si sa présence dans la liste hop-by-hop a créé un code d'état différent ou une taille de corps de réponse différente.
## Abus de X-Forwarded-For
En général, les mandataires ajouteront les adresses IP des clients à l'intérieur de l'en-tête `X-Forwarded-For` afin que le prochain saut sache d'où vient la demande. Cependant, si un attaquant envoie une valeur de connexion telle que `Connection: close, X-Forwarded-For` et que le premier mandataire envoie les en-têtes hop-by-hop avec leurs valeurs (il envoie la valeur de connexion spéciale), alors la deuxième valeur peut supprimer l'en-tête X-Forward-For.\
À la fin, l'application finale ne saura pas qui a envoyé la demande et peut penser que c'était le dernier mandataire, et dans ce scénario, un attaquant peut être en mesure d'accéder à des ressources protégées par une liste blanche d'adresses IP (peut-être certains `/admin` ?).
Selon le système ciblé, vous pouvez également avoir `Forwarded`, `X-Real-IP` et une multitude d'autres qui sont moins courants.
## Détection de mandataires et empreinte des services
Cette technique peut être utile pour détecter les mandataires (en utilisant la technique des cookies) ou même pour détecter les services. Par exemple, si vous abusez de cette technique pour supprimer l'en-tête `X-BLUECOAT-VIA` et qu'une erreur est générée, alors vous avez découvert que Bluecoat était utilisé.
## Autres attaques
* Pour un possible empoisonnement de cache DoS en abusant de cette technique, lisez le lien original
* Cela pourrait être utile dans des attaques qui pourraient vous permettre d'insérer de nouveaux en-têtes (faible probabilité)
* Aussi, cela pourrait être utile pour contourner les fonctionnalités de défense. Par exemple, si l'absence d'un en-tête signifie qu'une demande ne doit pas être traitée par un WAF, vous pourriez contourner un WAF avec cette technique.
## Références
{% embed url="https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers" %}
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **la mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.\
{% embed url="https://www.rootedcon.com/" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>