Pentest & Bug Bounty
  • đŸ„·Pentest et Bug Bounty
    • đŸ‘ŸPentest Methodology
    • 💾Bug Bounty Methodology
      • 📓Ecrire un bon rapport
      • ⚖Aspect Juridique (FR)
  • 👣OSINT / Recon
    • 🧩Sock Puppet
    • 🧠Mindmaps
    • 🏱Entreprise
    • 👀Leaks
    • 👊Manuel / Dorks
      • Google dorks
      • Github dorks
      • Twitter Dorks
      • Shodan Dorks
    • đŸ‘„RĂ©seaux sociaux (SOCMINT)
      • đŸ•”ïžTelegram OSINT
      • đŸ‘»Snapchat OSINT
      • đŸ€”â€â™‚ïžLinkedin OSINT
      • đŸ—ŁïžFacebook OSINT
      • đŸŽŒTik tok OSINT
      • đŸ“·Instagram OSINT
      • 🐩Twitter OSINT
      • 🔊Discord OSINT
    • đŸ–‡ïžDomaines et Sous-domaines
    • đŸšȘScan de ports / web
    • ✉Emails
    • 🔗RĂ©seau
    • đŸ“·Screenshots
    • đŸ“čLive camera
    • 🧔Reconnaissance faciale / images
    • 🌆Images
    • đŸ—șMaps
    • đŸ‘ïžActive Directory
    • ☁Cloud
    • Autre
  • 🌐Pentest Web
    • ✊Brute force / Fuzzing
    • 💉Injections
      • đŸȘXSS
        • PDF injection
      • 📄HTMLi
      • 📃XXE
      • 7ïžâƒŁSSTI
      • 🔱SQLi
        • đŸ‘«UNION based
        • ⏳Time based
        • đŸ„œBoolean based / Error Based
        • đŸ“€Out-Of-Band
      • ↩CRLF
      • 🐚OS injection
      • ☕Log4Shell
      • đŸ„ CSV
      • đŸ»ESI
      • 😎XSLT
      • 💌Injections dans emails
      • 🔀ELi
        • OGNLi
    • â†ȘOpen redirect
    • 📁Path Traversal / LFI / RFI
    • 🔓Bypass
      • ă€°ïžWAF / Filter bypass
      • 22FA
    • ☠Charges utiles
    • 📚CMS (Content Management System)
      • WordPress
      • Joomla!
      • Magento
      • Drupal
    • 🎭SOP bypass
      • CORS
      • postMessage()
      • JSONP
    • đŸ–±ïžClickjacking
    • ⚙Insecure deserialization
    • â˜ŁïžWeb Cache Poisoning / Deception
    • đŸ€HTTP Smuggling
    • 👋OAuth
    • ⛔SAML
    • đŸ—ïžJSON Web Token
    • 🎣CSRF
      • 🚀Cross-site WebSocket Hijacking (CSWSH)
    • 🎯IDOR
    • đŸ•čSSRF
      • Cloud SSRF
      • Protocol Smuggling
    • ⚙APIs
      • đŸœïžREST
      • đŸ“¶GraphQL
    • ❓Mot de passe oubliĂ©
    • 🛒Fonctions d'achat et de facturation
    • đŸ‘œBroken authentication / register
    • 🏁Panneaux d'administration
    • ⏬Upload features
    • 🔗Broken Link Hijacking
    • 🎼Prise de contrĂŽle de sous-domaine
    • 🛂Prise de contrĂŽle de DNS
    • ☝One liners
    • 🚧Misconfigurations
    • 🗿Analyse statique
      • PHP
      • Ruby On Rails
      • Perl
      • JAVA
      • Javascript
      • Python
      • Golang
      • .NET
    • đŸȘŁAWS S3
    • đŸ€–Captcha
    • đŸȘžRace conditions
    • ☄.git exposĂ©
    • 💭Business logic
    • đŸ„ĄPrototype pollution
    • 💣Dependency confusion
    • 🛑DoS
      • đŸ€ŻReDoS
      • 👏Hash flooding
      • 🧹Cookie bomb
    • Autre
      • Flask
      • Symphony
      • Spring Boot
      • Django
      • Jenkins
  • đŸŒ©ïžPentest Cloud
    • IaC (Infrastructure as Code)
      • Terraform
      • Helm
      • Kustomize
    • AWS
      • Enumeration
    • Azure
      • Entra ID
      • Azure Resource Manager (ARM)
        • Enumeration
    • GCP
      • GCP IAM
      • Authentification
      • Enumeration
    • Kubernetes
  • đŸ•žïžPentest RĂ©seau
    • đŸȘĄProtocoles rĂ©seau
    • 📡Wifi
    • 🔋BLE
    • 📍VPN
  • đŸ—‚ïžPentest AD
    • đŸ‘șGPP
    • âžĄïžMouvements latĂ©raux
      • đŸ”ȘPass The Hash
      • đŸ—ĄïžOver Pass The Hash
    • 📜ADCS
  • đŸ“±Pentest Mobile
    • đŸ€–Android
      • đŸ‘ŸMĂ©thodologie
      • 🌳Setup environnement
      • 🍇Collecte d'informations
      • 🔠Enumeration des donnĂ©es locales
      • 🔙Reverse engineering
        • đŸȘąDĂ©-obfuscation
      • ⛰Analyse statique (Android)
      • 🐞Debug
      • 🎰Stockage de donnĂ©es non sĂ©curisĂ©
        • 📰Logs
        • đŸ€Shared Preferences
        • đŸ”€Strings
        • đŸ—„ïžSQLite DB
        • đŸ—ƒïžRealm DB
        • 🧠MĂ©moire
        • 📍Copy/Paste buffer caching
        • ⌚Keyboard press caching
        • 🔙Backup
        • Carte SD
      • đŸŒ©ïžFirebase/Appspot misconfig
      • 🔗Deeplinks vulns
        • Interception de contenu
        • WebView hijacking (via deeplink)
        • Invalid Digital assets links
      • đŸ–ŒïžWebView vulns
        • WebView Hijacking
        • Exfiltration de donnĂ©es
        • RXSS
        • Vol de token
      • Guides outils
        • ⛏Outil Drozer
          • Injections SQL (Android)
          • Path traversal (Android)
        • 🔬Outil Objection
        • đŸȘOutil Frida
        • Outil Medusa / Mango
      • Bypass
        • đŸ“ČContournement de dĂ©tection d'emulateur
          • 📂Fichiers d'emulateurs
          • đŸ™‹â€â™‚ïžNetwork Operator Name
        • đŸŠ·Contournement des dĂ©tections de rootage
          • 🧼Root management
          • đŸ—ïžClĂ© de signature du noyau
          • 🧊Props dangereux
          • đŸŠžâ€â™‚ïžBinaire "su"
          • ❌Permissions sur les repertoires
        • ☝Contournement des protections biometriques
        • 📜SSL pinning bypass
        • Contournement de code PIN
      • 🔳Lecteur de code QR/EAN/Barres...
      • 💔Injection de backdoor
      • đŸȘ§Task hijacking
      • 🎭Overlay attacks
        • Tapjacking
        • Invisible Keyboard
      • đŸ“”RĂ©silience
        • ⌚Third Party Keyboards
        • ©Allowed Copy/Paste on sensitive fields
        • đŸ›€ïžBackground screen caching
        • đŸ–‹ïžSchĂ©mas de signature
        • âŹ†ïžIn-App updates
      • đŸ€ŻCorruption de MĂ©moire
    • 🍏iOS
      • đŸ„…MĂ©thodologie
      • đŸ§±Setup environnement (iOS)
      • âźïžReverse engineering (iOS)
      • đŸ”ïžAnalyse statique (iOS)
      • 🧿Contournement de dĂ©tection de Jailbreak
      • 📌SSL pinning bypass (iOS)
      • 👇Contournement d'authentification biomĂ©trique
      • 🐛Contournement d'anti-Hooking/Debugging
      • 🙈Stockage de donnĂ©es non sĂ©curisĂ© (iOS)
        • 💭MĂ©moire (iOS)
        • 🏓Copy/Paste buffer caching (iOS)
        • đŸȘCookies (iOS)
        • đŸ—žïžLogs (iOS)
        • ⌚Cache du clavier (IOS)
        • Backup (IOS)
      • đŸ“±Background screen caching
      • 🧑‍🚀WebView vulns (iOS)
      • Deeplinks vulns (iOS)
      • Lecteur de code QR
      • Firebase misc
  • đŸ‘·Pentest physique
    • 🔐Crochetage
    • 💳RFID
    • ⚙Equipements
    • đŸ’ŸHardware Hacking
      • 📈UART
      • đŸ§ȘJTAG
      • ⚡SWD
      • đŸȘąSPI
      • 🚌IÂČC
      • 🔮Fault Injection
      • Side-Channel Attacks
    • 🐣Firmware hacking
  • đŸ–šïžPentest IoT
    • âȘReplay de stream camera
    • đŸ—ŁïžAssistants vocaux
    • đŸ“čCamera IP
    • âŹ‡ïžDoS
    • đŸ–šïžImprimantes
    • 🎬Chromecast
  • 💀Hacking protocols
    • đŸ˜©Telnet - port 23
    • 🔐SSH - port 22
    • đŸ“€FTP - port 21
    • ❔Whois - port 43
    • 👉DNS - port 53
    • 🐕‍đŸŠșKerberos - port 88
    • đŸ’ŒSNMP - ports 161-162
    • 📹SMB - ports 445-139
    • 📧SMTP - ports 25-587
    • 🎩RTSP - port 554
    • 🔎MS-RPC - ports 135-593
    • ➕Rsync - port 873
    • 🔱MS-SQL - port 1433
    • đŸ—ïžDocker - port 2375
    • 🔡MySQL - port 3306
    • 📝LDAP - ports 389, 636, 3268, 3269
    • đŸ–„ïžRDP - port 3389
    • ⌚VNC - ports 5800,5801,5900,5901
  • 😈IngĂ©nierie sociale
    • 🧠Concepts / Principes / Attaques
    • đŸȘ§Ethique
    • đŸ‘€Profils comportementaux
  • 🔓Crack
  • đŸ› ïžAutres outils utiles
    • 🚿Sandbox / Sanitizer
    • đŸ”€GĂ©nĂ©rateurs de wordlists personnalisĂ©es
  • 🌜Post-Exploitation
    • 👔ÉnumĂ©ration /ÉlĂ©vation de privilĂšges
      • 🐧Linux
        • CVE-2022-0847 (Dirty Pipe)
        • CVE 2021-4034 (PwnKit)
        • CVE 2021-3560 (Polkit)
      • đŸȘŸWindows
        • đŸ–šïžPrintNightmare
        • đŸ–šïžSpoolFool
        • 🆔Usurpation de SAMAccountName
        • âČScheduled task/job (T1573.005)
        • 🐝HiveNightmare
        • 🔑Stored Credentials
        • đŸŽ©SeImpersonatePrivilege
        • 🎒SeBackupPrivilege
        • 🍞Unquoted Service Path
        • đŸ§©DLL Hijacking
        • ©SeBackupPrivilege
      • ⛎Docker
    • đŸ‘»Effacement des traces
    • ⚓Persistance / Downloaders
    • đŸ›ĄïžDefense evasion
    • 📩Exfiltration de DonnĂ©es
  • 🔎Forensic
    • 💡MĂ©thodologie
    • đŸ“șLive forensic
    • đŸ’»MĂ©moire non volatile
    • đŸ•ŠïžMĂ©moire volatile
    • 📄File forensic
