Bastion - HackTheBox

5 minute read

En este post se explicarán los pasos que se han seguido para conseguir vulnerar la seguridad de la máquina Bastion en Hack The Box, tal y como se refleja, es un sistema Windows con un nivel de dificultad fácil.

Ilustración 1: Bastion.

Se comenzó la fase de enumeración realizando un SYN-SCAN, junto con la ejecución de todos los scripts por defecto de nmap, puesto que en el perfil de Bastion en HTB, la enumeración estaba valorada como un factor muy importante para tener en cuenta.

Ilustración 2: Ejecución de nmap.

Ilustración 3: Resultados de la ejecución de nmap.

En un primer análisis de los resultados se intentó entrar por SSH introduciendo combinaciones de usuario y contraseñas (ataque de diccionario). También se intentó atacar el puerto 445, con exploits conocidos como eternalblue, pero nada de esto funcionó.

La clave para saber por dónde se podría vulnerar la seguridad del sistema la proporcionó el propio nmap en la ejecución de los scripts. Tal y como refleja la imagen anterior en el puerto 445 (SMB) existe el usuario "guest", por tanto, si no tiene contraseña se podría realizar una conexión al servidor a través de dicho puerto y tener acceso a algunos ficheros.

Ilustración 4: Conexión al servidor SMB.

Ilustración 5: Conexión al servidor SMB con el usuario guest.

Haciendo uso del comando smbclient se puede realizar la conexión tanto con el usuario "guest" como "root", debido a que no tienen contraseña, pudiéndose ver los diferentes directorios existentes. Se intentó entrar en cada uno de ellos, pero el único al que se tenía permiso era el de Backups:

Ilustración 6: Contenido del directorio Backups.

Ilustración 7: Imágenes del sistema como copias de seguridad.

Como se observa en uno de los subdirectorios de Backups existen dos archivos con extensión vhd que son una imagen del disco del sistema. Además, existe un fichero note.txt que dice lo siguiente:

Ilustración 8: Contenido del fichero con extensión txt.

Se advierte de que no se descargue los ficheros de las copias de seguridad, ya que pesan demasiado. Esto también representa una pista porque insinúa que se debe montar el directorio (con la utilidad mount), así se podría acceder al mismo sin necesidad de descargarlo, mientras la conexión por SMB esté establecida.

Pero una vez se tenga acceso a los ficheros del directorio Backups es necesario obtener la información que se almacena en los ficheros con extensión vhd, dado que son una imagen del sistema, también se pueden montar haciendo uso de la herramienta guestmount.

Ilustración 9: Montando el directorio Backups de forma remota.

Ilustración 10: Montando la imagen del sistema.

Para realizar el proceso mostrado se hizo uso de fuentes como https://medium.com/@klockw3rk/mounting-vhd-file-on-kali-linux-through-remote-share-f2f9542c1f25 y https://askubuntu.com/questions/295155/how-do-i-mount-vhd-file donde explican como montar una imagen vhd a través de un directorio remoto de SMB.

Cabe destacar que se eligió el fichero vhd que tenía mayor tamaño, ya que por deducción sería el que más contenido tendría, aunque también se realizó el mismo proceso con el fichero vhd de menor tamaño y no se obtuvo ningún resultado.

Completado con éxito se podía acceder a los ficheros que se almacenaban en la imagen del sistema:

Ilustración 11: Directorios y ficheros del sistema.

Ilustración 12: Contenido del directorio Desktop del usuario L4mpje.

Ilustración 13: Ficheros SAM y SYSTEM.

Lo primero que se intentó fue encontrar los ficheros root.txt o user.txt donde se supone que deben estar las flag, pero tras mucho investigar no aparecieron y es que realmente la clave estaba en el directorio system32 de Windows. Al tener acceso a sus subdirectorios se podía obtener los ficheros SAM y SYSTEM, que almacenan los hashes de las contraseñas de los usuarios del sistema.

Se procedió a copiar dichos ficheros y se ejecutó mimikatz para obtener dichos hashes, aunque hubiera sido más eficiente (porque mimikatz se debe ejecutar en un entorno Windows) usar "samdump2" una herramienta que ya viene en Kali.

Ilustración 14: Resultados de mimikatz.

Una vez se tienen los hashes del administrador y del usuario se intentó obtener la contraseña haciendo uso de John The Ripper y rockyou.txt como diccionario.

Ilustración 15: Intentando obtener contraseña del administrador.

Ilustración 16: Obteniendo contraseña del usuario L4mpje.

Solo se pudo obtener la contraseña del usuario que no era administrador, lo que era de esperar. Se realizó una conexión SSH con el usuario no administrador y se obtuvo la flag del user:

Ilustración 17: Conexión SSH del usuario L4mpje.

Ilustración 18: Flag del usuario.

Como se tenía una consola del sistema abierta lo siguiente que se intentó fue realizar una escalada de privilegios para acceder al directorio del usuario administrador y obtener la flag. Para obtener más información del sistema y así averiguar cómo se podría realizar, se ejecutó el siguiente script https://github.com/411Hall/JAWS visto en https://medium.com/@rahmatnurfauzi/windows-privilege-escalation-scripts-techniques-30fa37bd194

Ilustración 19: Subiendo script al sistema.

Ilustración 20: Intento de ejecución del script.

Ilustración 21: Modificando la extensión del fichero.

Ilustración 22: Ejecución del script.

Ilustración 23: Resultados de interés del script parte 1.

Ilustración 24: Resultados de interés del script parte 2.

El script se consiguió ejecutar y proporcionó mucha información, más de la reflejada en las imágenes. Aunque realmente no era necesario puesto que había que fijarse en el programa instalado mRemoteNG. Se fijó este objetivo investigando cada uno de los directorios y gracias al foro de HTB de esta máquina, dado que se recomendaba observar los programas poco comunes que estaban instalados.

Resulta que investigando dicha aplicación se encontraron foros (http://forum.mremoteng.org/viewtopic.php?f=3&t=1552) donde se hablaba de que existe un fichero ("%userprofile%\AppData\Roaming\mRemoteNG\confCons.xml") donde se almacena la contraseña del administrador del sistema.

Ilustración 25: Ficheros de mRemoteNG.

Ilustración 26: Hash de la contraseña del usuario administrador.

Ilustración 27: Hash de la contraseña del usuario L4mpje.

Para obtener la contraseña en claro se hizo uso de un programa en python (https://github.com/haseebT/mRemoteNG-Decrypt, también se puede usar https://github.com/kmahyyg/mremoteng-decrypt) que descifra la contraseña.

Ilustración 28: Contraseña del usuario Administrador.

Cuando se obtuvo la contraseña del administrador se realizó una conexión SSH y se visualizó la flag del root:

Ilustración 29: Conexión SSH y obtención de la flag.

Una de las máquinas que más he disfrutado hasta ahora, puesto que se simula un entorno muy real.