Šta je Path Traversal?
Path Traversal (Directory Traversal) je napad u kome napadač manipuliše putanjom fajla u URL-u ili parametru da bi pristupio fajlovima van namenjenog direktorijuma. Sekvenca ../ (dot-dot-slash) pomera "gore" u hijerarhiji direktorijuma.
Klasičan primer
Aplikacija prikazuje slike ovako: https://sajt.rs/files?name=slika.jpg
Napadač menja zahtev u: https://sajt.rs/files?name=../../../../etc/passwd
Ako aplikacija ne sanitizuje putanju, server vraća sadržaj /etc/passwd — listu korisnika sistema.
Šta je LFI (Local File Inclusion)?
LFI je specifičan oblik path traversal kod PHP aplikacija: napadač može da "uključi" (include) lokalni fajl u izvršavanje PHP skripte. Ovo je ozbiljnije od čitog čitanja jer inkludovani fajl se izvršava kao PHP kod.
// Ranjivi PHP kod:
$page = $_GET['page'];
include($page . '.php');
Zahtev: /index.php?page=../../../../etc/passwd%00
%00 je null byte koji "odseca" .php nastavak na starijim PHP verzijama.
Šta napadač može da pročita
/etc/passwd— lista korisnika (Linux)/etc/shadow— hash lozinki (root pristup potreban).env— API ključevi, DB lozinke, tajni ključeviconfig.php,wp-config.php— database kredencijali/proc/self/environ— environment varijable procesa~/.ssh/id_rsa— SSH privatni ključ- Apache/Nginx access logovi — potencijalni put do RCE
LFI + log poisoning = Remote Code Execution. Napadač najpre ubacuje PHP payload u access log (kroz User-Agent header), pa inkluduje log fajl kroz LFI. Rezultat: arbitrarno izvršavanje koda na serveru.
Tipična mesta ranjivosti
- Parametri za preuzimanje fajlova:
?file=,?doc=,?path= - Template sistemi koji učitavaju fajlove na osnovu URL parametra
- Sistemi za administraciju koji prikazuju logove
- Include/require u PHP bez validacije
- Backup i restore funkcionalnosti
Odbrana
1. Whitelist dozvoljenih putanja
Nikada ne konstruišite putanje fajlova direktno iz korisničkog unosa. Koristite whitelist: dozvolite samo tačno definisane vrednosti.
$allowed = ['home', 'about', 'contact'];
if (!in_array($page, $allowed)) {
die('Invalid page');
}
include($page . '.php');
2. Canonicalize putanje
Koristite realpath() i proverite da li rezultujuća putanja počinje dozvoljenim baznim direktorijumom.
$base = '/var/www/html/files/';
$path = realpath($base . $filename);
if (strpos($path, $base) !== 0) {
die('Access denied');
}
3. Onemogućite null byte obradu
Na PHP 5.3+, null byte u putanji generiše grešku. Svakako filtrirajte \0 iz korisničkog unosa.
4. Minimalna privilegija za web server
Web server proces treba da ima pristup samo fajlovima neophodnim za rad aplikacije — ne /etc/, ne home direktorijumima korisnika, ne logovima sistema.
5. Onemogućite include wrappers (PHP)
U php.ini: allow_url_include = Off — sprečava Remote File Inclusion (RFI).
Proverite bezbednost vašeg sajta
Profesionalna procena ranjivosti. OWASP Top 10, dark web monitoring, PDF izveštaj za 2–3 radna dana.
Zatražite procenu →