Propulsé par GitBook
Sur cette page
  • MĂ©thodologie
  • CPDoS (Cache Poisoning Denial of Services)
  • HTTP Header Oversize (HHO)
  • HTTP Meta Character (HMC)
  • HTTP Method Overwrite (HMO)
  • Host Header Case Normalization (HHCN)
  • Hop By Hop (HBH)
  • SpĂ©cificitĂ©s
  • Spring
  • Rails
  • Nginx
  • Ressources
  • Outils
  • Extension Burp Param Miner
  • HExHTTP
  • wcDetect

Cet article vous a-t-il été utile ?

  1. Pentest Web

Web Cache Poisoning / Deception

PrécédentInsecure deserializationSuivantHTTP Smuggling

DerniĂšre mise Ă  jour il y a 15 jours

Cet article vous a-t-il été utile ?

Méthodologie

  1. Identifier et évaluer les entrées sans clé

    1. En-tĂȘte / Cookie

    2. ParamĂštre

    3. ChaĂźne de caractĂšre

  2. Ajouter un cache buster Ă  la requĂȘte (exp: cb=1)

  3. Essayer de faire reflĂ©ter un "canary" dans la requĂȘte avec une entrĂ©e sans clĂ©.

  4. Envoyer la requĂȘte jusqu'Ă  ce qu'elle soit mise en cache.

  5. Supprimer le cache buster puis renvoyer la requĂȘte.

  6. Obtenir la réponse mise en cache

La mise en cache ou non d'une rĂ©ponse peut dĂ©pendre de toutes sortes de facteurs, tels que l'extension de fichier (exp: .js), le type de contenu, la route, le code d'Ă©tat (exp: 200 OK) et les en-tĂȘtes de rĂ©ponse (exp: X-Forwarded-Host).

Poisoning vs. Deception:

Poisoning vise mettre en cache une réponse contenant du code malveillant pour impacter les autres utilisateurs, Deception vise à mettre en cache une page contenant des informations sensibles d'un autre utilisateur pour pouvoir les récupérer.

CPDoS (Cache Poisoning Denial of Services)

HTTP Header Oversize (HHO)

La plupart des serveurs Web et des proxys fournissent une limite de taille d'en-tĂȘte de requĂȘte d'environ 8,192 bytes. Cependant, il existe certaines exceptions telles que les CDN CloudFront par exemple qui autorisent jusqu'Ă  20,480 bytes.

Les attaques CPDoS HHO fonctionnent dans des scĂ©narios oĂč une application Web utilise un cache qui accepte une limite de taille d'en-tĂȘte supĂ©rieure Ă  celle du serveur d'origine. Pour attaquer une telle application Web, un client malveillant envoie une requĂȘte HTTP GET comprenant un en-tĂȘte supĂ©rieur Ă  la taille prise en charge par le serveur d'origine mais infĂ©rieur Ă  la taille prise en charge par le cache. Pour ce faire, un attaquant a deux options. Soit il utilise plusieurs en-tĂȘtes volumineux dans une mĂȘme requĂȘte, soit il ne crĂ©er qu'une seule en-tĂȘte mais avec un contenu suffisamment volumineux pour gĂ©nĂ©rer l'erreur.

