Ich versuche, den Null Byte Injection Angriff auf ein Upload-Formular zu reproduzieren. Ich habe diesen Code:Null-Byte-Injektion in einem Upload-Formular
<?php
if(substr($_FILES['file']['name'], -3) != "php") {
if(move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']))
echo '<b>File uploaded</b>';
else
echo '<b>Can not upload</b>';
}
else
echo '<b>This is not a valid file/b>';
?>
Ich versuche, eine Datei wie folgt benannt hochzuladen: file.php% 00jpg so wird es die substr umgehen() und wird als file.php seit move_uploaded_file hochgeladen werden () sollte beim Nullbyte (% 00) stehen bleiben.
Das Problem ist, dass die hochgeladene Datei nicht file.php auf dem Server aber file.php% 00jpg (die durch die Eingabe eines /file.php%2500jpg gestattet in der URL-Leiste zugegriffen werden kann).
Es scheint, dass move_uploaded_file() sich nicht um das Null-Byte kümmert. Wie funktioniert das? Ist es möglich, eine Datei mit der Erweiterung .php mit meinem Code zu laden?
Danke :).
Es gibt einen viel einfacheren Exploit: Eine Datei kann mit einer anderen "aktiven" Erweiterung hochgeladen werden, wie '.cgi',' .asp' oder '.phtml' – duskwuff
NULL-Byte-Poisoning wurde in PHP' 5.3 behoben. 4'. –
** Verwenden Sie keine Blacklist für Dateiuploads **. Verwenden Sie eine Whitelist. Außerdem kann ich mir ein paar einfache Möglichkeiten vorstellen. Sie sollten sanieren. – Amelia