csrf
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| csrf [2023/11/21 13:45] – created zrinka | csrf [2026/06/16 15:37] (current) – Promjena sadržaja primjera, velike prepravke i prerada mitigacije mbunic | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | __PRIMJER__ -**Zadatak s Hacknite platforme - Korisni linkovi** | + | ====CSRF===== |
| - | < | + | |
| - | Kako bi olakšao učenje sebi i svojim prijateljima, | + | |
| - | linkova. On i njegovi prijatelji si mogu slati linkove zanimljivih članaka, tutoriala ili slično. | + | |
| - | Iako vjeruje svojim prijateljima, | + | **CSRF** (engl. //cross site request forgery//) je vrsta napada koja iskorištava ranjivost nastalu zbog nerazlikovanja autentičnih |
| - | Mario se ulogira na stranicu svojim | + | |
| - | što ode na njega i provjeri na koju stranicu link vodi. To ipak može potrajati nekoliko sekundi, | + | |
| - | jer Mario voli detaljnije proučiti stranicu na kojoj se nalazi. | + | |
| - | Početkom nove akademske godine, odlučio je proširiti stranicu, i sad je i drugi ljudi mogu koristiti. | + | Jednostavan primjer: |
| - | Mario ti je odlučio dati pristup stranici. Možeš se registrirati, | + | |
| - | Osim toga, odlučio ti je dati i source kod stranice na kojoj provjerava linkove tako da bi mogao vidjeti | + | |
| - | na koji on to točno radi. | + | |
| - | Flag je u formatu CTF2021[brojevi] | + | Na adresi < |
| + | |||
| + | < | ||
| + | |||
| + | Ovim zahtjevom se izvršava transakcija. U parametru //amount// se definira količina novaca s računa korisnika koji je poslao zahtjev na račun korisnika s korisničkim računom navedenim | ||
| + | |||
| + | Napadač može prilagoditi parametre //amount// i //to// u URL-u i poslati takav link žrtvi. Klikom na link, ako je žrtva aktivno prijavljena u bankarsku aplikaciju i ima aktivnu sesiju, žrtva bi poslala novce napadaču. | ||
| + | |||
| + | Napadač može na svojoj zlonamjernoj stranici napisati JavaScript kod koji se izvršava automatski posjetom stranice i u pozadini šalje ovaj zahtjev. Web preglednik žrtve automatski dodaje kolačić sa sesijom za domenu stranice banke uz zahtjev, ako žrtva ima aktivnu sesiju na stranici banke te se transakcija izvršava u žrtvinom kontekstu. Ovo je primjer CSRF napada. | ||
| + | |||
| + | |||
| + | Napad bi potencijalno bio moguć i da funkcionalnost koristi POST zahtjev. Pretpostavimo da bankarska aplikacija koristi formu sljedećeg izgleda: | ||
| + | |||
| + | <code html> | ||
| + | |||
| + | <form action="/ | ||
| + | <label for=" | ||
| + | <input type=" | ||
| + | <label for=" | ||
| + | <input type=" | ||
| + | <input type=" | ||
| + | </ | ||
| - | http:// | ||
| - | </ | ||
| - | U prilogu se nalazi još jedna php datoteka.\\ | ||
| - | Ako pratimo poveznicu, dolazimo na početnu stranicu koja od nas traži registraciju. Nakon što su napravimo, došli smo do stranice gdje možemo odabrati osobu i link koji joj šaljemo. Primjećujemo mjesto za korisnički input koje, ako nema dobro riješeno pročišćavanje unosa, može biti potencijalno ranjivo. \\ | ||
| - | Budući da iskorištavamo XSS ranjivost, prvo ćemo napraviti svoju web stranicu sa IP adresom {// | ||
| - | < | ||
| - | [javascript] document.location=" | ||
| </ | </ | ||
| - | Budući da Marijeva stranica ne radi nikakvu provjeru predanih linkova, | + | |
| - | < | + | Zatim napadač kreira svoju lažnu stranicu te na njoj postavi |
| - | http://ip_adresa_zadatka/ | + | |
| - | </code> | + | < |
| - | Ovime smo kao //query// parameter unijeli skriptu koja prebacuje | + | <form action=" |
| - | %3C < \\ | + | <input type=" |
| - | %3E > \\ | + | <input type=" |
| - | %3D = \\ | + | <input type=" |
| - | %22 " | + | </form> |
| - | %3A : \\ | + | </code> |
| - | %3F ? \\ | + | |
| - | %2F / \\ | + | Kada bi žrtva posjetila napadačevu stranicu i pokušala se registrirati klikom na gumb REGISTER, poslala bi zahtjev POST prema < |
| - | %3B ; \\ | + | |
| - | Kad prevedemo link na taj način, uočit ćemo da je isti kao onaj koji smo na početku upisali | + | Slanje ovog zahtjeva je također moguće automatizirati tako da ga žrtva pošalje samim posjetom stranice. Npr. dodavanjem funkcije submit u onload atribut u body elementu: |
| + | |||
| + | <code html> | ||
| + | <body onload="document.forms[0].submit()"> | ||
| + | < | ||
| + | ... | ||
| + | </form> | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Ako je žrtva u trenutku kada posjeti napadačevu stranicu prijavljena u bankarsku aplikaciju i ako je ta aplikacija ranjiva | ||
| + | |||
| + | |||
| + | ===Prevencija CSRF ranjivosti=== | ||
| + | |||
| + | Osnovni razlog ranjivosti na CSRF napade je nedostatak mehanizma za provjeru zahtjeva, kojim bi se razlikovalo dolazi li zahtjev iz legitimnog korisničkog konteksta. | ||
| + | |||
| + | Uobičajena zaštita od ovakvih napada | ||
| + | |||
| + | Unutar POST zahtjeva klijent šalje predani token natrag nakon čega poslužitelj provjerava njegovu validnost, uspoređujući ga s vrijednošću pohranjenom na poslužitelju kako bi se odredilo jesu li vrijednosti iste. Ako je vrijednost ispravna, zahtjev se izvršava i generira se novi token. | ||
| + | |||
| + | Alternativno, | ||
| + | |||
| + | Ako su CSRF tokeni ispravno implementirani, | ||
| + | |||
| + | |||
| + | |||
csrf.1700574307.txt.gz · Last modified: 2025/12/01 11:40 (external edit)