Heim Backend-Entwicklung PHP-Tutorial Sicherheitslücke beim Hochladen beliebiger PHP-Dateien

Sicherheitslücke beim Hochladen beliebiger PHP-Dateien

Dec 02, 2016 am 09:56 AM
php

Details zur Sicherheitslücke:

Diese Sicherheitslücke besteht in einer sehr häufig verwendeten Funktion in PHP: move_uploaded_files. Entwickler verwenden immer diese Funktion, um hochgeladene Dateien zu verschieben. Diese Funktion prüft, ob es sich bei der hochgeladenen Datei um eine legale Datei handelt (unabhängig davon, ob sie über den HTTP-Post-Mechanismus hochgeladen wird). Wenn es sich um eine legale Datei handelt, muss sie im angegebenen Verzeichnis abgelegt werden.

Beispiel:

move_uploaded_file ( string $filename , string $destination ) Das Problem hierbei ist, dass Nullzeichen in den Dateinamen eingefügt werden können (diese Sicherheitslücke wurde schon oft behoben, z CVE-2006 -7243) können Angreifer durch das Einfügen von Nullzeichen beliebige Dateien hochladen, was zu Sicherheitslücken bei der Remotecodeausführung usw. führt.

Ich verwende DVWA, um dieses Beispiel zu demonstrieren. Die höchste Frage in DVWA ist aus verschiedenen Gründen nicht einfach zu bestehen. Sie soll Entwicklern sagen, wie sie eine sicherere Datei-Upload-Komponente entwickeln können. Schauen wir uns dieses Beispiel an:

Code-Snippet:

$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); $uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG " || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){ if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path )) {
$html .= '';
$html .= 'Ihr Bild wurde nicht hochgeladen.';
$html .= '';🎜>else {
$html .= $target_path . ' erfolgreich hochgeladen!';
.
.

Dieser Code weist viele Schwachstellen wie XSCH, XSS usw. auf, aber es gibt keine schwerwiegenden Schwachstellen wie RCE, weil Ab PHP 5.3.1 wurde das Problem mit Nullzeichen behoben. Das Problem hierbei ist, dass DVWA den vom Benutzer hochgeladenen Namensparameter an die Funktion move_upload_file() übergibt, sodass die von PHP ausgeführte Operation möglicherweise wie folgt aussieht:

move_uploaded_file($_FILES['name']['tmp_name '],"/file.phpx00.jpg");Dies sollte eine Datei mit dem Namen file.phpx00.jpg erstellen, aber die tatsächlich erstellte Datei ist file.php.

Auf diese Weise wird die Überprüfung des Suffixnamens im Code umgangen, und es stellt sich heraus, dass viele andere Funktionen in der GD-Bibliothek ebenfalls dieses Problem haben (z. B. getimagesize(), imagecreatefromjpeg()...). .etc.), können Sie dieses Beispiel sehen.

Wenn die PHP-Version Ihres Computers 5.4.39, 5.5.x – 5.5.23 oder 5.6.x – 5.6.7 ist, können Sie das in diesem Artikel beschriebene Problem lösen, indem Sie prüfen, ob x00 Zeichen vorhanden sind das Dateinamenproblem.

Sicherheitsempfehlung Wenn diese Sicherheitslücke auf Ihrem Computer besteht, wird empfohlen, eine zufällige Zeichenfolge zum Umbenennen des Dateinamens zu verwenden, anstatt den Wert des vom Benutzer hochgeladenen Namensparameters zu verwenden.


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

See all articles