WriteUp CTF Blackfield

Introducción

Blackfield fue un CTF de dificultad difícil clasificada en HackTheBox, creada por aas. Pone a prueba mi conocimiento de Active Directory y me enseña nuevos trucos durante su resolución. Requiere de la enumeración de SMB seguido de AS-Rep Roasting utilizando la lista de cuentas encontradas. El movimiento lateral requería cambiar la contraseña de una cuenta que tenía acceso al recurso forensics compartido. El segundo movimiento lateral consistió en encontrar un volcado lsass, utilizarlo pypykatz para analizarlo y obtener una sesión remota. Escalar a Administrador requería la recuperación de ntds.dit mediante el uso diskshadow.exe para crear un Volume Shadow Copy de la unidad C:\ y luego aprovechar el privilegio SeBackupPrivilege, copiarlo y luego usar el hash de Administrador para acceder a una sesión remota.

Enumeración

NMAP

Registramos el dominio un nuestro archivo /etc/hosts

RPC

El primer servicio con el que voy a buscar es RPC po0r si puedo entrar sin credenciales para enumerar las cuentas de usuario dentro del dominio. Como estoy usando Linux, uso rpcclient para conectarme al servicio. Utilizo -U “” -N para conectarme sin nombre de usuario y sin contraseña seguido de la IP del objetivo 10.10.10.192. Una vez conectado, utilizo enumdomusers para enumerar las cuentas de dominio en la máquina. Sin embargo, esto no tuvo éxito ya que recibí el siguiente mensaje de error que NT_STATUS_ACCESS_DENIED que indica que necesito ser autenticado.

SMB

A continuación, voy a intentar enumerar los recursos de SMB compartidos utilizando el acceso anónimo nuevamente. Voy a usar la herramienta smbclient para esto con el parámetro -U “” nuevamente para indicar que no hay nombre de usuario y –L para enumerar todos los recursos compartidos disponibles, seguido de la ubicación del recurso compartido //10.10.10.192.

Esto fue un éxito y ahora tengo una lista de recursos disponibles para mí. Los que se destacan para mí son forensic y profiles$. En este momento no tengo permiso para ingresar al recurso forensic, por lo que voy a centrar mi atención en profiles$. Es interesante, ya que $ significa que se trata de un recurso compartido oculto. Voy a ejecutar un comando smbclient similar a continuación que me mostrará el contenido del recurso profiles$.

El comando se completó con éxito y devolvió una gran lista de posibles cuentas de usuario. La guardo en un archivo llamado users.txt

Explotación

AS-Rep Roasting

Como ahora tengo una lista de usuarios potenciales y Kerberos se está ejecutando, voy a completar dos tareas. Primero verificaré qué cuentas son reales y segundo verificaré si alguna cuenta dentro de mi lista tiene la propiedad UF_DONT_REQUIRE_PREAUTH establecida. Para lograr esto voy a usar impacket-GetNPUsers.

Después de ejecuta, logré mis dos objetivos. He encontrado algunas cuentas support y svc_backup. Ahora tengo un TGT para la cuenta de support.

Para descifrar el hash utilizamos John y el diccionario de contraseñas rockyou.txt.

Enum4linux

Ahora que tengo las credenciales, voy a regresar y hacer más enumeraciones, ya que ahora tengo la autenticación disponible. Comienzo ejecutando la enum4linux para automatizar algunas enumeraciones básicas. Los argumentos que paso son –a para la enumeración completa, -u support para usar el usuario de la cuenta, -p ‘#00^BlackKnight’ proporcionando la contraseña (la contraseña tiene ” alrededor para que el comando no se vea afectado por los símbolos) y luego la IP del objetivo 10.10.10.192.

Una vez que se completó este escaneo, resultó en una gran cantidad de información y la mayor parte no era de utilidad, sin embargo, pude obtener otra gran lista de cuentas de usuario que formateé nuevamente y almacené en users2.txt.

Evil-WinRM

Con las credenciales del usuario support vamos a intentar conectarnos a la máquina víctima con la Shell Evil-WinRM. Primero hacemos la comprobación con crackmapexec.

No está disponible la conexión para el usuario support a través del servicio wsman.

Como no encontramos ningún vector de ataque, y tenemos unas credenciales, vamos a utilizar la herramienta bloodhound, y para extraer la información bloodhound-python.

Bloodhound

El siguiente paso será subir los archivos generados a Bloodhound, aunque primero debemos iniciar neo4j. El comando para ello es sudo neo4j console.

Primero, debemos buscar el usuario para el cual tenemos credenciales. Una vez encontrado, click derecho sobre el usuario y seleccionamos Mark User as Owned, lo cual hará que aparezca una calavera sobre el usuario.

Una vez completado este paso, nos desplazamos a la pestaña Node Info, donde nos dirigiremos a OUTBOUND CONTROL RIGHTS y seleccionaremos la opción First Degree Object Control.

