Writable Sys Path +Dll Hijacking Privesc
Вступ
Якщо ви виявили, що можете записувати в папку системного шляху (зверніть увагу, що це не спрацює, якщо ви можете записувати в папку користувача), можливо, ви зможете підвищити привілеї в системі.
Для цього ви можете зловживати Dll Hijacking, де ви будете викрадати бібліотеку, що завантажується службою або процесом з більшими привілеями, ніж у вас, і оскільки ця служба завантажує Dll, яка, ймовірно, навіть не існує в системі, вона спробує завантажити її з системного шляху, в який ви можете записувати.
Для отримання додаткової інформації про що таке Dll Hijacking перегляньте:
Dll HijackingПідвищення привілеїв за допомогою Dll Hijacking
Пошук відсутньої Dll
Перше, що вам потрібно зробити, це виявити процес, що працює з більшими привілеями, ніж у вас, який намагається завантажити Dll з системного шляху, в який ви можете записувати.
Проблема в таких випадках полягає в тому, що, ймовірно, ці процеси вже працюють. Щоб дізнатися, які Dll відсутні, вам потрібно запустити procmon якомога швидше (перед завантаженням процесів). Отже, щоб знайти відсутні .dll, зробіть:
Створіть папку
C:\privesc_hijacking
і додайте шляхC:\privesc_hijacking
до системної змінної середовища Path. Ви можете зробити це вручну або за допомогою PS:
Запустіть
procmon
і перейдіть доOptions
-->Enable boot logging
та натиснітьOK
у сповіщенні.Потім, перезавантажте комп'ютер. Коли комп'ютер перезавантажиться,
procmon
почне записувати події якомога швидше.Після того, як Windows буде запущено, виконайте
procmon
знову, він скаже вам, що працює, і запитає, чи хочете ви зберегти події у файл. Скажіть так і збережіть події у файл.Після того, як файл буде згенеровано, закрийте відкрите вікно
procmon
і відкрийте файл подій.Додайте ці фільтри, і ви знайдете всі Dll, які деякі процеси намагалися завантажити з папки записуваного системного шляху:
Пропущені Dll
Запустивши це на безкоштовній віртуальній (vmware) Windows 11 машині, я отримав такі результати:
У цьому випадку .exe є марними, тому ігноруйте їх, пропущені DLL були з:
Служба | Dll | CMD рядок |
---|---|---|
Планувальник завдань (Schedule) | WptsExtensions.dll |
|
Служба діагностичної політики (DPS) | Unknown.DLL |
|
??? | SharedRes.dll |
|
Після того, як я це знайшов, я натрапив на цей цікавий блог, який також пояснює, як зловживати WptsExtensions.dll для підвищення привілеїв. Що ми зараз будемо робити.
Експлуатація
Отже, щоб підвищити привілеї, ми збираємося вкрасти бібліотеку WptsExtensions.dll. Маючи шлях і ім'я, нам просто потрібно згенерувати шкідливий dll.
Ви можете спробувати використати будь-який з цих прикладів. Ви можете запустити корисні навантаження, такі як: отримати rev shell, додати користувача, виконати beacon...
Зверніть увагу, що не всі служби запускаються з NT AUTHORITY\SYSTEM
, деякі також запускаються з NT AUTHORITY\LOCAL SERVICE
, які мають менше привілеїв, і ви не зможете створити нового користувача, зловживаючи його дозволами.
Однак, цей користувач має привілей seImpersonate
, тому ви можете використовувати потаточний набір для підвищення привілеїв. Отже, в цьому випадку rev shell є кращим варіантом, ніж спроба створити користувача.
На момент написання служба Планувальник завдань запускається з Nt AUTHORITY\SYSTEM.
Маючи згенерований шкідливий Dll (в моєму випадку я використав x64 rev shell, і я отримав shell назад, але захисник його вбив, оскільки він був з msfvenom), збережіть його в записуваному системному шляху з ім'ям WptsExtensions.dll і перезавантажте комп'ютер (або перезапустіть службу або зробіть все, що потрібно, щоб повторно запустити уражену службу/програму).
Коли служба буде перезапущена, dll має бути завантажено та виконано (ви можете повторно використовувати трюк з procmon, щоб перевірити, чи бібліотека була завантажена, як очікувалося).
Last updated