Upload

Reconocimiento
Realizaremos la primera fase del reconocimiento utilizando la herramienta Nmap, con los siguientes parámetros:
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG AllPorts

sudo nmap -sC -sV -p80 172.17.0.2 -oN Targeted

Este escaneo de Nmap ha revelado información valiosa sobre el servidor objetivo, incluyendo el servicio en ejecución, su versión especÃfica, el tÃtulo de la página web y detalles sobre el sistema operativo subyacente.
Ejecutamos un escaneo con WhatWeb para identificar las tecnologÃas que sustentan la página web. Además, observamos que el tÃtulo de la página es "Upload here your file".
whatweb
http://172.17.0.2

Revisando la página web que se está ejecutando en el servicio HTTP del puerto 80, hemos encontrado un panel de subida de archivos.

Al realizar fuzzing web, descubrimos un directorio llamado /uploads.

Se ha encontrado un Directory Listing. Ahora que conocemos dónde se suben los archivos al servidor, podemos realizar diversas pruebas de carga de archivos para verificar si alguna extensión está excluida o sanitizada por el desarrollador.

Explotación
Nos dirigimos a la página web https://www.revshells.com/ donde utilizaremos la clásica reverse shell de PentestMonkey. Creamos un archivo con extensión .php y lo subimos. Como mencioné anteriormente, es crucial realizar pruebas para asegurarnos de que la extensión no esté excluida y sea interpretada correctamente por el servidor.


Podemos observar que al archivo se ha subido correctamente.

Nos ponemos a la escucha con netcat y ejecutamos el archivo revshell.php
. Configuramos netcat en modo escucha y ejecutamos el archivo revshell.php
. Para poner netcat a la escucha en el puerto deseado, utiliza el siguiente comando con privilegios sudo:
sudo nc -lvnp 443
Cuando obtienes una shell interactiva como el usuario por defecto de Apache (www-data
), es importante ajustar la TTY para mejorar la interactividad y evitar que la shell se rompa al ejecutar ciertos comandos como Ctrl+L
.

Escalada de Privilegios
Al ejecutar sudo -l
, hemos identificado que el usuario www-data puede ejecutar el binario /usr/bin/env como Root sin necesidad de proporcionar una contraseña.
Verificamos la página web https://gtfobins.github.io/gtfobins/env/, la cual proporciona información detallada sobre cómo abusar del binario /usr/bin/env.

Ejecutamos la siguiente linea:
sudo -u root /usr/bin/env /bin/bash -p
sudo
: Permite ejecutar comandos con privilegios de otro usuario, en este casoroot
.-u root
: Especifica que el usuario con el que se ejecutará el comando esroot
./usr/bin/env
: Es un comando utilizado para ejecutar un programa con un entorno modificado./bin/bash -p
: Especifica que se debe iniciar/bin/bash
con los privilegios de shell.
Ganamos acceso como usuario Root.

Conclusiones
Durante esta prueba de penetración, exploramos vulnerabilidades en un servidor que permitieron la subida de archivos con extensión PHP y el acceso a un Directory Listing. Utilizando estos vectores de ataque, identificamos una configuración insegura donde el usuario www-data podÃa ejecutar el binario /usr/bin/env como root sin necesidad de contraseña. Esta situación nos permitió ganar acceso completo como usuario root, destacando la importancia crÃtica de asegurar la configuración de permisos y la gestión adecuada de archivos en los servidores.
Last updated