Obtenemos como resultado que el usuario support puede cambiar la contraseña del usuario audit2020.

Restablecimiento de contraseñas a través de RPC.

Vamos a utilizar como base esta publicación de como restablecer contraseñas de Windows a través de RPC. Para ello, utilizaremos el comando setuserinfo2.

No sirven todas las contraseñas, después de varias pruebas, la contraseña debe tener 7 caracteres y entre ellos debe haber 1 número y un símbolo.

A continuación, comprobamos las nuevas credenciales.

Con el usuario audit2020 y la nueva contraseña, puedo realizar conexión a través de smb pero aún no puedo realizar la conexión utilizando winrrm.

Acceso SMB con usuario audit2020

Como podemos ver, ahora tenemos acceso READ al recurso compartido forensic que vimos anteriormente.

  • Dentro de commands_output del directorio vemos la salida de varios comandos, como netstat, systeminfo.
  • Dentro de tolos tenemos varias herramientas que pueden ser utilizadas para realizar auditorías y análisis forenses.
  • En el interior de memory_analysis tenemos volcados de memoria, donde destaca lsass.zip, que entendemos que es la captura de memoria del proceso LSASS.

Descargamos a nuestra máquina el recurso lsass.zip

Y extraemos su contenido.

LSASS significa Servicio de Subsistema de Autoridad de Seguridad Local. En Windows se utiliza para mejorar las políticas de seguridad y autenticación y en ella se almacenan datos de autenticación.

Para extraer las credenciales de un volcado LSASS se utiliza Mimikatz. Para Linux podemos utilizar pypykatz, una implementación escrita en Python de Mimikatz. Se puede instalar vía pip3 install pypykatz.

De todos los hashes NTLM descubiertos en el volcado, son interesantes svc_backup y Administrator. Después de ejecutar crackmapexec contra cada uno de ellos, pero el hash de Administrator no funciono, probablemente fue cambiado.

Shell como svc_backup

El hash de svc_backup funciona tanto para SMB como para winrm. Sabiendo esto, podemos utilizar herramientas como wmiexec, psexec, smbexec o Evil-WimRM que admiten la autenticación mediante hash NTLM. Nos decantamos por Evil-WinRM.

Una vez establecida la Shell, nos aseguramos que usuario somos y buscamos la flag user.txt.

Elevación de privilegios

Vamos a enumerar los privilegios a los que tiene acceso el usuario svc_backup. Para ello, utilizamos el comando whoami /priv.

Podemos ver que nuestro usuario tiene privilegios SeBackupPrivilege y SeRestorePrivilege, que son directorios que permiten al usuario acceder a directorios que no le pertenecen o para los que no tiene permisos.

El usuario svc_backup es miembro del grupo Backup Operators, por lo que tiene privilegios de respaldo que le permiten respaldar y restaurar, leer y escribir archivos en el sistema.

Próximos pasos:

  • Obtener una copia del archivo NTDS.dit, que es una base de datos que almacena las credenciales de los usuarios de Active Directory.
  • Seguiremos buscando el archivo SYSTEM que contiene la clave esencial para descifrar NTDS.dit.
  • Con la herramienta secretsdump extraeremos todos los usuarios en el dominio del archivo NTDS.dit.

Diskshadow

Diskshadow.exe es una herramienta que expone la funcionalidad que ofrece el Servicio de instantáneas de volumen (VSS).

En este documento explica el abuso en la escalada de privilegios SeBackupPrivilege, además de otros muchos privilegios.

Primero creo un archivo llamado diskshadow.txt con el contenido. Esto crea una copia de c:\ debajo del alias userAlias con la letra de la unidad z:\.

Primero creamos el archivo diskshadow.txt

Y lo subimos a la máquina víctima a través de Evil-WinRM.

Abrimos el contenido de la unidad Z:\.

Búsqueda del archivo NTDS.dit

A continuación, buscamos el archivo NTDS.dit que se encuentra en el directorio Windows y dentro de este, en la carpeta NTDS.

Ahora copiaré el archivo usando robocopy con el parámetro /B para ignorar los permisos del archivo y lo colocaré en un nuevo directorio ntds_new para guardar el nuevo archivo.

Ahora ya podemos descargar el archivo ntds.dit usando el comando download. También es importante guardar la colmena SYSTEM para poder descifrar el archivo ntds.dit. Una vez completado este paso, podemos utilizar impacket-secretsdump para descifrar. Los resultados los guardo en el archivo ntds.hashes.

Búsqueda del hash del usuario Administrator

Ahora comprobamos si el hash encontrado para el usuario Administrator nos permite conectarnos a través de SMB o WinRM.

Ambos métodos son válidos, así que vamos a establecer la Shell reversa utilizando Evil-WinRM.

No responses yet

Deja una respuesta

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