Halllo,
Original von moinmoin666
<?php include("Sicherheitslücke"); ?>
Mir war auch schon klar(nach dem Post von Xalon) das ich mit einem Hexeditor auch in ein jpg oder was auch immer phpcode reinbekomme, nur das er halt NIE ausgeführt wird!
Ich bitte doch mit deinen Anschuldigungen ein wenig zurücktrittst!
In dem Artikel geht es nicht im Entferntesten um Include und irgendwelche Sicherheitslücken die man dadurch aufreißt.
Wenn man sich die Beispiele anguckt, wird einem das auch bald klar (setzt natürlich vorraus, dass man den Artikel auch wirklich komplett liest).
Es geht um folgendes:
Man kann in einem Gif-
Bild, d.h.
keine Datei nur mit .gif-Endung, sondern wirklich ein Bild im Gif-Format, PHP Code einfügen.
Viele Upload-Scripts haben folgende Überprüfung, um zu gucken ob das hochgeladene Bild auch ein Bild ist:
PHP:
<?php
$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
echo "Sorry, we only accept GIF and JPEG images\n";
exit;
}
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "File uploading failed.\n";
}
?>
So nun erstell ich ein Gif-
Bild und schleuse in dieses PHP Code ein und speicher dieses unter den Dateinamen: gifbild.php ab.
getimagesize() intressiert sich nicht für die Dateiendung, sondern für den MIME-Type des Bildes.
Wenn gifbild.php also ein Gif-
Bild ist, wird als MIME-Type 'image/gif' zurückgegeben.
Lade ich diese Datei also hoch, gibt getimagesize als Type 'image/gif' zurück und die Datei gifbild.php wird im Ordner uploads abgespeichert.
Wenn ich direkten Zugriff auf den Upload Ordner habe, was oft der Fall ist, kann ich upload/gifbild.php aufrufen.
Da dies eine .php-Endung besitzt, wird der Inhalt der Datei an den PHP Interpreter gesendet.
Dieser führt den enthalten PHP Code aus und der Angreifer hat alle Möglichkeiten der Welt.
@LX:
Warum in aller Welt z.B. jemand einen Webserver betreiben sollte, der Bilddateiendungen an den PHP-Parser leitet, das will mir nu nicht einleuchten
Die Datei hat ja die Endung .php, aber den MIME-Type image/gif.
Deswegen passiert dieses die if-Anweisung, wird aber als .gif abgespeichert.
Leider ist es oft so, dass eine Überprüfung aufgrund des MIME-Types durchgeführt wird und nicht aufgrund der Dateiendung.
Allerdings, eine Überprüfung auf Dateiende ist auch nicht sicher. Die einzige Lösung ist, keinen direkten Zugriff auf das Upload-Verzeichnis zu erlauben sondern diesen über einen PHP Script zu steuern, der die Datei dann zum Download anbietet