Local File Inclusions

Die Webdesign-Landschaft hat sich in den vergangenen Jahren stark verändert. Grelle Farben und niedrig aufgelöste Bilder, die den Webseiten einen eher persönlichen Touch zu geben versuchten, sind mittlerweile klaren Designs mit Fokus auf ein intuitives User-Interface gewichen. Infolgedessen sind auch frame- und tabellenbasierte Webseiten mittlerweile verpönt und kaum noch anzutreffen. So boten sie allerdings auch einen nicht zu unterschätzenden Mehrwert, nämlich die Tatsache, dass keine besonderen Programmier- oder Webdesignkenntnisse von Nöten waren,um sie praktisch umzusetzen.

Die Alternative ist jedoch um einiges mächtiger: Mit Hilfe von CSS, JavaScript und dynamischem, serverseitig generiertem Content ist es möglich ansprechende, moderne Webseiten zu erstellen. Eine gerne genutzte, wenn auch altmodische Alternative zu Frames sind serverseitige include statements. Wie diese funktionieren lässt sich einfach anhand eines Beispiels erläutern:

index.php
<?php
include("header.php");
include("body.php");
include(footer.php");
?>

Hierbei liegt jeder einzelne Seitenabschnitt in einer separaten Datei vor. Das macht es möglich die einzelnen Abschnitte wiederzuverwenden und global zu bearbeiten, anstatt Änderungen - beispielsweise im Headerbereich - auf jeder einzelnen Seite vorzunehmen. Auch erlaubt es das linkbasierte, dynamische Anzeigen von Content, wie in dem folgenden Codebeispiel zu sehen ist.

index.php
<?php 
include("header.php");
include("pages/" . $_GET[„page"]); 
include("footer.php");
?>

Hierbei wird der page GET Parameter genutzt, um auszuwählen, welche Unterseite angezeigt werden soll. Solch ein Aufruf könnte folgendermaßen aussehen: 

index.php?page=news.php 

Allerdings gibt es hier einen entscheidenden Nachteil. Welche Dateien eingebunden werden dürfen, wird nicht überprüft. Stattdessen kann ein Angreifer einen beliebigen Dateinamen eingeben, welcher von PHP akzeptiert wird. Sollten die nötigen Rechte vorliegen, wird der Inhalt der Datei angezeigt.

index.php?page=../../../../../etc/passwd

Wie oben zu sehen ist, ist der Angreifer auch nicht auf das vom Entwickler angegebene Verzeichnis beschränkt. Mithilfe von zwei Punkten und einem Schrägstrich ist es ihm möglich Dateien, welche oberhalb der Verzeichnisstruktur liegen, einzubinden. Dies führt zu einem gefährlichen Informationsleck, doch es kommt noch schlimmer. Die eingefügten Dateien werden behandelt als wären sie gewöhnliche PHP Dateien, was beispielsweise bedeutet, dass ein Angreifer ein Profilbild auf den Server laden kann - falls solch eine Funktion vorhanden ist - und in diesem Bild gefährlichen PHP code einbetten kann. Gibt er dieses Bild nun als Dateipfad ein, ist es ihm möglich den enthaltenen PHP code auszuführen.

Es gibt auch andere Möglichkeiten Code auf dem Server einzuschleusen. Welche das sind, hängt aber sehr vom Alter und der Art des verwendeten Betriebssystems ab, sowie mit welchen Rechten die verwundbare Anwendung ausgestattet ist.

Grundsätzlich gilt: um solche Local File Inclusions zu verhindern, sollte man eine Whitelist an erlaubten Unterseiten anlegen. Danach sollte überprüft werden,ob die eingegebene Datei in dieser Whitelist vorkommt. Nur falls das der Fall ist, sollte man die Datei auch einbinden. Befindet sich diese Datei nicht in der Whitelist, ist es sinnvoll stattdessen eine Standardseite anzuzeigen.
We use cookies to deliver you the best experience. By browsing our website you agree to our use of cookies. Learn More Wir benutzen Cookies um dir beim Besuchen unserer Website die bestmögliche Erfahrung zu bieten. Beim Besuchen unserer Website erlaubst du uns die Nutzung dieser Cookies. Learn More