Cache Poisoning via URL discrepancies
Reading time: 5 minutes
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Dit is 'n opsomming van die tegnieke wat in die pos https://portswigger.net/research/gotta-cache-em-all voorgestel word om cache poisoning-aanvalle te benut deur verskille tussen cache-proxies en webbedieners.
note
Die doel van hierdie aanval is om die cache-bediener te laat dink dat 'n statiese hulpbron gelaai word sodat dit dit kas, terwyl die cache-bediener as cache-sleutel 'n deel van die pad stoor, maar die webbediener reageer deur 'n ander pad op te los. Die webbediener sal die werklike pad oplos wat 'n dinamiese bladsy sal laai (wat sensitiewe inligting oor die gebruiker kan stoor, 'n kwaadwillige payload soos XSS of om te herlei om 'n JS-lêer van die aanvaller se webwerf te laai, byvoorbeeld).
Delimiters
URL-delimiters verskil volgens raamwerk en bediener, wat die manier waarop versoeke gerouteer word en hoe antwoorde hanteer word, beïnvloed. Sommige algemene oorsprong-delimiters is:
- Puntkomma: Gebruik in Spring vir matriksveranderlikes (bv.
/hello;var=a/world;var1=b;var2=c
→/hello/world
). - Punt: Spesifiseer antwoordformaat in Ruby on Rails (bv.
/MyAccount.css
→/MyAccount
) - Null Byte: Verkort pades in OpenLiteSpeed (bv.
/MyAccount%00aaa
→/MyAccount
). - Newline Byte: Skei URL-komponente in Nginx (bv.
/users/MyAccount%0aaaa
→/account/MyAccount
).
Ander spesifieke delimiters kan gevind word deur hierdie proses:
- Stap 1: Identifiseer nie-cachebare versoeke en gebruik dit om te monitor hoe URL's met potensiële delimiters hanteer word.
- Stap 2: Voeg ewekansige agtervoegsels by pades en vergelyk die bediener se antwoord om te bepaal of 'n karakter as 'n delimiter funksioneer.
- Stap 3: Stel potensiële delimiters in voordat die ewekansige agtervoegsel om te sien of die antwoord verander, wat die gebruik van delimiters aandui.
Normalization & Encodings
- Doel: URL-parsers in beide cache- en oorsprongbedieners normaliseer URL's om pades vir eindpuntkaarte en cache-sleutels te onttrek.
- Proses: Identifiseer pad-delimiters, onttrek en normaliseer die pad deur karakters te dekodeer en punt-segmente te verwyder.
Encodings
Verskillende HTTP-bedieners en proxies soos Nginx, Node, en CloudFront dekodeer delimiters anders, wat lei tot inkonsekwentheid oor CDNs en oorsprongbedieners wat uitgebuit kan word. Byvoorbeeld, as die webbediener hierdie transformasie uitvoer /myAccount%3Fparam
→ /myAccount?param
maar die cache-bediener die pad /myAccount%3Fparam
as sleutel hou, is daar 'n inkonsekwentheid.
'n Manier om vir hierdie inkonsekwenthede te kyk, is om versoeke te stuur URL-kodering van verskillende karakters na die pad te laai sonder enige kodering en te kyk of die gekodeerde padantwoord van die kasantwoord gekom het.
Punt-segment
Die padnormalisering waar punte betrokke is, is ook baie interessant vir cache poisoning-aanvalle. Byvoorbeeld, /static/../home/index
of /aaa..\home/index
, sommige cache-bedieners sal hierdie pades met hulself as die sleutels kas, terwyl ander die pad kan oplos en /home/index
as die cache-sleutel gebruik.
Net soos voorheen, help dit om hierdie soort versoeke te stuur en te kyk of die antwoord van die kas verkry is om te identifiseer of die antwoord op /home/index
die antwoord is wat gestuur is wanneer daardie pades aangevra word.
Statiese Hulpbronne
Verskeie cache-bedieners sal altyd 'n antwoord kas as dit as staties geïdentifiseer word. Dit kan wees omdat:
- Die uitbreiding: Cloudflare sal altyd lêers met die volgende uitbreidings kas: 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
- Dit is moontlik om 'n kas te dwing om 'n dinamiese antwoord te stoor deur 'n delimiter en 'n statiese uitbreiding te gebruik, soos 'n versoek na
/home$image.png
wat/home$image.png
sal kas en die oorsprongbediener sal met/home
antwoordgee. - Welbekende statiese gidse: Die volgende gidse bevat statiese lêers en daarom moet hul antwoord gekas word: /static, /assets, /wp-content, /media, /templates, /public, /shared
- Dit is moontlik om 'n kas te dwing om 'n dinamiese antwoord te stoor deur 'n delimiter, 'n statiese gids en punte te gebruik, soos:
/home/..%2fstatic/something
wat/static/something
sal kas en die antwoord sal/home
wees. - Statiese gidse + punte: 'n Versoek na
/static/..%2Fhome
of na/static/..%5Chome
kan as is gekas word, maar die antwoord kan/home
wees. - Statiese lêers: Sommige spesifieke lêers word altyd gekas soos
/robots.txt
,/favicon.ico
, en/index.html
. Dit kan misbruik word soos/home/..%2Frobots.txt
waar die kas/robots.txt
kan stoor en die oorsprongbediener met/home
kan antwoordgee.
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.