Содержание статьи
В Windows при входе пользователя в систему ему назначается собственная сессия. Глубоко‑глубоко внутри процесса lsass.
хранится сопоставление между сессией и учетными данными пользователя. При попытке пройти аутентификацию на стороннем хосте, ресурсе или службе LSA получает идентификатор конкретной сессии, обнаруживает связь между сессией и конкретными учетными данными, после чего проводит аутентификацию.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Подробно механизм аутентификации пользователей, принцип работы LSA и общую структуру сессий мы изучали в статье «Поставщик небезопасности. Как Windows раскрывает пароль пользователя». Сейчас же предлагаю познакомиться с механизмом кражи сессий.
Если вкратце: почти все способы кражи сессий позволяют немножко злоупотребить механизмом сопоставления сессии и учетных данных и начать исполнять какие‑нибудь нелегитимные действия от лица пользователя, на чью сессию мы можем воздействовать.
Поиск сессий пользователей
Первым делом нам нужно найти компьютер, на котором могут лежать интересные сессии пользователей. Здесь мы можем на выбор использовать:
- функции WinAPI, которые позволяют перечислять сессии на устройстве;
- поведение системы — например, можем смотреть, появляются ли определенные артефакты, которые свидетельствуют о наличии сессии пользователя на хосте;
- особенности AD, которые помогут нам раскрыть списки пользователей на хосте.
WinAPI
Начнем с самого простого варианта — WinAPI. Здесь много полезных нам функций. Я выделю эти:
Начнем с первой. У нее много аргументов, которые неплохо документированы в MSDN.
NET_API_STATUS NET_API_FUNCTION NetSessionEnum( [in] LMSTR servername, [in] LMSTR UncClientName, [in] LMSTR username, [in] DWORD level, [out] LPBYTE *bufptr, [in] DWORD prefmaxlen, [out] LPDWORD entriesread, [out] LPDWORD totalentries, [in, out] LPDWORD resume_handle);
Единственное, на что нам стоит обратить внимание, — первый параметр, он как раз таки и отвечает за компьютер, с которого будет получена информация о сессиях. Причем существует аналог этой функции, но поверх RPC — NetrSessionEnum().
С использованием этого метода работает большинство инструментов для обнаружения сессий пользователя. Например, если мы работаем с хоста на Linux, то можно воспользоваться скриптом netview.py (вот, кстати, вызов метода NetrSessionEnum()).
python3 netview.py DOMAIN/Administrator:lolkekcheb123! -target 10.10.10.10
Параметр -target
— это устройство, с которого следует собирать информацию о сессиях.
Инструмент имеет более инвазивные функции: с его помощью можно отслеживать сессии по всему домену. В таком случае список пользователей, которых ищем, указываем через -users
.
Чуть более урезанные возможности — у netexec
, он доступен через флаг --loggedon-users.
nxc smb 10.10.10.10/24 -u admin -p admin --loggedon-users
Наконец, BloodHound собирает информацию о сессиях точно таким же образом. Впрочем, если мы работаем с Windows, то описанные выше варианты неприменимы. Поэтому можно посмотреть в сторону LOLBAS. Например, net
.
net session [\\compname] [/list]
Либо quser
.
quser.exe /server:dc01.office.corp
# Аналог 1 в 1qwinsta.exe /server:dc01.office.corp
# Аналог 1 в 1, часть 2 :)query.exe user /server:W10.ad.bitsadmin.com
Еще существует подписанный Microsoft инструмент PsLoggedon.
psloggedon \\dc01
Наконец, есть полноценные фреймворки на PowerShell, например Get-UserSession2.ps1, BOF для Cobalt Strike Get-NetSession и, конечно же, всеми любимый Invoke-UserHunter
из пакета PowerView.
Invoke-UserHunter -GroupName "Domain Admins"Invoke-UserHunter -CheckAccess # Проверить административный доступInvoke-UserHunter -Domain "dev.corp" -UserName admin # Найти, где сейчас находится такой-то юзер# Есть флаг -Stealth, который уменьшает шансы на успех, но проверяет лишь машины с высокой ценностью
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее