Skip to main content
HackTheBox machines – Ghost WriteUp

HackTheBox machines – Ghost WriteUp

Ghost es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox basada en Windows

Ghost es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Insane.

En este caso se trata de una máquina basada en el Sistema Operativo Windows.

 

Escaneo de puertos

Como de costumbre, agregamos la IP de la máquina Ghost 10.10.11.24 a /etc/hosts como ghost.htb y comenzamos con el escaneo de puertos nmap.

Una vez detectados los puertos abiertos escanemos a fondo los mismos

 

Enumeración

Accedemos en primer lugar al portal web del puerto 80, aunque no parece que haya nada

HackTheBox machines – Ghost WriteUp

 

En el puerto 8443 tampoco encontramos nada pero resuelve así que enumeramos subdominios y encontramos uno

Lo añadimos al fichero hosts y accedemos

HackTheBox machines – Ghost WriteUp

 

Vemos una página con un botón al login del AD federado, así que accedemos para ver que encontramos

HackTheBox machines – Ghost WriteUp

 

No tenemos credenciales así que no podemos hacer mucho más por aquí por el momento así que continuamos.

 

Accedemos ahora al portal web en el puerto 8008 donde vemos un pequeño blog

Acceso al blog

En el portal vemos un enlace al software de Ghost, pero si pinchamos en el cuadro de búsqueda vemos una petición que incluye una key en uno de los parámetros

Investigamos la api y sacamos la configuración de esta con la api key obtenida

aunque tampoco parece que podamos sacar nada más por aquí por el momento.

 

LDAP injection

Enumeramos subdominios bajo el puerto 8008 y encontramos otro dominio

Lo añadimos al fichero hosts y accedemos al portal web de la intranet

Bypass del login de la intranet

Viendo que en el panel de federation era la federación con el AD, es posible que el login de la intranet vaya por LDAP, así que probamos el acceso con el carácter * que en ldap sería similar a

Probamos y conseguimos hacer un bypass del login con el carácter * en ambos campos y accedemos a la intranet

Dashboard de la intranet

 

En la home de la intranet descubrimos un usuario, gitea_tmp_principal, lo que nos da que pensar que hay un portal con gitea, así que añadimos el dominio gitea.ghost.htb al fichero hosts y accedemos, aunque no tenemos credenciales, por lo tanto y visto el bypass anterior vamos a tratar de descubrir la password del usuario.

Esto es posible debido a que en el ldap está permitido el uso del carácter *, lo que nos da la posibilidad de poder enumerar los valores, ya sea para el usuario o la password, así que generamos este pequeño script

y al ejecutar obtenemos la password

 

Explotando un LFI

Una vez que tenemos las credenciales accedemos al portal de gitea y vamos al repositorio de blog

 

Repo del blog

 

Revisamos el fichero posts-public.js y encontramos una vulnerabilidad de LFI en el parámetro extra, el cual no hace una validación del texto introducido

Detección de un LFI

 

Con la api key que obtuvimos antes, vamos a tratar de explotar el LFI y conseguimos el fichero passwd del contenedor con la siguiente url

Así que hacemos alguna prueba más y conseguimos sacar las variables de entorno del sistema

En el cual podemos observar que hay unas credenciales

 

RCE en la intranet

No hay mucho más por aquí así que vamos a revisar el repositorio de la intranet y encontramos una vulnerabilidad de RCE en el siguiente fichero

Detectando un RCE

 

Haciendo alguna prueba verificamos que podemos ejecutar comandos a través del campo url, así que vamos a utilizarlo para obtener una revshell con el siguiente payload

y obtenemos una shell en el contenedor

 

Acceso con justin

Revisamos el contendor y encontramos unas credenciales en el fichero entrypoint

 

Y no encontramos nada interesante así que retomamos unos comentarios que vimos en la intranet

Comentarios de la intranet

 

En los comentarios, el usuario justin habla sobre el subdominio bitbucket, el cual no existe, así que vamos a crearlo con la tool dnstool

Levantamos responder y ejecutamos

