BlackGold

¡Hola hacker! Bienvenido a una nueva resolución. En esta ocasión, estaremos resolviendo una nueva máquina, la cual creé para nuestra comunidad de The Hackers Labs, la máquina Black Gold.
Reconocimiento
Realizamos un escaneo con arp-scan para descubrir la ip de la máquina víctima.

Lanzamos una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

Enumeración inicial
Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.
Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos.
Explotación inicial
Agregamos el domino a nuestro archivo hosts.
HTTP (80)
Ingresamos al stio web que esta corriendo bajo el puerto 80.

Si miramos en la web, nos encontramos que podemos descargar 2 archivos pdf.

Descargamos ambos archivos.


Vemos que el contenido no muestra nada relevante ni que pueda servirnos para la explotación, pero podemos enumerar los metadatos.

Encontramos dos posibles nombres de usuario.
AS-REP Roast
Podemos comprobar en base a una lista de usuarios cuales de ellos no tienen activo el atributo de Kerberos Pre-Auth. En caso de que el usuario sea valido, obtendremos el TGT (Ticket Granting Ticket) de Kerberos el cual podemos crackear offline.
Vemos que ninguno de los dos usuarios tiene activo el atributo.

Nos toca seguir enumerando.
Si prestamos atención, los nombre de los archivos pdf tienen el formato YYYY-MM-DD.pdf por lo que podemos intentar buscar nuevos archivos con este formato.
Creamos un script en Python para descargar los archivos pdf.
Logramos descargar un total de 190 archivos pdf.
Lo que haremos a continuación será extraer el creador y autor de cada archivo y guardarlos en un archivo, excluyendo el nombre de la empresa.
En este punto, lo que haremos será comprobar si alguno de estos usuarios es valido en el controlador de dominio, para lo cual usaremos la herramienta kerbrute.

Vemos que el único usuario valido es lucas.miller.
Lo siguiente, es leer el contenido de los archivos pdfs y generar una posible lista de contraseñas para aplicar un Password Spraying.
Para evitar repeticiones de palabras, realizamos un ordenamiento y eliminamos duplicados con sort.
Realizamos un Password Spraying usando Netexec.
Encontramos credenciales validas.
También podríamos utilizar una herramienta como pdfgrep y filtrar por lucas.miller en los pdfs.

Validamos las credenciales.

Enumeramos usando ldapdomaindump.
Creamos un servidor HTTP con Python para compartir los archivos.
Si listamos los usuarios por grupos, encontramos lo siguiente:

Movimiento lateral
lucas.miller -> victor.rodriguez
lucas.miller -> victor.rodriguezVemos que el usuario Victor Rodriguez tiene una posible contraseña en su descripción.
Validamos las credenciales

victor.rodriguez -> emma.johnson
victor.rodriguez -> emma.johnsonEnumeramos recursos compartidos.

Encontramos un recurso compartido llamado IT al cual tenemos acceso de lectura.

Descargamos el script de PowerShell llamado backup.ps1
Dentro de este script de PowerShell encontramos las credenciales del usuario emma.johnson

emma.johnson -> thomas.brown
emma.johnson -> thomas.brownValidamos las credenciales.

El usuario emma.johnson puede conetarse por winrm al dominio ya que pertenece al grupo Remote Management Users.


Leemos la flag de user.txt.

Enumeramos con Bloodhound

Inciamos Neo4j

Ingresamos a Bloodhound y cargamos el archivo zip.

Si realizamos una enumeración básica, encontramos lo siguiente.

El usuario emma.johnson puede cambiar la contraseña del usuario thomas.brown abusando del privilegio ForceChangePassword.
Para hacer esto, en primer lugar nos conectaremos al DC.
Descargamos PowerView.ps1

Luego realizamos lo siguiente.

