# Cache Poisoning via URL discrepancies {{#include ../../banners/hacktricks-training.md}} Dit is 'n opsomming van die tegnieke wat in die pos [https://portswigger.net/research/gotta-cache-em-all](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. {{#include ../../banners/hacktricks-training.md}}