y tenemos el hash

obteniendo el hash del usuario

 

así que rompemos el hash con hashcat

y contectamos por winrm con las credenciales obtenidas

 

Obteniendo la flag de user

Vamos al escritorio del usuario justin y cogemos la primera flag

 

Escalado al usuario adfs_gmsa

Una vez dentro tratamos de obtener información del AD pero el av nos lo impide

por lo que lo hacemos con su versión en python

Analizamos los datos obtenidos y descubrimos que justin puede leer la password del usuario adfs_gmsa

Analizando el AD con bloodhound

 

Así que vamos a ello

y conectamos por winrm

 

Spoof del ADFS

Visto el usuario anterior y la página anterior de federation está claro que este servidor tiene una federación configurada con un AD, así que investigamos en google acerca de ello y utilizaremos la tool ADFSDump para obtener información de la configuración actual.

Descargamos el código del repositorio, lo compilamos y subimos al servidor.

Completada esta parte ejecutamos

 

Ya tenemos información de ADFS, así que con lo descubierto aquí y lo descubierto en las búsquedas acerca de este tipo de federación necesitaremos realizar los siguientes pasos

1. Conectar como guest
2. Preguntamos al ADFS por la autenticación
3. Este nos redireccionará para poder hacer el login
4. Devolverá la respuesta del saml con el certificado
5. Modificamos la respuesta de SAML para poder escalar privilegios
6. Acceso como admin al panel de federación

 

Así que en primer lugar vamos a exportar el certificado y la clave privada

Conectamos al portal de federation con las credenciales de justin obtenidas anteriormente e interceptamos la respuesta con burp

Interceptando la respuesta SAML

 

Y decodificamos la respuesta, obteniendo el siguiente xml

 

Para el siguiente paso vamos a utilizar la herramienta ADFSpoof para generar una cookie nueva que nos permita acceder al portal con permisos de administrador

Así que ejecutamos con los datos obtenidos

Y tenemos la cookie, la modificamos en la petición interceptada con burp y enviamos, obteniendo acceso al portal

Acceso al panel de configuración de Ghost

 

Explotando un SQLi

En el panel de federation vemos un debugger de la base de datos MSSQL utilizada por la aplicación, así que vamos a ver hasta donde podemos llegar.

A continuación iré poniendo las queries y su respuesta por no meter demasiadas capturas de pantalla.

Revisamos en primer lugar el servidor

y si hay alguno más configurado

Ya vemos que hay un segundo servidor, PRIMARY, además del dc que ya conocíamos.

Continuamos sacando al usuario actual

y vemos si podemos impersonarnos con alguno, donde vemos que está el usuario sa

y verificamos que realmente podemos

así que ejecutamos una revshell con la siguiente query

 

y obtenemos acceso en nuestra escucha

 

Escalado en el servidor Primary

Una vez dentro revisamos los permisos del usuario

y podemos aprovecharnos del permiso SeImpersonatePrivilege para escalar privilegios con potato.

Utilizaremos EfsPotato, así que lo compilamos

ejecutamos en el servidor

y obtenemos acceso como system

 

Escalado al usuario administrator

Tenemos dos máquinas en AD y el usuario system, así que podemos aprovecharnos de los privilegios actuales para obtener un golden ticket de kerberos y poder impersonarnos como admin en la máquina final.

Para ello el primer paso será desactivar el antivirus, que ya vimos anteriormente que nos limitaba las acciones disponibles

 

Una vez desactivado, dumpeamos con mimikatz las trust keys del forest

 

Y sacamos los SID

 

Ahora que tenemos todos los datos, generamos el ticket

 

Y nos impersonamos con Rubeus

 

Ahora podemos acceder a la máquina del DC, pero sólo podemos leer o editar ficheros, así que movemos el ticket creado

Lo convertimos para poder acceder por smbexec

exportamos

y conectamos al servidor

 

Obteniendo la flag de root

Una vez dentro, cogemos nuestra flag para dar por finalizada la máquina Ghost

Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.

 

Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace

 

Deja una respuesta

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