Writable Sys Path +Dll Hijacking Privesc

Support HackTricks

Вступ

Якщо ви виявили, що можете записувати в папку системного шляху (зверніть увагу, що це не спрацює, якщо ви можете записувати в папку користувача), можливо, ви зможете підвищити привілеї в системі.

Для цього ви можете зловживати Dll Hijacking, де ви будете викрадати бібліотеку, що завантажується службою або процесом з більшими привілеями, ніж у вас, і оскільки ця служба завантажує Dll, яка, ймовірно, навіть не існує в системі, вона спробує завантажити її з системного шляху, в який ви можете записувати.

Для отримання додаткової інформації про що таке Dll Hijacking перегляньте:

Dll Hijacking

Підвищення привілеїв за допомогою Dll Hijacking

Пошук відсутньої Dll

Перше, що вам потрібно зробити, це виявити процес, що працює з більшими привілеями, ніж у вас, який намагається завантажити Dll з системного шляху, в який ви можете записувати.

Проблема в таких випадках полягає в тому, що, ймовірно, ці процеси вже працюють. Щоб дізнатися, які Dll відсутні, вам потрібно запустити procmon якомога швидше (перед завантаженням процесів). Отже, щоб знайти відсутні .dll, зробіть:

  • Створіть папку C:\privesc_hijacking і додайте шлях C:\privesc_hijacking до системної змінної середовища Path. Ви можете зробити це вручну або за допомогою 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 знову, він скаже вам, що працює, і запитає, чи хочете ви зберегти події у файл. Скажіть так і збережіть події у файл.

  • Після того, як файл буде згенеровано, закрийте відкрите вікно procmon і відкрийте файл подій.

  • Додайте ці фільтри, і ви знайдете всі Dll, які деякі процеси намагалися завантажити з папки записуваного системного шляху:

Пропущені Dll

Запустивши це на безкоштовній віртуальній (vmware) Windows 11 машині, я отримав такі результати:

У цьому випадку .exe є марними, тому ігноруйте їх, пропущені DLL були з:

СлужбаDllCMD рядок

Планувальник завдань (Schedule)

WptsExtensions.dll

C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule

Служба діагностичної політики (DPS)

Unknown.DLL

C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS

???

SharedRes.dll

C:\Windows\system32\svchost.exe -k UnistackSvcGroup

Після того, як я це знайшов, я натрапив на цей цікавий блог, який також пояснює, як зловживати 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, щоб перевірити, чи бібліотека була завантажена, як очікувалося).

Підтримайте HackTricks

Last updated