HackTheBox endgames – Ascension WriteUp

HackTheBox endgames – Ascension WriteUp

Ascension es uno de los endgames existentes actualmente en la plataforma HacktheBox en el cual debemos ser capaces de obtener acceso de administrador en los dos bosques de Active Directory existentes.

Ascension es uno de los endgames existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Media.

 

Introducción

Daedalus Airlines is quickly becoming a major player in global aviation.

The pace of growth has meant that the company has accumulated a lot of technical debt. In order to avoid a data breach and potentially putting their supply chain at risk, Daedalus have hired your Cyber Security firm to test their systems.
Ascension is designed to test your skills in Enumeration, Exploitation, Pivoting, Forest Traversal and Privilege Escalation inside two small Active Directory networks.
The goal is to gain access to the trusted partner, pivot through the network and compromise two Active Directory forests while collecting several flags along the way.
Can you Ascend?
 
Entry Point: 10.13.38.20

 

Servidores

Hostname IP Pública IP Privada
WEB01.daedalus.local 10.13.38.20 192.168.10.39
DC1.daedalus.local   192.168.10.6
MS01.megaairline.local   192.168.11.210
DC2.megaairline.local   192.168.11.201

 

1. Takeoff

Empezaremos realizando un escaneo de puertos a la ip 10.13.38.20, en primer lugar para ver los puertos abiertos

Descubiertos los puertos abiertos lanzamos un escaneo más detallado sobre los mismos

 

Vemos un portal web en el puerto 80 bajo un IIS, así que accedemos a través del navegador al mismo

 

Navegamos por el portal web y descubrimos un formulario para la solicitud de billetes

Hacemos algunas pruebas sobre el mismo, y al introducir un carácter no habitual nos devuelve un error de mssql

 

El error nos muestra dos cosas, por un lado que es posible realizar un ataque de SQLi y por otro que podemos ver los errores, por lo que esto nos ayudará a detectar fallos en nuestras consultas.

Así que interceptamos la petición con burp

Y la guardaremos en un fichero para utilizarla con sqlmap.

Dicho esto vamos a lanzar un primer ataque para listar las bases de datos existentes

 

Listaremos también los usuarios existentes

 

Listamos las tablas de la base de datos de Daedalus

 

Y nos llama la atención la tabla de proxies

 

Vista esta parte vamos a obtener una shell para obtener más información del servidor de base de datos

 

No podemos utilizar xp_dirtree ni xp_cmdshell así que vamos a buscar otras posibles formas de conseguir explotar el servicio y obtener una shell en el sistema.

Debido a que no tenemos permisos para listar los roles existentes, vamos a crear una tabla en la ddbb de daedalus, sobre el cual después importaremos los datos.

Crearemos la tabla con la siguiente query

Que lanzamos desde el sqli detectado en el portal web con el siguiente payload

Una vez creada la tabla, importaremos los datos siguiendo el ejemplo de la web de microsoft

Lanzaremos la siguiente query

Que en el sqli quedaría de la siguiente forma

 

Y verificamos los datos existentes en la tabla

 

Nos fijaremos sobre todo el usuario daedalus_admin, el cual dispone de los permisos SQLAgentUserRole, SQLAgentReaderRole y SQLAgentOperatorRole.

Estos roles nos indican que el usuario es capaz de leer y ejecutar Agent Jobs en el servidor aunque no sea un sysadmin como tal, por lo que el siguiente paso será verificar si podemos impersonarnos como el mismo para la ejecución de un job que nos permita ejecutar comandos en el sistema.

 

Así que vamos a crear una tabla sobre la cual guardar los permisos que encontremos

Utilizando la siguiente query obtenida de la web de netspi importaremos los privilegios en nuestra tabla

Y verificamos

 

Podemos impersonarnos como el usuario daedalus_admin, pero antes de continuar, nos fijamos en lo que dice la documentación oficial de microsoft

A SQL Server Agent proxy account defines a security context in which a job step can run. Each proxy corresponds to a security credential. To set permissions for a particular job step, create a proxy that has the required permissions for a SQL Server Agent subsystem, and then assign that proxy to the job step.

 

Para poder ejecutar los jobs necesitamos disponer de un proxy a través del cual podamos realizar las ejecuciones pertinentes, así que vamos a crear una tabla proxy sobre la cual importemos la configuración actual.

Creamos la tabla

Nos impersonamos como daedalus_admin e importamos los datos de sp_help_proxy

Una vez hecho verificamos

 

