Local File Inclusion zkráceně LFI je druh útoku, který zneužívá bezpečnostní slabinu v podobě volání nějakého lokálního souboru skriptem. Pokud útočník dokáže skriptu podstrčit správný název souboru může to mít fatální následky. Dokáže si například zobrazit citlivé údaje anebo spustit zacyklený náročný skript.
Obranou proti LFI je správně ošetřit všechny vstupy. LFI spadá společně s Remote File Inclusion (RFI) do kategorie File inclusion vulnerability.
Cíle útoku LFI
Podle bezpečnostní chyby může útočník docílit:
- spuštění skriptu na serveru
- provést DoS útok
- ukrást anebo pozměnit data
Příklad útoku
Představme si následující hodně špatně navrženou stránku index.php, která má zobrazit obsah na základě atributu $_GET.
<html> <body> <h1>Špatně navržená stránka</h1> if ( isset( $_GET['stranka'] ) ) { include $_GET['stranka'] . '.php'; } <a href="index.php?stranka=uvod">Úvod</a></br> <a href="index.php?stranka=kontakt">Kontakt</a></br> </body> </html>
Po kliknutí na odkazy se do index.php vloží obsah souborů stranka.php anebo kontakt.php. Záleží co je v proměnné stranka. Útočník však může zavolat adresu index.php?stranka=cokoliv a vloží tím obsah jakéhokoliv souboru s příponou PHP, přímo do skriptu.
Jestliže soubor nebude existovat objeví se chyba. Útočník tak může zkoušet existenci různých souborů.
Pokud místo include bude například echo, tak se místo vložení (spuštění) skriptu, rovnou obsah zobrazí. V nejhorším případě by mohl existovat například soubor config.php, kde budou přístupové údaje k databázi. Pak by stačilo útočníkovi zadat index.php?stranka=config a zobrazí se mu jeho obsah. Tedy pak není problém najít například PHPmyAdmin a s přístupovými údaji, které získal už má kompletní data všech uživatelů, které jsou uložené v databázi.
Ochrana před LFI
Základem je mít ošetřené všechny vstupy. Pokud pracujeme jen s písmeny, čísly a pomlčkou, tak v řetězci nemá co děla lomítko, NULL byte apod. Není dobré přemýšlet ani nad možnými budoucími výjimkami anebo že se něco třeba může hodit.
Ošetřit vstupy je vždy základ.
Tento článek byl byl přečten 6575 krát
Příklad útoku neukazuje LFI, ale XSS. Funkce echo nezpůsobí vložení obsahu souboru, ale vypsání zadaného řetězce, v tomto případě neošetřeného.