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

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