Vista la configuración existente del proxy podemos crear y ejecutar un Agent Job que nos permita ejecutar una revshell con la cual ganar acceso al sistema y revisando en google encontramos un post interesante que explica como lanzar un Command Execution a través de los Agent Job de MSSQL

En nuestro caso subiremos el binario de netcat en un primer paso y en el segundo lo ejecutaremos para ganar acceso, así que he hecho el siguiente script sencillito siguiente el post para poder llevar a cabo el ataque

 

Una vez listo el script, levantamos una escucha en python para servir el binario de netcat y una escucha y ejecutaremos

Esperamos unos segundos y vemos como ha descargado el binario de netcat

Y poco después tenemos una shell con el usuario svc_dev

Vamos al escritorio del usuario y obtenemos la primera flag

 

2. Intercept

Una vez tenemos acceso al servidor vamos a enumerar el mismo. Revisamos en primer lugar la configuración de red para detectar la red interna

Y vemos que tiene una pata en la red 192.168.10.0/24 así que vamos a analizar las peticiones en red que hace esta máquina y para ello vamos a utilizar Inveigh

Lo subimos a la máquina y ejecutamos

 

Nos habrá generado un fichero con la salida

Así que revisamos el mismo

 

Y vemos que realiza peticiones de forma continuada contra el servidor FIN01, lo que nos da que pensar que podría haber alguna tarea programada encargada de llevar a cabo esa comunicación.

Probamos a obtener las tareas programadas pero carecemos de permisos para ello

Así que vamos a utilizar meterpreter para que nos ayude en esta tarea.

Generamos un ejecutable malicioso con dicha revshell

Lanzamos la escucha en metasploit

Subimos el binario y lo ejecutamos

Y tenemos una sesión activa

Accedemos y obtenemos información del sistema en primer lugar

 

Enumeraremos los procesos del usuario, a ver si vemos alguno con privilegios más altos que los que disponemos actualmente con el fin de migrar al mismo

Nos centramos en el proceso de RuntimeBroker y migramos al mismo

A continuación cargaremos powershell, subiremos SeatBelt y lo ejecutaremos para obtener las tareas programadas

Y si nos fijamos en las mismas hay una tarea contra el servidor fin01, en la cual vemos además las credenciales del usuario billing_user.

Aprovechando la conexión enumeraremos credenciales y obtenemos la password del usuario de mssql sa

 

Completada esta parte y con las credenciales obtenidas, vamos a crear un tunel con ligolo que nos permita acceder a la red interna y poder acceder con las credenciales descubiertas hasta el momento.

Así que creamos la interfaz para ligolo y enrutamos a través de este la red interna descubierta

Levantamos nuestro servidor

Y ejecutamos el cliente para conectarnos

 

Ya tenemos acceso a la red 192.168.10.0/24 así que vamos a lanzar un escaneo con nmap para detectar los puertos abiertos en el servidor

Y una vez descubiertos los puertos vamos a lanzar un escaneo más detallado sobre los mismos

 

Vemos que tiene abierto el puerto de winrm así que conectamos con las credenciales obtenidas

 

Y como el usuario tiene permisos de admin, vamos al escritorio del usuario administrator para obtener la segunda flag

 

3. Contrails

Vistas las credenciales obtenidas del usuario sa realizamos varias pruebas en el MSSQL pero sin éxito, así que parece que no será la forma de obtener más privilegios.

Pasamos de este y después de mucho tiempo perdido enumerando vamos a utilizar SharpDpapi a ver si podemos sacar a la luz algún secreto oculto.

Así lo ejecutamos con las credenciales descubiertas del usuario billing_user

 

Y obtenemos las credenciales del usuario svc_backup.

Siguiendo con la investigación, nos fijamos en el siguiente post de credential harvesting con DPAPI para obtener las masterkeys

 

Y vemos que están las credenciales de administrator así que vamos a ver si podemos sacarlas en plano

 

Y vemos que hemos obtenido dos credenciales de usuarios administrator, una del servidor actual, WEB01, y otra del AD DAEDALUS

 

Así que tratamos de descubrir donde está el ad y lo descubrimos en la ip 192.168.10.6 por lo que vamos a lanzar un escaneo a ver que puertos tiene abiertos

Y posteriormente lanzamos un escaneo completo sobre los puertos abiertos

 

Enumerada esta parte y visto que tiene abierto winrm vamos a conectarnos al mismo

 

Y del escritorio del usuario sacamos la tercera flag