Cache Poisoning via URL discrepancies
Reading time: 4 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ovo je sažetak tehnika predloženih u postu https://portswigger.net/research/gotta-cache-em-all kako bi se izvršili napadi na keš zloupotrebljavajući razlike između keš proksija i web servera.
note
Cilj ovog napada je da natera keš server da pomisli da se učitava statički resurs tako da ga kešira dok keš server čuva deo putanje kao keš ključ, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitati dinamičku stranicu (koja može sadržati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa sajta napadača, na primer).
Delimiters
URL delimiters se razlikuju u zavisnosti od okvira i servera, utičući na to kako se zahtevi usmeravaju i kako se odgovori obrađuju. Neki uobičajeni delimiters su:
- Tačka i zarez: Koristi se u Spring-u za matriks varijable (npr.
/hello;var=a/world;var1=b;var2=c
→/hello/world
). - Tačka: Specifikuje format odgovora u Ruby on Rails (npr.
/MyAccount.css
→/MyAccount
). - Null Byte: Skraćuje putanje u OpenLiteSpeed (npr.
/MyAccount%00aaa
→/MyAccount
). - Newline Byte: Razdvaja URL komponente u Nginx-u (npr.
/users/MyAccount%0aaaa
→/account/MyAccount
).
Ostali specifični delimiters mogu se naći prateći ovaj proces:
- Korak 1: Identifikovati ne-kešabilne zahteve i koristiti ih za praćenje kako se URL-ovi sa potencijalnim delimiterima obrađuju.
- Korak 2: Dodati nasumične sufikse putanjama i uporediti odgovor servera kako bi se utvrdilo da li karakter funkcioniše kao delimiter.
- Korak 3: Uvesti potencijalne delimiters pre nasumičnog sufiksa da se vidi da li se odgovor menja, što ukazuje na korišćenje delimitera.
Normalization & Encodings
- Svrha: URL parseri u keš i izvor serverima normalizuju URL-ove kako bi izvukli putanje za mapiranje krajnjih tačaka i keš ključeve.
- Proces: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem tačkastih segmenata.
Encodings
Različiti HTTP serveri i proksi kao što su Nginx, Node i CloudFront dekodiraju delimitere na različite načine, što dovodi do nedoslednosti između CDN-ova i izvornih servera koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju /myAccount%3Fparam
→ /myAccount?param
, ali keš server zadržava kao ključ putanju /myAccount%3Fparam
, postoji nedoslednost.
Jedan od načina da se proveri za ove nedoslednosti je slanje zahteva URL kodirajući različite karaktere nakon učitavanja putanje bez ikakvog kodiranja i provera da li je odgovor kodirane putanje došao iz keširanog odgovora.
Dot segment
Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na keš. Na primer, /static/../home/index
ili /aaa..\home/index
, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok drugi mogu rešiti putanju i koristiti /home/index
kao keš ključ.
Baš kao i pre, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na /home/index
odgovor koji je poslat kada su te putanje zatražene.
Static Resources
Nekoliko keš servera će uvek keširati odgovor ako je identifikovan kao statički. Ovo može biti zbog:
- Ekstenzije: Cloudflare će uvek keširati datoteke sa sledećim ekstenzijama: 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
- Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter i statičku ekstenziju kao što je zahtev za
/home$image.png
koji će keširati/home$image.png
, a izvorni server će odgovoriti sa/home
- Poznate statičke direktorijume: Sledeći direktorijumi sadrže statične datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared
- Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter, statički direktorijum i tačke kao:
/home/..%2fstatic/something
će keširati/static/something
, a odgovor će biti/home
- Statički direktorijumi + tačke: Zahtev za
/static/..%2Fhome
ili za/static/..%5Chome
može biti keširan kakav jeste, ali odgovor može biti/home
- Statičke datoteke: Neke specifične datoteke se uvek keširaju kao što su
/robots.txt
,/favicon.ico
, i/index.html
. Što se može zloupotrebiti kao/home/..%2Frobots.txt
gde keš može čuvati/robots.txt
, a izvorni server odgovara na/home
.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.