Cache Poisoning via URL discrepancies
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 misbruik deur verskille tussen cache proxies en webbedieners.
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 'n deel van die pad as cache sleutel 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).
URL begrenzers verskil volgens raamwerk en bediener, wat die manier waarop versoeke gerouteer en antwoorde hanteer word, beïnvloed. Sommige algemene oorsprong begrenzers is:
Puntkomma: Gebruik in Spring vir matriks veranderlikes (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
).
Nuwe lyn Byte: Skei URL-komponente in Nginx (bv. /users/MyAccount%0aaaa
→ /account/MyAccount
).
Ander spesifieke begrenzers kan gevind word deur hierdie proses:
Stap 1: Identifiseer nie-kasbare versoeke en gebruik dit om te monitor hoe URL's met potensiële begrenzers hanteer word.
Stap 2: Voeg ewekansige agtervoegsels by pades en vergelyk die bediener se antwoord om te bepaal of 'n karakter as 'n begrenser funksioneer.
Stap 3: Stel potensiële begrenzers voor die ewekansige agtervoegsel in om te sien of die antwoord verander, wat die gebruik van 'n begrenser aandui.
Doel: URL-parsers in beide cache en oorsprong bedieners normaliseer URL's om pades te onttrek vir eindpuntkaarte en cache sleutels.
Proses: Identifiseer padbegrenzers, onttrek en normaliseer die pad deur karakters te dekodeer en punt-segmente te verwyder.
Verskillende HTTP bedieners en proxies soos Nginx, Node, en CloudFront dekodeer begrenzers anders, wat lei tot inkonsekwentheid oor CDNs en oorsprong bedieners wat misbruik kan word. Byvoorbeeld, as die webbediener hierdie transformasie uitvoer /myAccount%3Fparam
→ /myAccount?param
maar die cache bediener hou die pad /myAccount%3Fparam
as sleutel, is daar 'n inkonsekwentheid.
'n Manier om vir hierdie inkonsekwenthede te kyk, is om versoeke te stuur met URL-kodering van verskillende karakters nadat die pad sonder enige kodering gelaai is en te kyk of die gekodeerde pad se antwoord van die kas antwoord gekom het.
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 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 is.
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, klas, 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 begrenser en 'n statiese uitbreiding te gebruik, soos 'n versoek na /home$image.png
wat /home$image.png
sal kas en die oorsprong bediener sal reageer met /home
Goed bekende 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 begrenser, 'n statiese gids en punte te gebruik soos: /home/..%2fstatic/something
wat /static/something
sal kas en die antwoord sal wees /home
Statiese gidse + punte: 'n Versoek na /static/..%2Fhome
of na /static/..%5Chome
mag as is gekas word, maar die antwoord mag /home
wees
Statiese lêers: Sommige spesifieke lêers word altyd gekas soos /robots.txt
, /favicon.ico
, en /index.html
. Wat misbruik kan word soos /home/..%2Frobots.txt
waar die kas dalk /robots.txt
sal stoor en die oorsprong bediener sal reageer op /home
.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)