Importa PowerView.
El código anterior convierte una cadena de texto (en este caso, una contraseña) a un objeto de tipo SecureString que es más seguro para ser utilizado en scripts, ya que evita exponer la contraseña como texto plano en memoria. El uso de -AsPlainText y -Force permite especificar que la contraseña se proporciona en texto plano y que se debe forzar la conversión.
La línea de código que anterior crea un objeto de tipo PSCredential en PowerShell, que es una manera segura de manejar credenciales (como nombres de usuario y contraseñas) en un script. El nombre de usuario se proporciona como una cadena ('neptune.thl\emma.johnson'), y la contraseña se pasa como un objeto SecureString que fue previamente creado.
Convierte la contraseña 'Password123!' en un objeto SecureString, que es una representación más segura de la contraseña en PowerShell. La contraseña original está en texto plano, pero con la ayuda de ConvertTo-SecureString, se convierte en un formato seguro (cifrado en memoria), lo que mejora la protección de la información sensible.
Este comando cambia la contraseña de un usuario (thomas.brown) en un dominio de Active Directory. La nueva contraseña se pasa como un objeto SecureString a través del parámetro -AccountPassword, y el cmdlet se ejecuta utilizando un conjunto de credenciales (almacenadas en la variable $Cred) especificadas con el parámetro -Credential.
De esta forma, logramos cambiar la contraseña del usuario thomas.brown.

Nos conectamos a la DC.

Elevación de privilegios
El usuario thomas.bronw pertenece al grupo Backup Operators, por lo que podemos abusar de este para escalar nuestros privilegios.


Explotación del privilegio SeBackupPrivilege
A diferencia de la explotación independiente, en el Controlador de Dominio, necesitamos el archivo ntds.dit para extraer los hashes junto con system. El problema con el archivo ntds.dit es que mientras la máquina de destino se está ejecutando el archivo siempre permanece en el uso y como somos bastante conscientes del hecho de que cuando un archivo es un underuse entonces no es posible copiar el archivo utilizando cualquier método convencional. Para evitar este problema, tenemos que utilizar la funcionalidad diskshadow. Se trata de una función integrada de Windows que puede ayudarnos a crear una copia de una unidad que esté actualmente en uso. Existen métodos para utilizar diskshadow que incluyen proporcionar instrucciones en una shell de diskshadow, pero eso suele ser un poco complicado. Por lo tanto, vamos a crear un Archivo Shell Distribuido o un archivo dsh que consistirá en todos los comandos que son requeridos por el diskshadow para ejecutar y crear una copia completa de nuestra unidad de Windows que luego podemos utilizar para extraer el archivo ntds.dit. Nos movemos a nuestro máquina atacante y creamos un archivo dsh utilizando el editor de su preferencia. En este archivo, le estamos indicando a diskshadow que cree una copia de la Unidad C: en una Unidad Z con cmd como alias. El alias de la unidad y el carácter pueden ser lo que quieras. Después de crear este archivo dsh, necesitamos usar unix2dos para convertir la codificación y el espaciado del archivo dsh a uno que sea compatible con la máquina Windows.
De vuelta a la Sesión WinRM, nos movemos al Directorio Temp y subimos el archivo cmd.dsh a la máquina destino. Luego, usamos el script diskshadow con dsh como se muestra en la imagen de abajo. Si se observa, se puede notar que diskshadow está efectivamente ejecutando los mismos comandos que ingresamos en el archivo dsh secuencialmente. Después de ejecutarse, como se ha comentado, creará una copia de la unidad C en la unidad Z. Ahora, podemos utilizar la herramienta RoboCopy para copiar el archivo de la unidad Z al directorio temporal.

Ahora tenemos el archivo ntds.dit y necesitamos extraer la colmena del sistema. Esto se puede hacer con un simple comando reg save como se muestra en el código de abajo. Con ambos archivos ntds.dit y system hive en el directorio Temp, ahora usamos el comando download para transferir ambos archivos a nuestro Kali Linux.

Descargamos ambos archivos a nuestra máquina atancate.
En nuestro máquina, podemos utilizar el script secretsdump que forma parte de Impacket Framework para extraer nuestros hashes del archivo ntds.dit y del hive del sistema. Se puede observar en la imágen de abajo que los hashes de la cuenta de administrador se han extraído correctamente.

Realizamos un Pass The Hash (PTH) y nos conectamos como el usuario Administrator.

Post Explotación
Leemos el flag de root.txt

De esta forma, llegamos al final de la máquina Black Gold.
Como siempre, si te gustó este CTF, ¡cuentaselos a otros!.
Si aun no eres parte de nuestra comunidad, te dejo los enlaces a la web The Hackers Labs y a el servidor de Discord.
¡Gracias por tu lectura!
¡Happy Hacking!
Última actualización