Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Как часто ты видишь заветную сессию доменного администратора на дырявой «семерке»? Его учетная запись так и просится в руки злоумышленника или пентестера, и дальше она поможет захватить всю сетку. Однако злой антивирус ни в какую не дает сдампить LSASS. Что пентестеру делать в таком случае? Как получить сессию пользователя, обойдя все защитные средства?
В Windows при входе пользователя в систему ему назначается собственная сессия. Глубоко‑глубоко внутри процесса lsass.exe
хранится сопоставление между сессией и учетными данными пользователя. При попытке пройти аутентификацию на стороннем хосте, ресурсе или службе LSA получает идентификатор конкретной сессии, обнаруживает связь между сессией и конкретными учетными данными, после чего проводит аутентификацию.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Подробно механизм аутентификации пользователей, принцип работы LSA и общую структуру сессий мы изучали в статье «Поставщик небезопасности. Как Windows раскрывает пароль пользователя». Сейчас же предлагаю познакомиться с механизмом кражи сессий.
Если вкратце: почти все способы кражи сессий позволяют немножко злоупотребить механизмом сопоставления сессии и учетных данных и начать исполнять какие‑нибудь нелегитимные действия от лица пользователя, на чью сессию мы можем воздействовать.
Общий концепт кражи сессии
Первым делом нам нужно найти компьютер, на котором могут лежать интересные сессии пользователей. Здесь мы можем на выбор использовать:
Начнем с самого простого варианта — 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
Изучение с системы Windows
Еще существует подписанный 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