Разведка в Active Directory. Получаем пользовательские данные в сетях Windows без привилегий. Часть 1

Разведка в Active Directory. Получаем пользовательские данные в сетях Windows без привилегий. Часть 1

Life-Hack [Жизнь-Взлом]

#Обучение

Представь, что кто-то проводит атаку на корпоративную сеть Windows. Вначале у злоумышленника либо мало привилегий в домене, либо их вовсе нет. Поэтому искать учетные записи и службы он будет без повышенных привилегий, то есть не от имени администратора домена или локального администратора. О том, как производится разведка в среде Active Directory, мы и поговорим.

Рассмотренные в данной статье примеры применимы для следующих версий Windows: 7, 8, 10, Server 2008, Server 2012 и Server 2016; другие не проверяли. Также для работы примеров в системе должен быть PowerShell с указанными модулями.

С Сканирование SPN.

Когда нужно повысить привилегии, злоумышленники обычно используют учетные записи служб, поскольку у таких учеток больше прав, но нет строгой политики смены пароля через заданный промежуток времени. То есть если скомпрометировать их, то потом можно долго оставаться незамеченным.

Service Principal Names (SPN) — идентификаторы служб, запущенных на доменной машине. Не зная их, ты не сможешь искать службы, которые используют проверку подлинности Kerberos. SPN уникальный в пределах леса. Когда компьютер добавляют в домен, у его учетной записи автоматически указывается host SPN, что позволяет службам на этой машине запускаться из-под локальных учетных записей, таких как Local System и Network Service.

SPN — строка следующего формата:
SPN="serviceclass"/"hostname[:port]"[/"servicename"]
Serviceclass — строка, которая идентифицирует класс службы, например — идентификатор для службы каталогов;
ldap
Hostname — строка, где указывается полное доменное имя системы, а иногда и порт;
Servicename — строка, которая представляет собой уникальное имя (DN), GUID объекта или полностью определенное доменное имя (FQDN) службы.

Сканирование 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.

Б Базы данных.

В среде Active Directory, как правило, несколько серверов баз данных. PowerUpSQL — отличный инструмент для обнаружения, перечисления и атак на серверы Microsoft SQL.

Найти все локальные экземпляры SQL можно командой Get-SQLInstanceLocal -Verbose. Чтобы найти все экземпляры SQL в сети или домене, используй команды Get-SQLInstanceDomain -Verbose, Get-SQLInstanceBroadcast -Verbose и Get-SQLInstanceScanUDP -Verbose.

После поиска собираем информацию об экземплярах SQL:

  • Get-SQLInstanceLocal | Get-SQLServerInfo— для локальных;
  • Get-SQLServerInfo -Instance "COMPUTER_NAME" — для удаленных.

Когда мы нашли все экземпляры SQL и собрали информацию о них, мы можем:

  • получить список экземпляров SQL, в которые разрешен вход текущему пользователю домена, — Get-SQLInstanceDomain –Verbose | Get-SQLConnectionTestThreaded –Verbose -Threads 10;
  • попытаться получить права администратора для экземпляра SQL — Invoke-SQLEscalatePriv -Verbose -Instance "COMPUTER_NAME";
  • перечислить экземпляры SQL по всему домену с использованием паролей по умолчанию — Get-SQLInstanceDomain -Verbose | Get-SQLServerLoginDefaultPw -Verbose;
  • сдампить информацию о SQL Server и базе данных в файлы CSV или XML —Invoke-SQLDumpInfo -Verbose -Instance "COMPUTER_NAME";
  • запустить функции аудита для сервера SQL — Invoke-SQLAudit -Verbose -Instance "COMPUTER_NAME".

N Network Attached Storage.

Network Attached Storage (NAS) — сервер для хранения данных на файловом уровне. Поскольку там сложены файлы, нередко это и есть цель злоумышленника. NAS не нужна полноценная операционка, поэтому на них часто ставят FreeNAS или NAS4Free на базе FreeBSD. Большинство NAS можно администрировать через веб или SSH. В таком случает следует перебрать дефолтные связки логин — пароль. Вот пятерка самых распространенных:

  • admin:admin;
  • admin:password;
  • root:nasadmin;
  • nasadmin:nasadmin;
  • admin:"no pass".

П Пользовательские данные при наличии привилегий.

У Учетные данные пользователей.

Для охоты на пользователей отлично подходит BloodHound — инструмент для активного поиска каталогов.

Определить, где конкретный пользователь или группа пользователей вошли в систему, можно с помощью команд PowerView и модуля PowerShell Empire.

>Find-DomainUserLocation -UserIdentity USER_NAME
>Find-DomainUserLocation -UserGroupIdentity GROUP_NAME

situational_awareness/network/powerview/user_hunter

Л Локальные данные.

После компрометации учетных данных пользователей появляется много возможностей: запись на рабочий стол, получение картинки с веб-камеры, сброс паролей, установка кейлоггеров. Большая часть этих возможностей автоматизирована в инструментах Metasploit Framework, PowerShell Empire и Cobalt Strike.

Многие — может быть, даже ты — позволяют браузерам сохранять свои пароли. И часто мы используем одни и те же пароли для разных сервисов, так что найденные в браузере пароли нам еще, скорее всего, пригодятся.

Вот модули Metasploit, которые помогают в этом.

post/windows/gather/enum_chrome
post/multi/gather/firefox_creds
post/firefox/gather/cookies
post/firefox/gather/passwords
post/windows/gather/forensics/browser_history

Модули PowerShell Empire.

collection/ChromeDump
collection/FoxDump

Вытащить пароли можно и вручную. Для этого сохрани профиль браузера, импортируй его на виртуальную машину, открой браузер и посмотри пароли.

Файлы профилей Firefox лежат в C:\Users\TARGET\AppData\Roaming\Mozilla\Firefox\Profiles, а профилей Google Chrome — в C:\Users\TARGET\AppData\Local\Google\Chrome\User Data\Default. Чтобы узнать данные удаленного доступа, можно использовать модуль Metasploit post/windows/gather/enum_putty_saved_sessions или модули Empire collection/netripper и credentials/sessiongopher.

П Пользовательские файлы.

Часто цель атакующего — это пользовательские файлы. Для их поиска есть очень удобный скрипт на PowerShell — WMImplant. Он позволяет использовать фильтры. Например, чтобы найти файл с именем wmimplant, выполним команды

$filefilter = "Filename = 'wmimplant' AND Drive='C:'"
Get-WMIObject -Class CIM_Datafile -filter $filefilter 

Также можно настроить фильтр по расширению файла.

> $filefilter = "Extensios = 'ps1' AND Drive='C:'"
> Get-WMIObject -Class CIM_Datafile -filter $filefilter 

M Microsoft Exchange и Outlook при наличии привилегий.

Если у злоумышленника есть учетные данные пользователей, то почтовые ящики, считай, тоже скомпрометированы. Если ты выступаешь на атакующей стороне, открывай панель Outlook и делай запросы, по которым могут найтись полезные данные. Например, логин, пароль, password, pass, credentials, vpn, ssh, root, confidential.

Этот процесс можно автоматизировать при помощи инструмента MailSniper. Для автоматического обнаружения целевого сервера Exchange и поиска в почтовом ящике user@example.com используй такую команду:

> Invoke-SelfSearch -OutputCsv local-results.csv -Mailbox user@example.com

Если ящик известен, то такую:

> Invoke-SelfSearch -Remote -ExchHostname outlook.office365.com -OutputCsv local-results.csv -Mailbox user@example.com

Если у тебя уже есть права администратора Exchange, можно искать по всем почтовым ящикам:

> Invoke-GlobalMailSearch -ImpersonationAccount TARGET_USER -ExchHostname Exch01 -OutputCsv global-results.csv 

Продолжение следует...

Источник

Report Page