# Cache Poisoning via URL discrepancies
{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
* **Rejoignez le** đŹ [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** đŠ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépÎts GitHub.
{% endhint %}
Ceci est un résumé des techniques proposées dans le post [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) afin d'effectuer des attaques de cache poisoning **en abusant des différences entre les proxies de cache et les serveurs web.**
{% hint style="info" %}
L'objectif de cette attaque est de **faire croire au serveur de cache qu'une ressource statique est en cours de chargement** afin qu'il la mette en cache, tandis que le serveur de cache stocke comme clé de cache une partie du chemin, mais le serveur web répond en résolvant un autre chemin. Le serveur web résoudra le chemin réel qui chargera une page dynamique (qui pourrait stocker des informations sensibles sur l'utilisateur, un payload malveillant comme XSS ou rediriger pour charger un fichier JS depuis le site de l'attaquant par exemple).
{% endhint %}
## Delimiters
**Les dĂ©limiteurs d'URL** varient selon le framework et le serveur, impactant la façon dont les requĂȘtes sont routĂ©es et les rĂ©ponses sont gĂ©rĂ©es. Certains dĂ©limiteurs d'origine courants sont :
* **Point-virgule** : UtilisĂ© dans Spring pour les variables de matrice (par exemple, `/hello;var=a/world;var1=b;var2=c` â `/hello/world`).
* **Point** : SpĂ©cifie le format de rĂ©ponse dans Ruby on Rails (par exemple, `/MyAccount.css` â `/MyAccount`).
* **Octet nul** : Tronque les chemins dans OpenLiteSpeed (par exemple, `/MyAccount%00aaa` â `/MyAccount`).
* **Octet de nouvelle ligne** : SĂ©pare les composants d'URL dans Nginx (par exemple, `/users/MyAccount%0aaaa` â `/account/MyAccount`).
D'autres dĂ©limiteurs spĂ©cifiques peuvent ĂȘtre trouvĂ©s en suivant ce processus :
* **Ătape 1** : Identifier les requĂȘtes non mises en cache et les utiliser pour surveiller comment les URL avec des dĂ©limiteurs potentiels sont gĂ©rĂ©es.
* **Ătape 2** : Ajouter des suffixes alĂ©atoires aux chemins et comparer la rĂ©ponse du serveur pour dĂ©terminer si un caractĂšre fonctionne comme un dĂ©limiteur.
* **Ătape 3** : Introduire des dĂ©limiteurs potentiels avant le suffixe alĂ©atoire pour voir si la rĂ©ponse change, indiquant l'utilisation d'un dĂ©limiteur.
## Normalization & Encodings
* **Objectif** : Les analyseurs d'URL dans les serveurs de cache et d'origine normalisent les URL pour extraire les chemins pour le mappage des points de terminaison et les clés de cache.
* **Processus** : Identifie les délimiteurs de chemin, extrait et normalise le chemin en décodant les caractÚres et en supprimant les segments de points.
### **Encodings**
DiffĂ©rents serveurs HTTP et proxies comme Nginx, Node et CloudFront dĂ©codent les dĂ©limiteurs diffĂ©remment, ce qui entraĂźne des incohĂ©rences entre les CDN et les serveurs d'origine qui pourraient ĂȘtre exploitĂ©es. Par exemple, si le serveur web effectue cette transformation `/myAccount%3Fparam` â `/myAccount?param` mais que le serveur de cache conserve comme clĂ© le chemin `/myAccount%3Fparam`, il y a une incohĂ©rence.
Une façon de vĂ©rifier ces incohĂ©rences est d'envoyer des requĂȘtes URL en encodant diffĂ©rents caractĂšres aprĂšs avoir chargĂ© le chemin sans aucun encodage et de vĂ©rifier si la rĂ©ponse du chemin encodĂ© provient de la rĂ©ponse mise en cache.
### Dot segment
La normalisation des chemins oĂč des points sont impliquĂ©s est Ă©galement trĂšs intĂ©ressante pour les attaques de cache poisoning. Par exemple, `/static/../home/index` ou `/aaa..\home/index`, certains serveurs de cache mettront en cache ces chemins avec eux-mĂȘmes comme clĂ©s tandis que d'autres pourraient rĂ©soudre le chemin et utiliser `/home/index` comme clĂ© de cache.\
Tout comme prĂ©cĂ©demment, envoyer ce type de requĂȘtes et vĂ©rifier si la rĂ©ponse a Ă©tĂ© obtenue Ă partir du cache aide Ă identifier si la rĂ©ponse Ă `/home/index` est la rĂ©ponse envoyĂ©e lorsque ces chemins sont demandĂ©s.
## Static Resources
Plusieurs serveurs de cache mettront toujours en cache une rĂ©ponse si elle est identifiĂ©e comme statique. Cela peut ĂȘtre dĂ» Ă :
* **L'extension** : Cloudflare mettra toujours en cache les fichiers avec les extensions suivantes : 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
* Il est possible de forcer un cache Ă stocker une rĂ©ponse dynamique en utilisant un dĂ©limiteur et une extension statique comme une requĂȘte Ă `/home$image.png` qui mettra en cache `/home$image.png` et le serveur d'origine rĂ©pondra avec `/home`
* **RĂ©pertoires statiques bien connus** : Les rĂ©pertoires suivants contiennent des fichiers statiques et donc leur rĂ©ponse devrait ĂȘtre mise en cache : /static, /assets, /wp-content, /media, /templates, /public, /shared
* Il est possible de forcer un cache à stocker une réponse dynamique en utilisant un délimiteur, un répertoire statique et des points comme : `/home/..%2fstatic/something` mettra en cache `/static/something` et la réponse sera `/home`
* **Dossiers statiques + points** : Une requĂȘte Ă `/static/..%2Fhome` ou Ă `/static/..%5Chome` pourrait ĂȘtre mise en cache telle quelle mais la rĂ©ponse pourrait ĂȘtre `/home`
* **Fichiers statiques :** Certains fichiers spĂ©cifiques sont toujours mis en cache comme `/robots.txt`, `/favicon.ico`, et `/index.html`. Ce qui peut ĂȘtre abusĂ© comme `/home/..%2Frobots.txt` oĂč le cache pourrait stocker `/robots.txt` et le serveur d'origine rĂ©pond Ă `/home`.
{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
* **Rejoignez le** đŹ [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** đŠ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépÎts GitHub.
{% endhint %}