# 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)