Cache Poisoning via URL discrepancies

Support 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 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).

Delimiters

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.

Normalisering & Kodes

  • 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.

Kodes

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.

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 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.

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, 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.

Support HackTricks

Last updated