# SPB Department
## Enumeration
Сканируем сеть и ищем рабочие хосты:
```
nmap -sn --min-parallelism 300 --min-rate 200 10.10.0.0/16
```

Видим, что имеется один сервер без домена, а также 2 домена test.spb и bank.spb. Скорее всего, тестовый домен защищен в меньшей степени и как-то связан с основным доменом. Также находим СУБД MSSQL на узле SQLTEST.
## SQLTEST (10.10.2.205)
На узле имеется СУБД MSSQL, проверим на стойкость пароль учетной записи "sa".

Для учетной записи "sa" подходит пароль "P@ssw0rd". Привилегии данной учетной записи позволяют исполнять произвольные команды, однако флаг на машине обнаружить не удалось.
## SQLSRV (10.10.2.204)
В ходе разведки и сбора информации на сервере SQLTEST замечаем, что от установленного экземпляра (инстанса) СУБД есть SQL Link на другие инстансы.

Система линков такова: SQLTEST -> SQLSRV\DEV -> SQLSRV\PROD, причём на последнем инстансе линк настроен с привилегированной учетной записью и имеет права Sysadmin.
Таким образом, промежуточный линк нас не особо интересует. Нам интереснее на поледнем инстансе получить RCE.
Подключаемся к СУБД на узле SQLTEST с подобранным (сбрученным) паролем и попробуем выполнить код на удаленном узле с помощью конструкции:
```
EXEC ('EXEC (''xp_cmdshell ''''whoami'''' '') at [SQLSRV\PROD];') at [SQLSRV\DEV];
```

Отлично, исполнение команд возможно, сделаем себе интерактивный shell и попробуем повысить привилегии.
Скачиваем бинарный файл nc.exe и запускаем reverse shell:

Мы получили shell на сервер SQLSRV и стандартно у пользователя, из-под которого запущен MSSQL сервер есть права SeImpersonatePrivilege

Есть много разных "картошек" (RottenPotato) для повышения привилегий через SeImpersonatePrivilege. В данном случае мы будем использовать инструмент https://github.com/itm4n/PrintSpoofer. О принципе его работы можно почитать здесь: https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/.
Бинарный файл из релизов режет Defender, поэтому скачиваем исходный код, собираем проект сами и успешно используем его.
Скачиваем:

И запускаем:

Далее меняем пароль локальному администратору, получаем доступ на узел и забираем первый флаг.

## SRVDEV (10.10.2.202)
Сервер SQLSRV находится в домене, поэтому получаем с него доменную машинную учетную запись.

С полученной учетной записи проверим возможность проведения атак Kerberoasting и As-RepRoasting

Отлично! Проведем атаку Kerberoasting.

Полученный билет удалось сбрутать и получить пароль пользователя
"maindev - $$$$$London1997"
С помощью Bloodhound проанализируем домен.

У нас из доменных пользователей есть машинная учетная запись сервера SQLSRV и пользователь "maindev". Посмотрим, какие есть от него пути.

Действительно, пользователь "maindev" может добавить пользователей в группу DBODEV. Затем члены группы DBODEV могут добавить себя в группу SRVADMINS. Далее члены группы SRVADMINS могут эксплуатировать GenericWrite для сервера SRVDEV и получить на него привилегированный доступ.
Эксплуатировать ACL в домене будем, естественно, с помощью инструмента ldap_shell (https://github.com/PShlyundin/ldap_shell).


Теперь имеется возможность эксплуатировать RBCD и получить доступ на сервер SRVDEV.

В хранилище LSA находим учетную запись "spbadmin". Также эту учетную запись можно было получить с помощью инструмента mimikatz.

## DcDev (10.10.2.200)
В BloodHound видим путь от администраторской учетной записи "spbadmin" до контроллера домена.

Эксплуатировать ACL WriteOwner будем с помощью ldap_shell

Теперь мы можем поставить новый пароль на машинную учетную запись контроллера домена. Делать это опасно на любую машину в домене, кроме контроллеров домена.

Можем провести атаку DcSync, захватить тестовый домен и забрать флаг.

Заметим, что информация о части учетных записей из NTDS.DIT выдается (дампится) с паролем в открытом виде. Запомним это, возможно пригодится.

## 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
```
Перебор дал результаты. Ровно одна учетная запись имеет одинаковый пароль в двух доменах:

Более того, у нас есть пароль этой учетной записи в открытом виде из NTDS.DIT:

Пароль в открытом виде и сервер, в названии которого прослеживается связь с терминальным сервером, намекает, что пора зайти по RDP.

Учетная запись "timofeev.t.f" не имеет привилегий на терминальном сервере, но есть варианты повышения привилегий в среде Active Directory с помощью инструментов KrbRelayUp и KrbRelay.
Но есть проблема в виде AV Defender. Поиграв с параметрами confuserex упаковываем KrbRelay и переносим на терминальный сервер.
Запускаем пересылку (релей) кербероса на LDAP и через ShadowCred получаем сертификат для машинной учетной записи.

На основе сертификата запрашиваем TGT-билет. Затем через механизм U2U запрашиваем TGS-билет. Расшифровываем его сессионным ключом, извлекая в открытом виде NTLM-хеш пароля машинной учетной записи.

Далее на основе NTLM-хеша машинной учетной записи создаём Silver Ticket и получаем привилегированный доступ на узел SRVTerm.


## SRVAdmins (10.10.2.201)
Собираем с помощью sharphound информацию о домене bank.spb и пробуем найти дайльнейший путь атаки.


Видим, что терминальный сервер находится в группе SERVERS. Группа SERVERS может сменить пароль пользователю "ADMINGPO", а "ADMINGPO" может менять "GPO ADMINS". GPO применяется к организационной единице (OU) "ADMIN SERVERS", в которую входит сервер SRVADMINS.

План действий следующий:
1. Захватим учетную запись "AdminGPO" с помощью ldap_shell;
2. Изменим GPO "GPO ADMINS" так, чтобы исполнить произвольный код на сервере SRVADMINS и захватим его.

Захватили администратора GPO. Теперь с помощью инструмента pyGPOAbuse (https://github.com/Hackndo/pyGPOAbuse) меняем GPO так, чтобы на сервере SRVADMINS выполнилась нужная команда через планировщик задач.

Ждем пару минут и получаем доступ на сервер SRVAdmins.

## DC (10.10.2.20)
Сервер SRVAdmins на самом деле имеет роль центра сертификаций (CA).

Проанализировав шаблоны замечаем, что никаких атак на них нет. Однако, захватив центр сертификаций, мы можем выпустить так называемый "золотой сертификат" (Golden certificate).
Сначала сделаем резервную копию (бэкап) закрытого ключа CA.

Далее подключимся к серверу CA и узнаем у любого шаблона путь до certificate revocation list (CRL).

Теперь у нас есть все чтобы создать свой сертификат для администратора домена.

На основе сертификата можно получить NTLM-хеш пароля администратора домена.

Заходим на контроллер домена и получаем последний флаг.
