User Tools

Site Tools


local_file_inclusion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
local_file_inclusion [2026/06/11 18:47] mbuniclocal_file_inclusion [2026/06/11 19:23] (current) mbunic
Line 1: Line 1:
 ====Local file inclusion==== ====Local file inclusion====
  
-**Ranjivost uključivanja lokalnih datoteka** (//Local File Inclusion//, LFI) je ranjivost koja napadaču omogućuje dohvaćanje čitanje datoteka iz datotečnog sustava poslužitelja, uključujući datoteke koje sadrže osjetljive podatke i ne bi trebale biti izložene korisnicima. To mogu biti konfiguracijske datoteke, datoteke s kodom koji se izvršava na poslužitelju, datoteke baze podataka (npr. ako se koristi SQLite), "/etc/passwd" datoteka i druge.+**Ranjivost uključivanja lokalnih datoteka** (//Local File Inclusion//, LFI) napadaču omogućuje uključivanje, dohvaćanje ili čitanje datoteka iz datotečnog sustava poslužitelja, uključujući datoteke koje sadrže osjetljive podatke i ne bi trebale biti izložene korisnicima. 
 +To mogu biti konfiguracijske datoteke, datoteke s kodom koji se izvršava na poslužitelju, datoteke baze podataka (npr. ako se koristi SQLite), "/etc/passwd" datoteka i druge.
  
  
-Primjeri funkcija u PHP web aplikacijama koje nepravilnim korištenjem mogu omogućiti ovaj napad su funkcije include(<filename>) i include_once(<filename>). Ranjivost se javlja +Primjeri funkcija u PHP web aplikacijama koje nepravilnim korištenjem mogu omogućiti ovaj napad su funkcije include(<filename>) i include_once(<filename>). Ranjivost nastaje 
-kad se korisnički unos, izravno ili neizravno, koristi kao argument funkcije bez provjere ili adekvatnih ograničenja. To omogućava napadaču da navede proizvoljne datoteke iz lokalnog datotečnog sustava kao argumente funkcije, navodeći njihovu apsolutnu ili relativnu putanju. Posljedica toga, osim preuzimanja osjetljivih datoteka iz datotečnog sustava poslužitelja, u određenim okolnostima može biti čak i njihovo izvršavanje, ako je kao argument navedena datoteka s kodom i *.php* ekstenzijom te se učitava funkcijom *include*. Tako napad potencijalno može eskalirati i do Remote Code Executiona (RCE).+kada se korisnički unos, izravno ili neizravno, koristi kao argument funkcije bez provjere ili adekvatnih ograničenja. To omogućuje napadaču da navede proizvoljne datoteke iz lokalnog datotečnog sustava kao argumente funkcije, navodeći njihovu apsolutnu ili relativnu putanju.
  
 +Posljedica toga, osim dohvaćanja osjetljivih datoteka iz datotečnog sustava poslužitelja, u određenim okolnostima može biti čak i izvršavanje koda u datotekama, ako je npr. kao argument navedena datoteka s kodom i *.php* ekstenzijom te se učitava funkcijom *include*. Tako napad potencijalno može eskalirati i do izvršavanja koda (//Remote Code Execution//, RCE).
 +
 +
 +Pretpostavimo da korisnik unese sljedeći URL:
  
-Recimo da korisnik unese: 
 <code> <code>
 http://vulnerable_host/preview.php?file=../../../../etc/passwd http://vulnerable_host/preview.php?file=../../../../etc/passwd
 </code> </code>
  
-Ova naredba ispisat će sadržaj datoteke "/etc/passwd" s poslužitelja ako parametar //file// nema nikakvu provjeru i pročišćavanje vrijednosti putanje. U ovom linku putanja je zadana relativno, dakle od trenutnog direktorija u kojem se nalazimo. Oznaka ".." u putanji predstavlja roditeljski direktorij, odnosno direktorij jednu razinu iznad trenutačnog. Budući da //file// parametar ne ograničava kretanje kroz strukturu direktorija, napadač bi to mogao iskoristiti tako da +Ovaj zahtjev ispisat će sadržaj datoteke "/etc/passwd" s poslužitelja ako parametar //file// nema nikakvu provjeru i pročišćavanje vrijednosti putanje. U ovom URL-u putanja je zadana relativno, tj. u odnosu na radni direktorij u kojem se aplikacija izvršava. Oznaka ".." u putanji predstavlja roditeljski direktorij, odnosno direktorij jednu razinu iznad trenutačnog. Budući da //file// parametar ne ograničava kretanje kroz strukturu direktorija, napadač bi to mogao iskoristiti tako da 
-se popne čak četiri direktorija iznad trenutnoga. Napadač bi u tom slučaju došao+se popne četiri razine direktorija iznad trenutačnog direktorija. 
 + 
 +Napadač bi u ovom slučaju došao
 do korijenskog (//root//) direktorija, čime može pristupiti osjetljivim datotekama koje aplikacija inače ne bi smjela izlagati korisnicima. do korijenskog (//root//) direktorija, čime može pristupiti osjetljivim datotekama koje aplikacija inače ne bi smjela izlagati korisnicima.
-tome direktoriju nalazi se etc direktorij koji u Linux sustavima+tom direktoriju nalazi se /etc direktorij koji u Linux sustavima
 sadrži informacije vezane uz konfiguraciju sustava, uključujući korisnike  sadrži informacije vezane uz konfiguraciju sustava, uključujući korisnike 
-i njihove hashirane lozinke (/etc/shadow datoteka). To je potencijalno +i njihove hashirane lozinke (/etc/shadow datoteka). 
-opasno jer ako napadač uspije enumerirati sve korisnike nekom sustavu, može grubom silom  + 
-(//brute force// ili korištenjem rječnika) nad hashevima njihovih lozinki saznati izvorne lozinke i koristiti njihove račune (iako obično samo administrator ima pristup /etc/shadow datoteci, proces može biti neispravno pokrenut s prevelikom razinom privilegija ili se napad može kombinirati s napadom podizanja prava).+To je potencijalno 
 +opasno jer ako napadač uspije enumerirati sve korisničke račune u sustavu, može grubom silom  
 +(//brute force// ili korištenjem rječnika) nad hashevima njihovih lozinki pokušati otkriti izvorne lozinke i koristiti njihove račune (iako obično samo administrator ima pristup /etc/shadow datoteci, proces može biti neispravno pokrenut s prevelikom razinom privilegija ili se napad može kombinirati s napadom podizanja privilegija).
  
 Ranjivost se može iskoristiti i kod zaštićenijih oblika poziva funkcija, primjerice: Ranjivost se može iskoristiti i kod zaštićenijih oblika poziva funkcija, primjerice:
  
 <code> <code>
-<?php include($_GET['file'].".php"); ?>+<?php include($_GET['file'] . ".php"); ?>
 </code> </code>
  
-U ovom slučaju datoteka koju dohvaćamo ima predefiniranu ekstenziju .php pa  +U ovom slučaju datoteka koja se dohvaćima predefiniranu ekstenziju .php pa se 
-ne možemo jednostavno poslati drugu datoteku u zahtjevu. Jedan od prijašnjih načina zaobilaženja (u modernim PHP verzijama više nije primjenjiv)+ne možemo jednostavno zatražiti proizvoljnu datoteku bez te ekstenzije. Jedan od prijašnjih načina zaobilaženja (u modernim PHP verzijama više nije primjenjiv)
 je tzv. Null Byte Injection, odnosno na kraju naziva datoteke se dodaju null bajtovi "%00". je tzv. Null Byte Injection, odnosno na kraju naziva datoteke se dodaju null bajtovi "%00".
 <code> <code>
 http://vulnerable_host/preview.php?file=../../../../etc/passwd%00 http://vulnerable_host/preview.php?file=../../../../etc/passwd%00
 </code> </code>
 +
 +Funkcije napisane u C-u koje obrađuju ovaj unos bi ostatak niza nakon pojave nul bajta zanemarile, jer se nul bajt interpretira kao kraj stringa, te bi se ekstenzija .php učinkovito uklonila iz parisrane putanje.
  
  
local_file_inclusion.1781203633.txt.gz · Last modified: 2026/06/11 18:47 by mbunic

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki