This is an old revision of the document!
Local file inclusion
Napad uključenja lokalne datoteke (Local File Inclusion, LFI) je napad koji prisiljava HTTP poslužitelj da u odgovor na zahtjev ugradi datoteku koja je pohranjena na napadnutom poslužitelju. Datoteka može izravno izvršiti neki maliciozan kod ili sadržavati osjetljive informacije kojima prosječan korisnik ne bi trebao imati pristup.
Ako HTTP zaglavlje sadrži “Content-Disposition: attachment; filename=file.pdf” datoteke se neće prikazati, već odmah preuzeti. To predstavlja problem u slučaju nepročišćenog zahtjeva jer napadač može uključiti datoteku malicioznog sadržaja.
Najčešće je pristuan u PHP web aplikacijama i to u naredbama include(<filename>) ili include_once(<filename>) koje primaju putanju do datoteke koja se uključuje u program. Ranjivost se javlja kad nema provjere primljenog argumenta jer tada napadač može dobiti mogućnost čitanja svih datoteka na poslužitelju na koje korisnički račun web aplikacije ima pravo pristupa i čitanja.
Recimo da korisnik unese
http://vulnerable_host/preview.php?file=../../../../etc/passwd
Ova naredba ispisat će sve korisnike prisutne na ranjivom poslužitelju. Oznaka .. u Linux sustavima označava naddirektorij. Ako se putanja do neke datoteke zadaje relativno (u odnosu na trenutnu poziciju korisnika), oznaka .. u toj putanju označava jedan direktorij iznad. Budući da parametar page nema nikakvu provjeru koliko se daleko korisnik može pomicati prema gore, napdač bi to mogao iskoristiti tako da se popne čak četiri direktorija iznad trenutnoga. Korisnik je u ovome primjeru došao do root direktorija kojemu nitko osim administratora ne bi trebao imati pristup. U root direktoriju nalazi se etc direktorij koji u Linux sustavima sadrži sve informacije vezane uz konfiguraciju sustava, uključujući korisnike i njihove lozinke. Zato je napadač uspio doći do svih korisnika sustava. To je potencijalno opasno jer jednom kad napadač uspije enumerirati sve korisnike u nekom sustavu, može grubom silom (brute force) probiti njihove lozinke i steći njihova prava.
Ranjivost se može iskoristiti i kod naprednijih naredbi, primjerice:
<?php include($_GET['file'].".php"); ?>
U ovom slučaju datoteka koju dohvaćamo ima predefiniranu ekstenziju .php pa ne možemo jednostavno poslati drugu datoteku u zahtjevu. Jedan od načina zaobilaženja je tzv. Null Byte Injection, odnosno na kraju nazica datoteke jednostavno dodajemo %00
http://vulnerable_host/preview.php?file=../../../../etc/passwd%00