XUT_ / MACHINES / THM

0108

K2

THMMACHINENONEHARD
WindowsWebActive DirectoryBloodHoundSMBKerberosPrivilege Escalation

Introduction

k2

¿Eres capaz de hacerte camino a través de las montañas?

Te han pedido realizar un test de vulnerabilidades en la red K2 para ver si hay alguna manera en la que un actor malicioso podría ser capaz de infiltrarse.

El equipo IT te asegura que la red es segura y que no serás capaz de hacerte camino hasta lo más alto.

Sólo te han dado una web externa llamada k2.thm.

Base Camp

Reconocimiento Inicial

Comenzamos escaneando los puertos abiertos.

k2

Ahora vamos a analizar dichos puertos más en profundidad.

k2

Vamos a investigar directorios.

k2

Parece que no hay nada común. Vamos a ver cómo se ve la web.


Profundización

En la web no hemos encontrado nada, aparentemente, por lo que vamos a escanear en busca de subdominios.

k2

Escaneando hosts virtuales hemos encontrado los subdominios:

  • admin.k2.thm
  • it.k2.thm

Vamos a investigarlos un poco.

admin.k2.thm

k2

Vamos a investigar los directorios de este subdominio.

k2

Parece que de momento aquí no podemos hacer nada.

it.k2.thm

k2

Vamos a enumerar los posibles directorios de este también.

k2

Lo más interesante es que podemos obtener una cuenta registrándonos, aparentemente.

Vamos a ver cómo funciona el tema. Nos registramos.

k2

Parece que nos han creado la cuenta.

k2

Vamos a iniciar sesión.

k2

Vamos a abrir BurpSuite para ver cómo se hacen las peticiones.

k2

Parece que puede que se de un XSS.


Explotación

XSS

Vamos a intentarlo.

k2

Abrimos un servidor Python en nuestra máquina y le damos a subir.

k2

Parece que hay un WAF en activo, vamos a intentar averiguar qué lo hace saltar. Comenzamos con una petición sencilla, sin nada malicioso.

k2

k2

Recibimos la conexión correctamente. Escribimos unas cuantas palabras que nos hacen ver que es la string document.cookie la que hace que salte el WAF, por lo que vamos a reformular la petición.

k2

Y miramos el listener.

k2

Cambiamos la cookie en admin.k2.thm y navegamos a /dashboard:

k2

Vemos un nuevo panel. Si investigamos dicho panel, podemos ver que hace una consulta a una base de datos (seguramente).

k2

Tiene pinta de que sí es una DB.

SQL Injection

Vamos a probar SQLi. Si ponemos una comilla:

k2

Vamos a seguir probando. Si ponemos ' OR 1=1;-- -:

k2

Parece que habrá que ser más sutiles. Parece que 'OR 1=1;-- -, sin espacio, no da error, por lo que el WAF está buscando strings literales. Vamos a realizar un ataque con UNION SELECT para poder extraer información.

sql
'UNION SELECT 1,2,3-- -

Nos da el resultado que buscamos:

k2

Vamos a extraer la información.

sql
'UNION SELECT table_name,2,3 FROM information_schema.tables WHERE table_schema=database() -- -

k2

Vamos a extraer información de admin_auth.

sql
'UNION SELECT column_name,2,3 FROM information_schema.columns WHERE table_name='admin_auth'-- -

k2

Vamos a extraer las credenciales del admin.

sql
'UNION SELECT email, admin_password, admin_username FROM admin_auth -- -

k2

Probamos las combinaciones pertinentes.

k2

Vamos a entrar por SSH.

k2

Buscamos la primera flag.

k2

Listando los usuarios en /etc/passwd podemos ver que aparecen sus nombres completos, que es una de las preguntas.

k2


Escalada de Privilegios

Vamos a escalar privilegios.

k2

Podemos ver que james es parte del grupo adm. Si vamos a /var/log, podemos buscar contraseñas.

k2

Y después de analizar un poco encontramos lo siguiente:

k2

Parece ser la contraseña de root.

k2

Vamos a buscar la segunda flag.

k2

Todavía nos falta encontrar la contraseña de rose, por lo que vamos a mirar el historial de dicho usuario.

k2

Con esto encontramos la respuesta a la última pregunta.

Middle Camp

El equipo de IT no puede creer que hayas pasado del primer servidor. Sin embargo, están seguros de que no llegarás mucho más lejos.


Reconocimiento Inicial

Comenzamos escaneando los puertos abiertos.

k2

Ahora analizamos dichos puertos en profundidad.

k2

Vamos a ver qué hay en SMB.

k2


Profundización

Bueno, vamos a seguir con la explotación de AD. Lo primero que queremos hacer es conseguir un par de credenciales válidas (o al menos intentarlo). Vamos a hacer una lista de posibles nombres de usuario. En caso de que tuviéramos más, podríamos usar herramientas como usernames-anarchy.

k2

Ahora vamos a usar una herramienta de fuerza bruta para enumerar todas las cuentas válidas: kerbrute. Descargamos el binario y lo movemos a /usr/local/bin.

k2

Vamos a realizar el ataque.

k2

Parece que hemos encontrado dos nombres de usuario válidos. Vamos a probar diferentes contraseñas.

k2

Ahora vamos a configurar bloodhound-python.

k2

Vamos a seguir configurando bloodhound con la información extraida:

k2

El comando para ejecutar Bloodhound es:

bash
curl -L https://ghst.ly/getbhce | sudo docker-compose -f - up

Cogemos la contraseña por defecto:

k2

Y ahora vamos a http://localhost:8080/ui/login:

k2

Vamos a iniciar sesión.

k2

Mientras esperamos a que se ingesten los datos podemos ir abriendo una consola como el usuario comprometido:

k2

Vamos a ver qué vemos por aquí:

k2

Podemos ver los privilegios que tenemos y detalles sobre el usuario. Vamos a investigar el sistema un poco.

k2

Tenemos dos notas, vamos a leerlas.

k2

En las notas podemos ver cómo james tiene una contraseña muy débil: rockyou y que ha añadido dos caracteres para cumplir con las políticas, por lo que uno de los dos caracteres será un número 0-9 y el otro un carácter especial. Vamos a crear un diccionario.

k2

De esta manera hemos generado todas las posibles combinaciones.

k2

Ahora que tenemos dos usuarios vamos a volver a bloodhound. Si investigamos a r.bud, podemos ver lo siguiente:

k2

El grupo REMOTE MANAGEMENT USERS es interesante. Sin embargo, si hacemos click en él, podemos ver que este está controlado por muchos otros grupos.

k2

Vamos a mirar a j.bold.

k2

Parece que j.bold es miembro de una categoría de IT Staff superior a r.bud. Vamos a mirar de qué se trata.

k2

Parece que este grupo tiene control sobre un usuario de alto valor. Bloodhound incluso nos da información sobre cómo explotarlo.


Explotación

Usaremos lo que Bloodhound nos dice (como buenos scriptkiddies que somos xD).

k2

No hemos recibido ningún error, lo cual es muy bueno. Vamos a intentar iniciar sesión como j.smith.

k2

Ha funcionado. Vamos a investigar.

k2

Y ahora buscamos la flag.

k2

Como nos preguntan por los nombres de usuarios encontrados en el servidor, vamos a buscarlos.

k2


Escalada de Privilegios

Para ello, volvemos a Bloodhound e investigamos ahora a j.smith. Podemos ver lo siguiente:

k2

Forma parte de un grupo interesante: BACKUP OPERATORS. Con una simple búsqueda de Google:

k2

Vamos a leer la información.

k2

Seguimos los pasos para extraer la base de datos SAM localmente:

k2

Y lo descargamos en nuestra máquina. El siguiente comando es posible gracias a evil-winrm.

k2

Ahora vamos a usar impacket-secretsdump para extraer las credenciales administrativas.

k2

Con esto, vamos a usar evil-winrm para realizar un ataque PtH.

k2

Y estamos dentro. Ahora buscamos la flag.

k2

The Summit

Ya casi estás ahí. Puedes ver la cima desde donde estás. Incluso el equipo IT está impresionado de cómo de lejos has llegado.


Reconocimiento Inicial

Comenzamos escaneando los puertos abiertos.

k2

Ahora vamos a analizar dichos puertos más en profundidad.

k2


Profundización

Ahora vamos a ver si encontramos algún usuario válido en el nuevo Domain Controller:

k2

Parece que sí. Vamos pues a realizar un ataque de fuerza bruta sobre estos usuarios.

k2

No hemos encontrado nada. Puede que tengamos que crackear el hash NTLM de Administrator.

k2

No hemos conseguido crackearlo, pero igual podemos realizar un ataque PtH sobre este DC.

k2

El PtH no tuvo éxito con administrator pero sí que lo tuvo con j.smith. Vamos a investigar.

k2

Aquí podemos ver un nuevo usuario: o.armstrong. Vamos a investigar el sistema de ficheros.

k2

Parece que hay notas en el escritorio de este nuevo usuario pero no tenemos permiso para leerlas.

k2


Explotación

Vamos a aprovecharnos de esto. Vamos a intentar eliminar backup.bat para reescribirlo después.

k2

Y ahora vamos a configurar responder en otra pestaña para intentar robar el hash del usuario que ejecuta el .bat.

k2

Ahora escribimos algo parecido a lo que había.

k2

Si ahora volvemos a responder, podemos ver el hash NTLM de o.armstrong.

k2

Vamos a crackear el hash.

k2

Ahora configuramos Bloodhound de nuevo:

k2

Vamos a entrar en la UI.

k2

E iniciamos sesión con o.armstrong mediante evil-winrm.

k2

Investigando en su sistema vemos una nota, aunque no revela nada que no sepamos: Sí, es vulnerable y te hemos hackeado, o.armstrong.

k2

Si nos vamos al escritorio podemos encontrar la flag.


Escalada de Privilegios

Ingestamos en Bloodhound los archivos que obtuvimos de bloodhoun-python la segunda vez.

k2

Parece que el grupo PERFORMANCE LOG USERS es interesante. Sin embargo, en Outbound Object Control hay algo mucho más interesante:

k2

Vamos a ver si hay alguna forma de explotar esto.

k2

Bloodhound literalmente nos da los pasos. Vamos a seguirlos. Comenzamos buscando y comprobando addcomputer.py.

k2

Ahora lo ejecutamos como se nos indica.

k2

Obtenemos un error. Si cambiamos el método nos dice lo siguiente.

k2

Como LDAPS no ha funcionado, vamos a probar SAMR.

k2

Parece que ha añadido la cuenta exitosamente. Vamos a seguir con los pasos.

k2

Y el último paso:

k2

Ahora toca usar dicho ticket. Vamos a realizar un ataque PtT.

k2

CAUTION: Tenemos que exportar el ticket con ese nombre de variable: KRB5CCNAME.

Cuando nos pida la contraseña simplemente le damos a enter. Ahora simplemente buscamos la flag.

k2

PortServiceVersion
22SSHOpenSSH
80HTTPApache
443HTTPSApache
  • Nmap
  • Gobuster
  • Burp Suite
  1. Enumerate the target
    1. A ver
    2. Si va
  2. Identify the attack surface
  3. Exploit the vulnerability

Puedes consultar HackTricks para ampliar información.

Esto es un blockquote normal. No debería convertirse en un callout.

  • Esto si
  • Esto no