Responsive image

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.

error loading image :(

La herramienta ha detectado 4 IP:

Una vez encontrada la IP se utiliza la herramienta findos para averiguar el sistema operativo mediante una única traza ICMP.

error loading image :(

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.

error loading image :(

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.

error loading image :(

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.

error loading image :(

A continuación se ejecuta la petición de transferencia de zona con la herramienta dig:

dig axfr @10.10.10.101 dominator.hmv
error loading image :(

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.

error loading image :(

Como del subdominio secret ya se conoce el recurso /fhcrefrperg se empieza la enumeración de HTTP por aquí.

error loading image :(

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
error loading image :(

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.

error loading image :(

¡Bien! El recurso existe y además se indexa el recurso hans_key, que resulta ser la clave privada de un usuario llamado hans.

error loading image :(

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.

error loading image :(

Una vez obtenido el hash se utiliza JohnTheRipper para crackearlo

error loading image :(

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".

error loading image :(

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.

error loading image :(

Para encontrar la flag se realiza una búsqueda de un archivo user.txt partiendo de la raíz del sistema.

error loading image :(

Una vez encontrada la flag se visualiza y se añade a la plataforma de HackMyVM.

error loading image :(

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.

error loading image :(

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
error loading image :(

Finalmente se obtiene una bash privilegiada y se obtiene la flag de root

error loading image :(