Врешь, не уйдешь! Как работает угон пользовательских сессий в Windows

Содержание статьи

  • Поиск сессий пользователей
  • WinAPI
  • Реестр
  • Через SCCM
  • Через RDP-сессии
  • Логи
  • Процессы
  • Кража сессий
  • Воруем TGS
  • Манипуляции с токенами
  • RemotePotato0
  • Запрос чужих сертификатов
  • SeMishaPrivilege
  • Leaked Wallpaper
  • Выводы

Как час­то ты видишь завет­ную сес­сию домен­ного адми­нис­тра­тора на дырявой «семер­ке»? Его учет­ная запись так и про­сит­ся в руки зло­умыш­ленни­ка или пен­тесте­ра, и даль­ше она поможет зах­ватить всю сет­ку. Одна­ко злой анти­вирус ни в какую не дает сдам­пить LSASS. Что пен­тесте­ру делать в таком слу­чае? Как получить сес­сию поль­зовате­ля, обой­дя все защит­ные средс­тва?

В Windows при вхо­де поль­зовате­ля в сис­тему ему наз­нача­ется собс­твен­ная сес­сия. Глу­боко‑глу­боко внут­ри про­цес­са lsass.exe хра­нит­ся сопос­тавле­ние меж­ду сес­сией и учет­ными дан­ными поль­зовате­ля. При попыт­ке прой­ти аутен­тифика­цию на сто­рон­нем хос­те, ресур­се или служ­бе LSA получа­ет иден­тифика­тор кон­крет­ной сес­сии, обна­ружи­вает связь меж­ду сес­сией и кон­крет­ными учет­ными дан­ными, пос­ле чего про­водит аутен­тифика­цию.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

Под­робно механизм аутен­тифика­ции поль­зовате­лей, прин­цип работы LSA и общую струк­туру сес­сий мы изу­чали в статье «Пос­тавщик небезо­пас­ности. Как Windows рас­кры­вает пароль поль­зовате­ля». Сей­час же пред­лагаю поз­накомить­ся с механиз­мом кра­жи сес­сий.

Ес­ли вкрат­це: поч­ти все спо­собы кра­жи сес­сий поз­воля­ют нем­ножко зло­упот­ребить механиз­мом сопос­тавле­ния сес­сии и учет­ных дан­ных и начать исполнять какие‑нибудь нелеги­тим­ные дей­ствия от лица поль­зовате­ля, на чью сес­сию мы можем воз­дей­ство­вать.

Об­щий кон­цепт кра­жи сес­сии 

Поиск сессий пользователей

Пер­вым делом нам нуж­но най­ти компь­ютер, на котором могут лежать инте­рес­ные сес­сии поль­зовате­лей. Здесь мы можем на выбор исполь­зовать:

  • фун­кции WinAPI, которые поз­воля­ют перечис­лять сес­сии на устрой­стве;
  • по­веде­ние сис­темы — нап­ример, можем смот­реть, появ­ляют­ся ли опре­делен­ные арте­фак­ты, которые сви­детель­ству­ют о наличии сес­сии поль­зовате­ля на хос­те;
  • осо­бен­ности AD, которые помогут нам рас­крыть спис­ки поль­зовате­лей на хос­те.

 

WinAPI

Нач­нем с самого прос­того вари­анта — WinAPI. Здесь мно­го полез­ных нам фун­кций. Я выделю эти:

  • NetSessionEnum();
  • NetWkstaUserEnum();
  • WinStationEnumerateW().

Нач­нем с пер­вой. У нее мно­го аргу­мен­тов, которые неп­лохо докумен­тирова­ны в 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

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *