Writable Sys Path +Dll Hijacking Privesc
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Вступ
Якщо ви виявили, що можете записувати в папку System Path (зверніть увагу, що це не спрацює, якщо ви можете записувати лише в User Path), то ймовірно ви можете підвищити привілеї в системі.
Для цього можна зловживати Dll Hijacking, коли ви збираєтеся перехопити бібліотеку, що завантажується сервісом або процесом з більшими привілеями, ніж у вас, і оскільки цей сервіс завантажує Dll, який, ймовірно, взагалі не існує в системі, він спробує завантажити його з System Path, в який ви можете писати.
Більше інформації про what is Dll Hijackig дивіться:
Privesc за допомогою Dll Hijacking
Пошук відсутнього Dll
Перше, що вам потрібно — це виявити процес, що працює з більшими привілеями, ніж у вас, і який намагається завантажити Dll зі System Path, в який ви можете записувати.
Проблема в таких випадках полягає в тому, що ці процеси, ймовірно, вже запущені. Щоб знайти, яких .dll бракує службам, потрібно запустити procmon якомога раніше (до того, як процеси будуть завантажені). Отже, щоб знайти відсутні .dll, зробіть:
- Create папку
C:\privesc_hijackingі додайте шляхC:\privesc_hijackingдо System Path env variable. Можна зробити це вручну або за допомогою PS:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"
# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}
# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
- Запустіть
procmonі перейдіть уOptions–>Enable boot logging, натиснітьOKу запиті. - Потім перезавантажте систему. Коли комп’ютер перезапуститься, procmon почне записувати події якомога швидше.
- Після завантаження Windows знову запустіть
procmon— воно повідомить, що працювало під час завантаження і запитає, чи зберегти події у файл. Скажіть yes і збережіть події у файл. - Після створення файлу закрийте відкрите вікно
procmonі відкрийте файл подій. - Додайте ці фільтри — ви знайдете всі Dll, які якийсь процес намагався завантажити з доступної для запису папки System Path:
.png)
Missed Dlls
Запустивши це на безкоштовній віртуальній машині (vmware) з Windows 11, я отримав такі результати:
.png)
У цьому випадку .exe марні, тож ігноруйте їх — пропущені DLL походили з:
| Служба | Dll | CMD line |
|---|---|---|
| Task Scheduler (Schedule) | WptsExtensions.dll | C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule |
| Diagnostic Policy Service (DPS) | Unknown.DLL | C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS |
| ??? | SharedRes.dll | C:\Windows\system32\svchost.exe -k UnistackSvcGroup |
Після цього я знайшов цікавий блог, який також пояснює, як abuse WptsExtensions.dll for privesc. Саме це ми робитимемо зараз.
Exploitation
Отже, щоб ескалювати привілеї, ми плануємо перехопити бібліотеку WptsExtensions.dll. Маючи шлях і ім’я, нам лишається згенерувати шкідливу dll.
You can try to use any of these examples. Ви можете запускати payload’и, наприклад: отримати rev shell, додати користувача, виконати beacon…
Warning
Зверніть увагу, що не всі служби запускаються від імені
NT AUTHORITY\SYSTEM— деякі працюють підNT AUTHORITY\LOCAL SERVICE, який має менше привілеїв, і ви не зможете створити нового користувача, аби зловживати його правами.
Однак цей користувач має привілейіюseImpersonate, тож ви можете скористатися potato suite to escalate privileges. Отже, у цьому випадку rev shell — кращий варіант, ніж спроба створити користувача.
На момент написання служба Task Scheduler запускається від імені Nt AUTHORITY\SYSTEM.
Після того, як шкідлива Dll згенерована (в моєму випадку я використав x64 rev shell і отримав shell назад, але defender вбив процес, бо payload був з msfvenom), збережіть її у доступному для запису System Path під іменем WptsExtensions.dll і перезавантажте комп’ютер (або перезапустіть службу чи зробіть будь-що, щоб знову запустити уражену службу/програму).
Коли служба перезапуститься, dll повинна бути завантажена і виконана (ви можете знову скористатися трюком з procmon, щоб перевірити, чи бібліотека була завантажена, як очікувалося).
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

