# SPB Department
## Enumeration
Сканируем сеть и ищем рабочие хосты:
```
nmap -sn --min-parallelism 300 --min-rate 200 10.10.0.0/16
```
![](https://i.imgur.com/fxINlyx.png)
Видим, что имеется один сервер без домена, а также 2 домена test.spb и bank.spb. Скорее всего, тестовый домен защищен в меньшей степени и как-то связан с основным доменом. Также находим СУБД MSSQL на узле SQLTEST.
## SQLTEST (10.10.2.205)
На узле имеется СУБД MSSQL, проверим на стойкость пароль учетной записи "sa".
![](https://i.imgur.com/sbsMEbu.png)
Для учетной записи "sa" подходит пароль "P@ssw0rd". Привилегии данной учетной записи позволяют исполнять произвольные команды, однако флаг на машине обнаружить не удалось.
## SQLSRV (10.10.2.204)
В ходе разведки и сбора информации на сервере SQLTEST замечаем, что от установленного экземпляра (инстанса) СУБД есть SQL Link на другие инстансы.
![](https://i.imgur.com/8HLmuvs.png)
Система линков такова: SQLTEST -> SQLSRV\DEV -> SQLSRV\PROD, причём на последнем инстансе линк настроен с привилегированной учетной записью и имеет права Sysadmin.
Таким образом, промежуточный линк нас не особо интересует. Нам интереснее на поледнем инстансе получить RCE.
Подключаемся к СУБД на узле SQLTEST с подобранным (сбрученным) паролем и попробуем выполнить код на удаленном узле с помощью конструкции:
```
EXEC ('EXEC (''xp_cmdshell ''''whoami'''' '') at [SQLSRV\PROD];') at [SQLSRV\DEV];
```
![](https://i.imgur.com/SvyWNcC.png)
Отлично, исполнение команд возможно, сделаем себе интерактивный shell и попробуем повысить привилегии.
Скачиваем бинарный файл nc.exe и запускаем reverse shell:
![](https://i.imgur.com/2pMM4eG.png)
Мы получили shell на сервер SQLSRV и стандартно у пользователя, из-под которого запущен MSSQL сервер есть права SeImpersonatePrivilege
![](https://i.imgur.com/NPH3NbB.png)
Есть много разных "картошек" (RottenPotato) для повышения привилегий через SeImpersonatePrivilege. В данном случае мы будем использовать инструмент https://github.com/itm4n/PrintSpoofer. О принципе его работы можно почитать здесь: https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/.
Бинарный файл из релизов режет Defender, поэтому скачиваем исходный код, собираем проект сами и успешно используем его.
Скачиваем:
![](https://i.imgur.com/jOXxvJ1.png)
И запускаем:
![](https://i.imgur.com/umJraTr.png)
Далее меняем пароль локальному администратору, получаем доступ на узел и забираем первый флаг.
![](https://i.imgur.com/y0JSdET.png)
## SRVDEV (10.10.2.202)
Сервер SQLSRV находится в домене, поэтому получаем с него доменную машинную учетную запись.
![](https://i.imgur.com/7fvs92a.png)
С полученной учетной записи проверим возможность проведения атак Kerberoasting и As-RepRoasting
![](https://i.imgur.com/SrnFOoq.png)
Отлично! Проведем атаку Kerberoasting.
![](https://i.imgur.com/5ClZLEJ.png)
Полученный билет удалось сбрутать и получить пароль пользователя
"maindev - $$$$$London1997"
С помощью Bloodhound проанализируем домен.
![](https://i.imgur.com/DdMwBqx.png)
У нас из доменных пользователей есть машинная учетная запись сервера SQLSRV и пользователь "maindev". Посмотрим, какие есть от него пути.
![](https://i.imgur.com/mTBi9I4.png)
Действительно, пользователь "maindev" может добавить пользователей в группу DBODEV. Затем члены группы DBODEV могут добавить себя в группу SRVADMINS. Далее члены группы SRVADMINS могут эксплуатировать GenericWrite для сервера SRVDEV и получить на него привилегированный доступ.
Эксплуатировать ACL в домене будем, естественно, с помощью инструмента ldap_shell (https://github.com/PShlyundin/ldap_shell).
![](https://i.imgur.com/eprkZdA.png)
![](https://i.imgur.com/juHl4aS.png)
Теперь имеется возможность эксплуатировать RBCD и получить доступ на сервер SRVDEV.
![](https://i.imgur.com/IX5kQA5.png)
В хранилище LSA находим учетную запись "spbadmin". Также эту учетную запись можно было получить с помощью инструмента mimikatz.
![](https://i.imgur.com/68N84sP.png)
## DcDev (10.10.2.200)
В BloodHound видим путь от администраторской учетной записи "spbadmin" до контроллера домена.
![](https://i.imgur.com/AuUcDyO.png)
Эксплуатировать ACL WriteOwner будем с помощью ldap_shell
![](https://i.imgur.com/GWsNsaU.png)
Теперь мы можем поставить новый пароль на машинную учетную запись контроллера домена. Делать это опасно на любую машину в домене, кроме контроллеров домена.
![](https://i.imgur.com/zbwxooB.png)
Можем провести атаку DcSync, захватить тестовый домен и забрать флаг.
![](https://i.imgur.com/rCWEIFQ.png)
Заметим, что информация о части учетных записей из NTDS.DIT выдается (дампится) с паролем в открытом виде. Запомним это, возможно пригодится.
![](https://i.imgur.com/IYws5A0.png)
## SRVTerm (10.10.2.203)
Доверительных связей между доменами TEST.SPB и BANK.SPB нет. В таком случае, есть смысл проверить возможность использования пользователем из домена TEST.SPB такого же пароля в домене BANK.SPB (Password Reuse).
Повторим атаку DcSync и запишем результат в файл:
```
secretsdump.py test.spb/dcdev\$:P@ssw0rd@10.10.2.200 -just-dc-ntlm -outputfile DUMP
```
Разбираем (парсим) файл DUMP.ntds и ищем учетные записи, которые в домене BANK.SPB имеют такой же пароль.
```
cat DUMP.ntds| grep -v '\$' | cut -d ":" -f 1,4 > user_hash
for e in `cat user_hash`; do crackmapexec smb 10.10.2.20 -u `echo $e | cut -d ":" -f 1` -H `echo $e | cut -d ":" -f 2`; done
```
Перебор дал результаты. Ровно одна учетная запись имеет одинаковый пароль в двух доменах:
![](https://i.imgur.com/FRgLDx0.png)
Более того, у нас есть пароль этой учетной записи в открытом виде из NTDS.DIT:
![](https://i.imgur.com/Z61c4tk.png)
Пароль в открытом виде и сервер, в названии которого прослеживается связь с терминальным сервером, намекает, что пора зайти по RDP.
![](https://i.imgur.com/TqOeaOd.png)
Учетная запись "timofeev.t.f" не имеет привилегий на терминальном сервере, но есть варианты повышения привилегий в среде Active Directory с помощью инструментов KrbRelayUp и KrbRelay.
Но есть проблема в виде AV Defender. Поиграв с параметрами confuserex упаковываем KrbRelay и переносим на терминальный сервер.
Запускаем пересылку (релей) кербероса на LDAP и через ShadowCred получаем сертификат для машинной учетной записи.
![](https://i.imgur.com/Vi1E1dj.png)
На основе сертификата запрашиваем TGT-билет. Затем через механизм U2U запрашиваем TGS-билет. Расшифровываем его сессионным ключом, извлекая в открытом виде NTLM-хеш пароля машинной учетной записи.
![](https://i.imgur.com/NfgJVIz.png)
Далее на основе NTLM-хеша машинной учетной записи создаём Silver Ticket и получаем привилегированный доступ на узел SRVTerm.
![](https://i.imgur.com/JTojBIo.png)
![](https://i.imgur.com/3vRN4dX.png)
## SRVAdmins (10.10.2.201)
Собираем с помощью sharphound информацию о домене bank.spb и пробуем найти дайльнейший путь атаки.
![](https://i.imgur.com/B5BxTep.png)
![](https://i.imgur.com/K1lMkmA.png)
Видим, что терминальный сервер находится в группе SERVERS. Группа SERVERS может сменить пароль пользователю "ADMINGPO", а "ADMINGPO" может менять "GPO ADMINS". GPO применяется к организационной единице (OU) "ADMIN SERVERS", в которую входит сервер SRVADMINS.
![](https://i.imgur.com/bxYQ8w3.png)
План действий следующий:
1. Захватим учетную запись "AdminGPO" с помощью ldap_shell;
2. Изменим GPO "GPO ADMINS" так, чтобы исполнить произвольный код на сервере SRVADMINS и захватим его.
![](https://i.imgur.com/oiNEdDX.png)
Захватили администратора GPO. Теперь с помощью инструмента pyGPOAbuse (https://github.com/Hackndo/pyGPOAbuse) меняем GPO так, чтобы на сервере SRVADMINS выполнилась нужная команда через планировщик задач.
![](https://i.imgur.com/kQHmUBk.png)
Ждем пару минут и получаем доступ на сервер SRVAdmins.
![](https://i.imgur.com/7lBm3PL.png)
## DC (10.10.2.20)
Сервер SRVAdmins на самом деле имеет роль центра сертификаций (CA).
![](https://i.imgur.com/q8ltWsZ.png)
Проанализировав шаблоны замечаем, что никаких атак на них нет. Однако, захватив центр сертификаций, мы можем выпустить так называемый "золотой сертификат" (Golden certificate).
Сначала сделаем резервную копию (бэкап) закрытого ключа CA.
![](https://i.imgur.com/wvcM4y2.png)
Далее подключимся к серверу CA и узнаем у любого шаблона путь до certificate revocation list (CRL).
![](https://i.imgur.com/9zSID3o.png)
Теперь у нас есть все чтобы создать свой сертификат для администратора домена.
![](https://i.imgur.com/60jfYLT.png)
На основе сертификата можно получить NTLM-хеш пароля администратора домена.
![](https://i.imgur.com/jdr6SxV.png)
Заходим на контроллер домена и получаем последний флаг.
![](https://i.imgur.com/gtXSo9G.png)