Exemple:

X-Oversized-Header-1: 000000000000000000000000000000000000...
X-Oversized-Header-2: 000000000000000000000000000000000000...
...

HTTP Meta Character (HMC)

Le principe cette fois est de gĂ©nĂ©rer une erreur en envoyant des en-tĂȘtes contenant des mĂ©ta-caractĂšres tels que \n, \r, \a...

Exemple:

X-Metachar-Header: \n
X-Metachar-Header: \r
...

HTTP Method Overwrite (HMO)

De nombreux systĂšmes intermĂ©diaires tels que les proxys, les Ă©quilibreurs de charge, les caches et les pare-feu ne prennent en charge que les mĂ©thodes GET et POST. Cela signifie que les requĂȘtes HTTP utilisant DELETE , PUT etc sont simplement bloquĂ©es. Pour contourner cette restriction, de nombreuses API REST et frameworks fournissent des en-tĂȘtes tels que X-HTTP-Method-Override, X-HTTP-Method ou X-Method-Override pour les mĂ©thodes HTTP bloquĂ©es par tunnel. Une fois que la requĂȘte atteint le serveur, l'en-tĂȘte demande Ă  l'application Web de remplacer la mĂ©thode HTTP dans la ligne de requĂȘte par celle de la valeur d'en-tĂȘte correspondante.

Le principe de cette variante est donc de tenter de gĂ©nĂ©rer une erreur 404 Not Found depuis une requĂȘte lĂ©gitime (exp: GET /index.html) en remplaçant la mĂ©thode HTTP via une de ces en-tĂȘtes.

De ce fait, si GET /index.html est mise en cache, il sera possible de mettre en cache la réponse comme si il s'agissait d'un POST /index.html par exemple.

Exemple:

GET /index.html                                    404 Not Found
X-Method-Override: POST                            X-Cache: HIT

Host Header Case Normalization (HHCN)

Selon la RFC 4343, les noms de domaine complets (FQDN) doivent toujours ĂȘtre insensibles Ă  la casse. Cependant, pour une raison quelconque, cette rĂšgle n'est pas toujours respectĂ©e par les frameworks. Il est intĂ©ressant de noter que, comme la valeur de l'hĂŽte doit ĂȘtre insensible Ă  la casse, certains dĂ©veloppeurs supposent qu'il est prudent de mettre en minuscules la valeur de l'en-tĂȘte de l'hĂŽte lors de son introduction dans la clĂ© de cache, sans modifier la requĂȘte rĂ©elle envoyĂ©e au serveur principal.

