User Tools

Site Tools


local_file_inclusion

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

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 budući da parametar page nema nikakvu provjeru i pročišćavanje putanje. 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 page parametar 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 primjeri 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 naredbim, 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

PRIMJER Zadatak sa 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
pomoću 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 URL izgleda ovako: http://chal.platforma.hacknite.hr:10015/admin.php To znači da potenijcijalno možemo dobiti pristup access logu. To ćemo pokušati primjenom Local
file inclusiona 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:

local_file_inclusion.1699538425.txt.gz · Last modified: 2025/06/03 10:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki