WriteUp CTF Resolute (Active Directory) de Hack The Box

Introducción

Comenzamos Resolute con la enumeración de las cuentas de usuario del dominio utilizando una sesión de vinculación anónima al servidor LDAP y encontramos una contraseña inicial en el campo de descripción de una de las cuentas. La contraseña rociada contra todas las cuentas descubiertas nos da un shell inicial y luego cambiamos a otro usuario después de encontrar credenciales en un archivo de historial de la consola. La escalada de privilegios es así: estamos en el grupo de administradores de DNS, por lo que podemos reconfigurar el servicio de DNS para ejecutar una DLL arbitraria como SYSTEM.
Que vamos a ver:

  • Podemos enumerar los usuarios de AD a través de ldap o rpc.
  • Hay una credencial predeterminada en uno de los campos LDAP para un usuario
  • Al rociar esta contraseña en todas las cuentas de usuario descubiertas, obtenemos acceso como usuario melanie
  • Las credenciales para el usuario ryan se encuentran en el archivo de historial de PowerShell.
  • El usuario ryan es parte del grupo de administradores de DNS y podemos reemplazar el servicio de DNS con un dll de nuestra elección.
  • Al controlar la dll, tenemos RCE como SYSTEM ya que el servicio DNS se ejecuta como SYSTEM.

Enumeración

Como siempre comenzamos realizando un escaneo para determinar qué servicios están abiertos en la máquina objetivo.

Añadimos el dominio megabank.local al archivo /etc/hosts/

Entonces, se está ejecutando Windows Server 2016 Standard y tiene varios puertos comunes abiertos que probablemente serán útiles más adelante, como rpc, ldap o winrm.

Dado que el puerto 135 RPC está abierto, deberíamos poder enumerar usuarios, corramos enum4linux para ver qué podemos obtener:

Obtenemos una lista de los usuarios existentes en el sistema. Vamos a crear una lista con estos usuarios de la siguiente manera:

Otra forma de enumerar usuarios del dominio es utilizando para ello el servicio LDAP (puerto 389). Para ello, vamos a utilizar la tool impacket-GetADUsers.

Vamos a probar la enumeración de usuarios a través de RPC a través de autenticación nula.

También podemos obtener información sobre los usuarios con el comando querydispinfo.

Esto no solo, nos proporciona una lista de usuarios, sino que podemos ver un comentario interesante para la cuenta del usuario marko. Password set to Welcome123!

Vamos a probar las credenciales de la cuenta de usuario encontrada. Podemos utilizar crackmapexec para ello.

Parece que la contraseña Welcome123! no corresponde al usuario marko. Vamos a realizar un ataque de password spraying que es similar a un ataque de fuerza bruta solo que, en este caso, solo prueba una contraseña o algunas comunes, en muchos usuarios. Para realizar esta prueba vamos a utilizar la lista de usuarios creada anteriormente.

Parece que la contraseña Welcome123! pertenece al usuario Melanie.

Conexión como usuario Melanie

Como está disponible el puerto 5985 (WinRM), vamos a intentar conectarnos a la máquina objetivo con evil-winrm, el usuario Melanie y la contraseña Welcome123!

Y ya tendremos la flag user.txt. Seguimos con la elevación de privilegios

Elevación de privilegios

Tras ejecutar winPEAS y el script de powershell WindowsEnum, pero el sistema nos bloquea la ejecución de estas. Nos desplazamos al directorio raíz, para buscar información que nos pueda ser útil.

En los directorios listados vemos una carpeta con un nombre particular, PSTranscipts. Vamos a enumerar el contenido de esa carpeta.

Y tenemos el archivo PowerShell_transcript.RESOLUTE.OJuoBGhU.20191203063201.txt. Vamos a ver qué información contiene.

Y tenemos un par usuario:contraseña.

Vamos a probar si son credenciales correctas, utilizando crackmapexec.

Ahora vamos a conectarnos a la máquina objetivo utilizando las credenciales del usuario ryan.

Y como podemos ver, ya podemos acceder a los directorios del usuario ryan.

Vamos a ver el contenido del archivo note.txt.

Por lo tanto, cualquier cambio que realice en el sistema deberá completarse en un minuto (o menos).

Vamos a comprobar a que grupos pertenece el usuario ryan.

El grupo DnsAdmins llama la atención. Buscando en Google, encontramos este artículo que detalla cómo escalar a SYSTEM desde DnsAdmins. Básicamente, crea una DLL maliciosa, ejecuta dnscmd para cargar dicha DLL y luego reinicia el servicio DNS.

La documentación de Microsoft describe este DnsAdmins como:

“Los miembros del grupo DNSAdmins tienen acceso a la información de DNS de la red. Los permisos predeterminados son los siguientes: Read, Write, Create All Child objects, Delete Child objects, Special Permissions.”

De forma predeterminada, los administradores de DNS no tienen la capacidad de iniciar o detener el servicio de DNS, pero no es raro que un administrador otorgue ese privilegio a este grupo.

El ataque aquí es decirle al servicio DNS en Resolute que use mi dll como complemento. Voy a usar msfvenompara crear un dll que, al cargar, se conectará de nuevo a mí. Cuando msfvenomcrea esta carga útil, se volverá a conectar y esperará a que finalice esa sesión antes de continuar. Esto bloqueará el servicio DNS en Resolute. Eso está bien para un CTF, pero sería un mal día en un pentest real.

Para evitar esto, puede crear una carga útil que inicie el shell reverso en un nuevo subproceso y luego continúe, para que el servidor DNS pueda continuar iniciándose.

Creamos la carga útil

Creamos la dll maliciosa utilizando msfvenom.

Ahora ejecutaremos un servidor SMB para cargar en la máquina objetivo la dll maliciosa.

Ejecutar el ataque

En la máquina víctima ejecutamos lo siguiente:

Posteriormente, detenemos e iniciamos el servidor DNS.

Y comprobamos la conexión exitosa en el servidor SMB.

En nuestro equipo local ejecuta netcat en el mismo puerto que pusimos al generar la Shell dll.

Y comprobamos quienes somos.

Tenemos privilegios de administrador. Vamos a buscar a continuación la flag de root.

Y ya tendremos la flag root y, la máquina completa.

No responses yet

Deja una respuesta

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