De ce fait, il est parfois possible de gĂ©nĂ©rer des erreurs 404 mises en cache en ajoutant une majuscule dans l'en-tĂȘte Host de la requĂȘte.

Exemple:

Host: Cdn.target.xyz au lieu de Host: cdn.target.xyz

Hop By Hop (HBH)

Un en-tĂȘte hop-by-hop est un en-tĂȘte conçu pour ĂȘtre traitĂ© et consommĂ© par le proxy qui gĂšre la requĂȘte, par opposition Ă  un en-tĂȘte end-to-end, qui est conçu pour ĂȘtre prĂ©sent dans la requĂȘte jusqu'Ă  la fin de la requĂȘte. Selon la RFC 2612, la spĂ©cification HTTP/1.1 traite les en-tĂȘtes suivants comme hop-by-hop par dĂ©faut : 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 agir sur ce que ces en-tĂȘtes indiquent, et ne pas les transmettre au saut suivant.

Outre ces valeurs par dĂ©faut, une requĂȘte peut Ă©galement dĂ©finir un ensemble personnalisĂ© d'en-tĂȘtes Ă  traiter comme un en-tĂȘte hop-by-hop en les ajoutant Ă  l'en-tĂȘte de connexion, comme ceci :

Connection : close, X-Foo, X-Bar

Dans cet exemple, nous demandons au proxy de traiter X-Foo et X-Bar comme une en-tĂȘte hop-by-hop, ce qui signifie que nous voulons qu'un proxy les supprime de la requĂȘte avant de la transmettre. C'est ce fonctionnement qui permet l'exploitation de cette variante de CPDoS.

Spécificités

Certains frameworks et serveurs web utilisent des délimiteurs qui peuvent permettre de tromper les serveurs de cache.

Wordlist utile:

Spring

Par exemple, Spring permet d'utiliser des semicolon comme paramĂštres:

  • /user;params/home sera traitĂ© comme /user/home

  • MyAccount;a.js sera traitĂ© comme /MyAccount

Or, si le serveur met en cache les ressources en .js, le contenu sensible de MyAccount sera mis en cache.

Rails

De la mĂȘme maniĂšre, Rails utilise le . (point) pour afficher les vues, mais toutes les extensions ne sont pas prises en charge par le framework.

Par exemple:

  • /MyAccount affichera la vue myaccount.html.erb

  • /MyAccount.css affichera la vue myaccount.css.erb

Cependant,

  • /MyAccount.aaa ne sera pas reconnu et affichera la vue par dĂ©faut qui est myaccount.html.erb

Cela signifie que si le serveur de cache est configuré pour mettre en cache des extensions n'étant pas reconnues par le framework, il est possible de mettre en cache le contenu de /MyAccount.

Exemple: MyAccount.ico pourrait ĂȘtre mis en cache et afficher la vue myaccount.html.erb

Nginx

mĂȘme chose avec %0A:

  • /MyAccount%0A.js => /MyAccount

Ressources

Outils

Extension Burp Param Miner

Param Miner est une extension de Burp Suite permettant d'automatiser la recherche d'entrées sans clé.

Utilisation: clic droit sur la requĂȘte > "Extensions" > "Param Miner" > ...

Résultats visible dans l'onglet "Extender" > "Extensions" > "Param Miner" > "Output"

HExHTTP

Header Exploitation HTTP est un outil permettant de tester les vulnĂ©rabilitĂ©s liĂ©es aux en-tĂȘtes HTTP qui comprend notamment des tests liĂ©s au cache.

Exemple d'utilisation:

$ python3 hexhttp.py -u https://target.com/

wcDetect

wcDetect est un outil spécialement conçu pour détecter les vulnérabilités de cache deception.

Exemple d'utilisation:

$ python3 wcdetect.py -u https://target.com/

ressource:

ressource:

🌐
â˜Łïž
https://github.com/c0dejump/HExHTTP
https://github.com/c0dejump/wcDetect
Wordlists/Cache/Delimiters.txt at main · mathis2001/WordlistsGitHub
Discourse disclosed on HackerOne: Web Cache Deception Attack (XSS)HackerOne
Logo
Logo