Содержание статьи
- Сканирование SPN
- Сбор данных
- Общие ресурсы
- Базы данных
- Network Attached Storage
- Пользовательские данные при наличии привилегий
- Microsoft Exchange и Outlook при наличии привилегий
- Учетные данные
- Учетные записи администраторов домена
- Скрытая учетная запись администратора
- Группы Active Directory
- Информация из локальных групп Active Directory
- Local Administrator Password Solution
- AppLocker
- Azure Active Directory
- Сценарий синхронизации паролей
- Сценарий синхронизации каталога
- Заключение
Рассмотренные в данной статье примеры применимы для следующих версий Windows: 7, 8, 10, Server 2008, Server 2012 и Server 2016; другие не проверяли. Также для работы примеров в системе должен быть PowerShell с указанными модулями.
Другие статьи про атаки на Active Directory
- Атаки на Active Directory. Разбираем актуальные методы повышения привилегий
- Боковое перемещение в Active Directory. Разбираем техники Lateral Movement при атаке на домен
- Защита от детекта в Active Directory. Уклоняемся от обнаружения при атаке на домен
- Защита от детекта в Active Directory. Как обмануть средства обнаружения при атаке на домен
- Сбор учеток в Active Directory. Как искать критически важные данные при атаке на домен
- Закрепляемся в Active Directory. Как сохранить доступ при атаке на домен
- Бэкдоры в Active Directory. Используем групповые политики, чтобы сохранить доступ к домену
WARNING
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный информацией из этой статьи.
Сканирование SPN
Когда нужно повысить привилегии, злоумышленники обычно используют учетные записи служб, поскольку у таких учеток больше прав, но нет строгой политики смены пароля через заданный промежуток времени. То есть если скомпрометировать их, то потом можно долго оставаться незамеченным.
INFO
Service Principal Names (SPN) — идентификаторы служб, запущенных на доменной машине. Не зная их, ты не сможешь искать службы, которые используют проверку подлинности Kerberos.
SPN-строка имеет такой формат:
SPN="serviceclass"/"hostname[:port]"[/"servicename"]
Serviceclass
— строка, которая идентифицирует класс службы, напримерldap
— идентификатор для службы каталогов;Hostname
— строка, где указывается полное доменное имя системы, а иногда и порт;Servicename
— строка, которая представляет собой уникальное имя (DN), GUID объекта или полностью определенное доменное имя (FQDN) службы.
SPN уникальный в пределах леса. Когда компьютер добавляют в домен, у его учетной записи автоматически указывается host SPN, что позволяет службам на этой машине запускаться из-под локальных учетных записей, таких как Local System и Network Service.
Сканирование SPN — это первое, что обычно делает злоумышленник или пентестер при поиске служб в среде Active Directory. Основное преимущество этого метода по сравнению со сканированием сетевых портов в том, что не требуется взаимодействие с каждым узлом сети для проверки служебных портов. Сканирование SPN позволяет обнаружить службы с помощью запросов LDAP к контроллеру домена. Так как запросы SPN — нормальное поведение проверки подлинности Kerberos, этот способ сканирования обнаружить очень сложно (даже почти нереально), в отличие от сканирования портов.
Выполнить сканирование SPN можно с помощью скрипта на PowerShell.
Наиболее интересные службы:
- SQL (MSSQLSvc/adsmsSQLAP01.ads.org:1433)
- Exchange (exchangeMDB/adsmsEXCAS01.ads.org)
- RDP (TERMSERV/adsmsEXCAS01.adsecurity.org)
- WSMan / WinRM / PS Remoting (WSMAN/adsmsEXCAS01.ads.org)
- Hyper-V (Microsoft Virtual Console Service/adsmsHV01.ady.org)
- VMware VCenter (STS/adsmsVC01.ads.org)
Хочу поделиться с тобой и еще одним интересным скриптом, который покажет тебе все SPN для всех пользователей и всех компьютеров.
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(servicePrincipalName=*)"
$results = $search.Findall()
foreach($result in $results){
$userEntry = $result.GetDirectoryEntry()
Write-host "Object Name = " $userEntry.name -backgroundcolor "yellow" -foregroundcolor "black"
Write-host "DN = " $userEntry.distinguishedName
Write-host "Object Cat. = " $userEntry.objectCategory
Write-host "servicePrincipalNames"
$i=1
foreach($SPN in $userEntry.servicePrincipalName)
{
Write-host "SPN(" $i ") = " $SPN $i+=1
}
Write-host ""
}
Сбор данных
Общие ресурсы
В среде Active Directory часто используются сетевые папки и файловые серверы. Эти команды отобразят список общих ресурсов на локальном хосте, список сетевых компьютеров и список шар на удаленном компьютере:
> net share
> net view
> net view COMPUTER_NAME /all
Но что делать, если политика безопасности запрещает использовать сетевые команды? В этом случае нас выручит wmic
. Список общих ресурсов на локальном хосте и список общих ресурсов на удаленном компьютере можно посмотреть с помощью команд
> wmic share get /format:list
> wmic /node: COMPUTER_NAME share get
Полезный инструмент для поиска данных — PowerView. Он автоматически обнаруживает сетевые ресурсы и файловые серверы с помощью команд Find-DomainShare
и Get-DomainFileServer
.
Кстати, PowerView встроен в фреймворк PowerShell Empire и представлен двумя модулями:
situational_awareness/network/powerview/share_finder
;situational_awareness/network/powerview/get_fileserver
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»