Writable Sys Path +Dll Hijacking Privesc

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Вступ

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

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

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

pageDll Hijacking

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

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

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

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

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

Пропущені Dlls

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

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

СлужбаDllCMD line

Планувальник завдань (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.

Ви можете спробувати використати будь-який з цих прикладів. Ви можете запускати вразливості, такі як: отримати обернену оболонку, додати користувача, виконати маяк...

Зверніть увагу, що не всі служби працюють з NT AUTHORITY\SYSTEM, деякі також працюють з NT AUTHORITY\LOCAL SERVICE, який має менше привілеїв, і ви не зможете створити нового користувача, використовуючи його дозволи. Однак у цього користувача є привілеї seImpersonate, тому ви можете використовувати набір інструментів potato для підвищення привілеїв. Таким чином, у цьому випадку обернена оболонка є кращим варіантом, ніж спроба створення користувача.

На момент написання служба Планувальник завдань працює з Nt AUTHORITY\SYSTEM.

Після створення зловмисного Dll (у моєму випадку я використовував x64 обернену оболонку і отримав оболонку, але захисник вбив її, оскільки вона була від msfvenom), збережіть її в записувану папку System Path з ім'ям WptsExtensions.dll та перезапустіть комп'ютер (або перезапустіть службу або виконайте будь-що, щоб перезапустити порушену службу/програму).

Коли служба буде перезапущена, dll повинен бути завантажений та виконаний (ви можете повторно використовувати трюк з procmon, щоб перевірити, чи була бібліотека завантажена, як очікувалося).

Last updated