User Tools

Site Tools


local_file_inclusion

Local file inclusion

Napad uključenja lokalne datoteke (Local File Inclusion, LFI) napad je 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”, datoteka se neće prikazati, već odmah preuzeti. To predstavlja problem u slučaju nepročišćenog zahtjeva jer napadač može uključiti malicioznu datoteku.

Najčešće je prisutan 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 budući da parametar page nema nikakvu provjeru i pročišćavanje putanje. U ovom linku putanja je zadana relativno, dakle od trenutnog direktorija u kojem se nalazimo. Oznaka .. u toj putanji označava jedan direktorij iznad. Budući da page parametar nema nikakvu provjeru koliko se daleko korisnik može pomicati prema gore, napadač bi to mogao iskoristiti tako da se popne čak četiri direktorija iznad trenutnoga. Korisnik je u ovome primjeru došao do korijenskog (root) direktorija kojemu nitko osim administratora ne bi trebao imati pristup. U tome 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 naziva datoteke jednostavno dodajemo %00

http://vulnerable_host/preview.php?file=../../../../etc/passwd%00

PRIMJER Zadatak s Hacknite platforme - Lokalne datoteke

Ivica je zaključio kako je za njegov daljnji razvoj karijere neophodno naučiti PHP te prebaciti 
svoju web stranicu na Apache HTTP server.
U procesu izrade web stranice i konfiguracije Apache HTTP servera, Ivica je zavolio Linux te je odlučio
prebaciti i neke svoje datoteke na Linux računalo koje poslužuje web stranicu.
Možeš li pogledati kako Ivica napreduje s izradom web stranice te provjeriti je li možda 
napravio neki propust?

http://chal.hacknite.hr:8002/

Ulaskom na stranicu i pritiskom na “O meni” primjećujemo da se ime stranice pojavljuje u URL-u u parametru page:

To nas upućuje da pokušamo u parametar page upisati ime neke osjetljive datoteke i pristupimo njezinim podatcima.
Također, vidimo da su lozinke zapisane u datoteci /usr/local/lozinke.txt. U tražilicu pod page parametar ubacimo “../../../usr/local/lozinke.txt” i dobili smo rješenje:

Važno je primijetiti da su na početku dodane oznake za odlazak u naddirektorij (..) jer bez njih Local file inclusion ne bi funkcionirao. Korisnik se uobičajeno nikad neće naći u usr direktoriju jer njemu ne bi uopće trebao imati pristup.

PRIMJER Zadatak s Hacknite platforme - Local Login inclusion

Petru je bilo dosadno tijekom ljetnih praznika, i odlučio je napraviti jednostavnu web stranicu.
Nije bio siguran kako bi pokrenuo svoju stranicu i gdje bi ju posluživao, ali se na kraju odlučio za svoje
računalo gdje se nalaze razne datoteke. Petar ima Linux računalo i odlučio je posluživati svoju stranicu uz
pomoć Apache HTTP servera. Petar je sebi napravio račun na stranici kao admin i njime se služi kad god
želi pristupiti stranici. Stranica nije skroz gotova i postoje neke greške, ali Petar je jako ponosan nju
i siguran je da nije napravio nikakav propust. 
Možeš li provjeriti i vidjeti je li Petar u pravu? 
http://chal.platforma.hacknite.hr:10015

Ovako izgleda stranica:

Ako se pokušamo ulogirati kao administrator, vidimo da se šalje GET zahtjev jer se u URL-u nalazi path datoteke u kojoj se nalazimo (admin.php). To znači da potencijalno možemo dobiti pristup access logu. To ćemo pokušati primjenom LFI tako što ćemo u tražilicu upisati:
/view.php?file=../../../var/log/apache2/access.log

Rezultat je ispis access.log datoteke u kojoj se ujedno i nalazi rješenje zadatka:

Izvori

local_file_inclusion.txt · Last modified: 2023/12/07 16:09 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki