HackMyVM - Dominator
7 junio 2021
Esta máquina se encuentra en la plataforma HackMyVM y ha sido creada por el usuario d4t4s3c.
Esta es una de mis máquinas favoritas debido a los distinos protocolos, herramientas y técnicas necesarias para su explotación.
# | Dificultad |
---|---|
Acceso | Fácil |
Escalada de privilegios | Fácil |
Enumeración
Como ya se realizó en máquinas anteriores de esta plataforma el primer paso es encontrar la dirección IP, para ello se utiliza la herramienta ping-sweep.
La herramienta ha detectado 4 IP:
- 10.10.10.1 → Gateway
- 10.10.10.100 → Host anfitrión
- 10.10.10.101 → Máquina objetivo
- 10.10.10.103 → Raspberry
Una vez encontrada la IP se utiliza la herramienta findos para averiguar el sistema operativo mediante una única traza ICMP.
Como indica la herramienta el SO de la máquina Dominator es un linux. A continuación se procede a realizar la enumeración de los puertos.
Se empieza primero con un escaneo rápido para encontrar los puertos puertos abiertos.
A continuación, se realiza un escaneo más profundo de los servicios que corren en los puertos abiertos y se ejecutan una serie de scripts básicos. Para obtener los puertos de manera más fácil se utiliza la herramienta get-ports.
Tras el escaneo se han detectado tres puertos abiertos 53 → DNS, 80 → HTTP, 65222 → SSH.
El servicio DNS puede ser vulnerable a una transferencia de zona que desvele subdominios para una posterior enumeración de HTTP, por este motivo primero se intenta realizar una transferencia de zona.
Para ello será necesario modificar el fichero /etc/hosts e incluir la dirección IP y nombre de dominio para la máquina.
A continuación se ejecuta la petición de transferencia de zona con la herramienta dig:
dig axfr @10.10.10.101 dominator.hmv
La transferencia de zona ha encontrado un par de subdominios interesantes → secret.dominator.hmv, admin.dominator.hmv. También llama la atención que el subdominio secret tiene asociado el recurso /fhcrefrperg. Tras esto se agregan los subdominios al fichero /etc/hosts.
Como del subdominio secret ya se conoce el recurso /fhcrefrperg se empieza la enumeración de HTTP por aquí.
Como se puede ver en la captura anterior, el recurso /fhcrefrperg no existe. Tras un buen rato de probar distintas cosas y reiniciar la máquina por si el servicio HTTP no se hubiese ejecutado correctamente me doy cuenta que el nombre del recurso está cifrado. A primera vista parece que es un cifrado de bloque por lo que para descifrarlo realizo un simple script en bash que ejecute la herramienta Rotator y probar todas las posibles combinaciones.
El script es el siguiente:
#!/bin/bash
cipher_text=$1
for i in {0..25}; do
plain_text=$(/opt/my-scripts/rotator/rotator -i $cipher_text -dr $i -a english)
echo " $i posiciones -> $plain_text"
done
Tras la ejecución del script se descubre que al descifrar rotando 13 posiciones se obtiene el texto plano "supersecret", es decir, el texto estaba cifrado con un ROT13. Una vez descifrado se comprueba si el recurso /supersecret existe.
¡Bien! El recurso existe y además se indexa el recurso hans_key, que resulta ser la clave privada de un usuario llamado hans.
Ganar acceso
Sin embargo, la clave privada está cifrada pero con un poco de suerte será una clave poco segura que aparezca en rockyou. Lo primero será descargar la clave privada cifrada con wget.
wget http://secret.dominator.hmv/supersecret/hans_key
Una vez descargada hay que obtener el hash de la clave privada para crackearla. Para ello utilizaré la herramienta ssh2john.
Una vez obtenido el hash se utiliza JohnTheRipper para crackearlo
Es el momento de darle las gracias a Hans por utilizar una clave poco segura como lo es "angels" y dejarnos continuar realizando el CTF.
Ahora nos conectamos al servicio SSH del puerto 65222 usando como usuario hans y proporcionando la clave privada. No hay problema con que nos pida la contraseña porque ya se sabe que es "angels".
Perfecto, ya se ha conseguido el acceso a la máquina y se podrá obtener la flag del user.
Sin embargo, no existe un user.txt en el directorio de hans. Pero sí hay un fichero de texto llamado note que informa que la flag está en la papelera o no.
Para encontrar la flag se realiza una búsqueda de un archivo user.txt partiendo de la raíz del sistema.
Una vez encontrada la flag se visualiza y se añade a la plataforma de HackMyVM.
Escalada de privilegios
La escalada de privilegios se inicia viendo si se tienen permisos de sudo o SUID. Hans no puede ejecutar sudo pero sí se han encontrado una serie de binarios que tienen permisos SUID.
De todos los binarios el más interesante para la escalada de privilegios es systemctl. Ya que puede crearse un servicio malicioso que nos permita conseguir el root, para hacerlo se busca en la web https://gtfobins.github.io/ una escalada de privilegios para systemctl.
Basándose en la información de la página se crea el siguiente ejecutable malicioso y se ejecuta. Este ejecutable lo que realiza es establecer permiso de SUID a /usr/bin/bash y poder conseguir así una bash privilegiada.
#!/bin/bash
install -m =xs $(which systemctl) .
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "chmod +s /bin/bash"
[Install]
WantedBy=multi-user.target' > $TF
/usr/bin/systemctl link $TF
/usr/bin/systemctl enable --now $TF
Finalmente se obtiene una bash privilegiada y se obtiene la flag de root