Windows Local Privilege Escalation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Якщо ви не знаєте, що таке токени доступу Windows, прочитайте наступну сторінку перед продовженням:
Access TokensПеревірте наступну сторінку для отримання додаткової інформації про ACL - DACL/SACL/ACE:
ACLs - DACLs/SACLs/ACEsЯкщо ви не знаєте, що таке рівні цілісності в Windows, вам слід прочитати наступну сторінку перед продовженням:
Integrity LevelsЄ різні речі в Windows, які можуть перешкоджати вам перераховувати систему, запускати виконувані файли або навіть виявляти вашу діяльність. Вам слід прочитати наступну сторінку та перерахувати всі ці механізми захисту перед початком перерахунку підвищення привілеїв:
Windows Security ControlsПеревірте, чи має версія Windows якісь відомі вразливості (також перевірте застосовані патчі).
Цей сайт корисний для пошуку детальної інформації про вразливості безпеки Microsoft. Ця база даних містить більше 4,700 вразливостей безпеки, що демонструє масштабну поверхню атаки, яку представляє середовище Windows.
На системі
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeas має вбудований watson)
Локально з інформацією про систему
Github репозиторії експлойтів:
Чи зберігаються якісь облікові дані/соковита інформація в змінних середовища?
Ви можете дізнатися, як це увімкнути за посиланням https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
Деталі виконання конвеєра PowerShell записуються, охоплюючи виконані команди, виклики команд та частини скриптів. Однак повні деталі виконання та результати виходу можуть не бути зафіксовані.
Щоб увімкнути це, дотримуйтесь інструкцій у розділі "Файли транскрипції" документації, обираючи "Module Logging" замість "Powershell Transcription".
Щоб переглянути останні 15 подій з журналів PowerShell, ви можете виконати:
Повний запис активності та вмісту виконання скрипта фіксується, що забезпечує документування кожного блоку коду під час його виконання. Цей процес зберігає всебічний аудит кожної активності, що є цінним для судової експертизи та аналізу злочинної поведінки. Документуючи всю активність під час виконання, надаються детальні відомості про процес.
Логування подій для Script Block можна знайти в Windows Event Viewer за шляхом: Application and Services Logs > Microsoft > Windows > PowerShell > Operational. Щоб переглянути останні 20 подій, ви можете використати:
Ви можете скомпрометувати систему, якщо оновлення не запитуються за допомогою httpS, а за допомогою http.
Ви починаєте з перевірки, чи використовує мережа оновлення WSUS без SSL, запустивши наступне:
Якщо ви отримаєте відповідь, наприклад:
І якщо HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
дорівнює 1
.
Тоді, це експлуатовано. Якщо останній реєстр дорівнює 0, то запис WSUS буде проігноровано.
Для експлуатації цих вразливостей ви можете використовувати інструменти, такі як: Wsuxploit, pyWSUS - це скрипти експлойтів MiTM, які дозволяють ввести 'фальшиві' оновлення в трафік WSUS без SSL.
Прочитайте дослідження тут:
WSUS CVE-2020-1013
Прочитайте повний звіт тут. В основному, це недолік, який експлуатує цей баг:
Якщо ми маємо можливість змінювати наш локальний проксі, і Windows Updates використовує проксі, налаштований у параметрах Internet Explorer, ми, отже, маємо можливість запускати PyWSUS локально, щоб перехоплювати наш власний трафік і виконувати код як підвищений користувач на нашому активі.
Більше того, оскільки служба WSUS використовує налаштування поточного користувача, вона також використовуватиме його сховище сертифікатів. Якщо ми згенеруємо самопідписаний сертифікат для імені хоста WSUS і додамо цей сертифікат у сховище сертифікатів поточного користувача, ми зможемо перехоплювати як HTTP, так і HTTPS трафік WSUS. WSUS не використовує механізми, подібні до HSTS, для реалізації валідації типу довіри при першому використанні на сертифікаті. Якщо сертифікат, що представляється, довіряється користувачем і має правильне ім'я хоста, він буде прийнятий службою.
Ви можете експлуатувати цю вразливість, використовуючи інструмент WSUSpicious (як тільки він буде звільнений).
В локальному підвищенні привілеїв існує вразливість у середовищах домену Windows за певних умов. Ці умови включають середовища, де підписування LDAP не є обов'язковим, користувачі мають самостійні права, що дозволяють їм налаштовувати обмежену делегацію на основі ресурсів (RBCD), та можливість для користувачів створювати комп'ютери в домені. Важливо зазначити, що ці вимоги виконуються за допомогою налаштувань за замовчуванням.
Знайдіть експлойт у https://github.com/Dec0ne/KrbRelayUp
Для отримання додаткової інформації про хід атаки перевірте https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
Якщо ці 2 реєстри увімкнені (значення 0x1), тоді користувачі з будь-якими привілеями можуть встановлювати (виконувати) *.msi
файли як NT AUTHORITY\SYSTEM.
Якщо у вас є сесія meterpreter, ви можете автоматизувати цю техніку, використовуючи модуль exploit/windows/local/always_install_elevated
Використовуйте команду Write-UserAddMSI
з power-up, щоб створити в поточному каталозі Windows MSI бінарний файл для ескалації привілеїв. Цей скрипт генерує попередньо скомпільований MSI інсталятор, який запитує додавання користувача/групи (тому вам знадобиться доступ GIU):
Просто виконайте створений бінар для ескалації привілеїв.
Прочитайте цей посібник, щоб дізнатися, як створити MSI обгортку за допомогою цих інструментів. Зверніть увагу, що ви можете обернути файл ".bat", якщо ви просто хочете виконати командні рядки.
MSI WrapperЗгенеруйте з Cobalt Strike або Metasploit новий Windows EXE TCP payload у C:\privesc\beacon.exe
Відкрийте Visual Studio, виберіть Створити новий проект і введіть "installer" у полі пошуку. Виберіть проект Setup Wizard і натисніть Далі.
Дайте проекту ім'я, наприклад, AlwaysPrivesc, використовуйте C:\privesc
для розташування, виберіть розмістити рішення та проект в одній директорії, і натисніть Створити.
Продовжуйте натискати Далі, поки не дійдете до кроку 3 з 4 (виберіть файли для включення). Натисніть Додати і виберіть payload Beacon, який ви щойно згенерували. Потім натисніть Готово.
Виділіть проект AlwaysPrivesc у Solution Explorer і в Властивостях змініть TargetPlatform з x86 на x64.
Є й інші властивості, які ви можете змінити, такі як Автор та Виробник, що можуть зробити встановлений додаток більш легітимним.
Клацніть правою кнопкою миші на проекті та виберіть Перегляд > Користувацькі дії.
Клацніть правою кнопкою миші на Встановити та виберіть Додати користувацьку дію.
Двічі клацніть на Папка програми, виберіть ваш файл beacon.exe і натисніть ОК. Це забезпечить виконання payload beacon, як тільки інсталятор буде запущено.
У Властивостях користувацької дії змініть Run64Bit на True.
Нарешті, зберіть його.
Якщо з'явиться попередження File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
, переконайтеся, що ви встановили платформу на x64.
Щоб виконати встановлення шкідливого .msi
файлу у фоновому режимі:
Щоб експлуатувати цю вразливість, ви можете використовувати: exploit/windows/local/always_install_elevated
Ці налаштування визначають, що реєструється, тому вам слід звернути увагу
Windows Event Forwarding, цікаво знати, куди надсилаються журнали
LAPS призначений для управління паролями локальних адміністраторів, забезпечуючи, щоб кожен пароль був унікальним, випадковим і регулярно оновлювався на комп'ютерах, приєднаних до домену. Ці паролі безпечно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні дозволи через ACL, що дозволяє їм переглядати паролі локальних адміністраторів, якщо це дозволено.
LAPSЯкщо активний, паролі у відкритому тексті зберігаються в LSASS (Служба підсистеми локальної безпеки). Більше інформації про WDigest на цій сторінці.
Починаючи з Windows 8.1, Microsoft впровадила покращений захист для Локальної служби безпеки (LSA), щоб блокувати спроби ненадійних процесів читати її пам'ять або впроваджувати код, додатково захищаючи систему. Більше інформації про захист LSA тут.
Credential Guard був представлений у Windows 10. Його мета - захистити облікові дані, збережені на пристрої, від загроз, таких як атаки pass-the-hash. | Більше інформації про Credentials Guard тут.
Облікові дані домену автентифікуються Локальним органом безпеки (LSA) і використовуються компонентами операційної системи. Коли дані входу користувача автентифікуються зареєстрованим пакетом безпеки, облікові дані домену для користувача зазвичай встановлюються. Більше інформації про кешовані облікові дані тут.
Вам слід перевірити, чи є у будь-яких груп, до яких ви належите, цікаві дозволи.
Якщо ви належите до якоїсь привілейованої групи, ви можете мати можливість ескалації привілеїв. Дізнайтеся про привілейовані групи та як їх зловживати для ескалації привілеїв тут:
Privileged GroupsДізнайтеся більше про те, що таке токен на цій сторінці: Windows Tokens. Перегляньте наступну сторінку, щоб дізнатися про цікаві токени та як їх зловживати:
Abusing TokensПо-перше, перерахування процесів перевіряє наявність паролів у командному рядку процесу. Перевірте, чи можете ви перезаписати деякий запущений бінарний файл або чи маєте ви права на запис у папку з бінарними файлами для можливого використання DLL Hijacking attacks:
Завжди перевіряйте наявність можливих electron/cef/chromium дебагерів які працюють, ви можете зловживати цим для ескалації привілеїв.
Перевірка дозволів бінарних файлів процесів
Перевірка дозволів папок бінарних файлів процесів (DLL Hijacking)
Ви можете створити дамп пам'яті запущеного процесу, використовуючи procdump з sysinternals. Служби, такі як FTP, мають облікові дані у відкритому тексті в пам'яті, спробуйте зробити дамп пам'яті та прочитати облікові дані.
Додатки, що працюють як SYSTEM, можуть дозволити користувачу запустити CMD або переглядати каталоги.
Приклад: "Довідка та підтримка Windows" (Windows + F1), шукайте "командний рядок", натисніть "Натисніть, щоб відкрити командний рядок"
Отримати список служб:
Ви можете використовувати sc для отримання інформації про службу
Рекомендується мати бінарний файл accesschk від Sysinternals, щоб перевірити необхідний рівень привілеїв для кожної служби.
Рекомендується перевірити, чи можуть "Аутентифіковані користувачі" змінювати будь-яку службу:
Ви можете завантажити accesschk.exe для XP звідси
Якщо ви отримуєте цю помилку (наприклад, з SSDPSRV):
Сталася системна помилка 1058. &#xNAN;Tлужба не може бути запущена, або тому, що вона вимкнена, або тому, що з нею не пов'язано жодних увімкнених пристроїв.
Ви можете увімкнути її, використовуючи
Врахуйте, що служба upnphost залежить від SSDPSRV для роботи (для XP SP1)
Ще один обхідний шлях цієї проблеми - виконати:
У сценарії, коли група "Аутентифіковані користувачі" має SERVICE_ALL_ACCESS на службу, можливе модифікування виконуваного бінарного файлу служби. Щоб змінити та виконати sc:
Привілеї можуть бути підвищені через різні дозволи:
SERVICE_CHANGE_CONFIG: Дозволяє переналаштування бінарного файлу служби.
WRITE_DAC: Дозволяє переналаштування дозволів, що веде до можливості змінювати конфігурації служби.
WRITE_OWNER: Дозволяє отримання прав власності та переналаштування дозволів.
GENERIC_WRITE: Спадкує можливість змінювати конфігурації служби.
GENERIC_ALL: Також спадкує можливість змінювати конфігурації служби.
Для виявлення та експлуатації цієї вразливості можна використовувати exploit/windows/local/service_permissions.
Перевірте, чи можете ви змінити бінарний файл, який виконується службою або чи маєте ви дозволи на запис у папці, де знаходиться бінарний файл (DLL Hijacking). Ви можете отримати кожен бінарний файл, який виконується службою, використовуючи wmic (не в system32) і перевірити свої дозволи, використовуючи icacls:
Ви також можете використовувати sc та icacls:
Вам слід перевірити, чи можете ви змінити будь-який реєстр служби. Ви можете перевірити свої дозволи над реєстром служби, виконавши:
Слід перевірити, чи Authenticated Users або NT AUTHORITY\INTERACTIVE мають FullControl
дозволи. Якщо так, бінарний файл, виконуваний службою, може бути змінений.
Щоб змінити шлях до виконуваного бінарного файлу:
Якщо у вас є цей дозвіл над реєстром, це означає, що ви можете створювати підреєстри з цього. У випадку з Windows службами це досить для виконання довільного коду:
AppendData/AddSubdirectory permission over service registryЯкщо шлях до виконуваного файлу не в лапках, Windows спробує виконати кожен закінчення перед пробілом.
Наприклад, для шляху C:\Program Files\Some Folder\Service.exe Windows спробує виконати:
Список всіх непозначених шляхів служб, за винятком тих, що належать вбудованим службам Windows:
Ви можете виявити та експлуатувати цю вразливість за допомогою metasploit: exploit/windows/local/trusted\_service\_path
Ви можете вручну створити двійковий файл служби за допомогою metasploit:
Windows дозволяє користувачам вказувати дії, які потрібно виконати, якщо служба зазнає невдачі. Цю функцію можна налаштувати на вказівку на бінарний файл. Якщо цей бінарний файл можна замінити, можлива ескалація привілеїв. Більше деталей можна знайти в офіційній документації.
Перевірте дозволи бінарних файлів (можливо, ви зможете переписати один і ескалувати привілеї) та папок (DLL Hijacking).
Перевірте, чи можете ви змінити якийсь конфігураційний файл, щоб прочитати якийсь спеціальний файл, або чи можете ви змінити якийсь бінарний файл, який буде виконаний обліковим записом адміністратора (schedtasks).
Спосіб знайти слабкі права на папки/файли в системі - це зробити:
Перевірте, чи можете ви перезаписати деякий реєстр або двійковий файл, який буде виконаний іншим користувачем. Прочитайте наступну сторінку, щоб дізнатися більше про цікаві місця автозапуску для ескалації привілеїв:
Privilege Escalation with AutorunsШукайте можливі драйвери третьої сторони, які є дивними/вразливими
Якщо у вас є права на запис у папці, що знаходиться в PATH, ви можете перехопити DLL, завантажену процесом, і ескалювати привілеї.
Перевірте права доступу до всіх папок у PATH:
Для отримання додаткової інформації про те, як зловживати цим перевіркою:
Writable Sys Path +Dll Hijacking PrivescПеревірте наявність інших відомих комп'ютерів, закодованих у файлі hosts
Перевірте обмежені сервіси ззовні
Перевірте цю сторінку для команд, пов'язаних з брандмауером (перегляд правил, створення правил, вимкнення, вимкнення...)
Більше команд для перерахунку мережі тут
Бінарний bash.exe
також можна знайти в C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Якщо ви отримаєте права root, ви зможете прослуховувати будь-який порт (перший раз, коли ви використовуєте nc.exe
для прослуховування порту, він запитає через GUI, чи слід дозволити nc
через брандмауер).
Щоб легко запустити bash як root, ви можете спробувати --default-user root
Ви можете дослідити файлову систему WSL
у папці C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
З https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault Сховище Windows зберігає облікові дані користувачів для серверів, веб-сайтів та інших програм, які Windows може автоматично входити в систему. На перший погляд, це може виглядати так, ніби користувачі можуть зберігати свої облікові дані Facebook, Twitter, Gmail тощо, щоб автоматично входити через браузери. Але це не так.
Сховище Windows зберігає облікові дані, за якими Windows може автоматично входити в систему, що означає, що будь-яка Windows програма, яка потребує облікових даних для доступу до ресурсу (сервера або веб-сайту) може використовувати цей Менеджер облікових даних та Сховище Windows і використовувати надані облікові дані замість того, щоб користувачі постійно вводили ім'я користувача та пароль.
Якщо програми не взаємодіють з Менеджером облікових даних, я не думаю, що вони можуть використовувати облікові дані для даного ресурсу. Тож, якщо ваша програма хоче використовувати сховище, вона повинна якимось чином взаємодіяти з менеджером облікових даних і запитувати облікові дані для цього ресурсу з за замовчуванням сховища.
Використовуйте cmdkey
, щоб перерахувати збережені облікові дані на машині.
Тоді ви можете використовувати runas
з параметрами /savecred
, щоб використовувати збережені облікові дані. Наступний приклад викликає віддалений бінарний файл через SMB-спільний доступ.
Використання runas
з наданим набором облікових даних.
Зверніть увагу, що mimikatz, lazagne, credentialfileview, VaultPasswordView або з Empire Powershells module.
API захисту даних (DPAPI) надає метод симетричного шифрування даних, переважно використовується в операційній системі Windows для симетричного шифрування асиметричних приватних ключів. Це шифрування використовує секрети користувача або системи для значного внеску в ентропію.
DPAPI дозволяє шифрування ключів за допомогою симетричного ключа, який отримується з секретів входу користувача. У сценаріях, що стосуються шифрування системи, він використовує секрети аутентифікації домену системи.
Зашифровані RSA ключі користувача, за допомогою DPAPI, зберігаються в каталозі %APPDATA%\Microsoft\Protect\{SID}
, де {SID}
представляє ідентифікатор безпеки користувача. Ключ DPAPI, розташований разом з майстер-ключем, який захищає приватні ключі користувача в одному файлі, зазвичай складається з 64 байтів випадкових даних. (Важливо зазначити, що доступ до цього каталогу обмежений, що заважає перерахунку його вмісту за допомогою команди dir
у CMD, хоча його можна перерахувати через PowerShell).
Ви можете використовувати mimikatz module dpapi::masterkey
з відповідними аргументами (/pvk
або /rpc
), щоб розшифрувати його.
Файли облікових даних, захищені головним паролем, зазвичай розташовані в:
Ви можете використовувати mimikatz module dpapi::cred
з відповідним /masterkey
для розшифрування.
Ви можете витягнути багато DPAPI masterkeys з пам'яті за допомогою модуля sekurlsa::dpapi
(якщо ви є root).
Облікові дані PowerShell часто використовуються для скриптів та автоматизації як спосіб зберігати зашифровані облікові дані зручно. Облікові дані захищені за допомогою DPAPI, що зазвичай означає, що їх можна розшифрувати лише тим же користувачем на тому ж комп'ютері, на якому вони були створені.
Щоб розшифрувати облікові дані PS з файлу, що їх містить, ви можете зробити:
Ви можете знайти їх за адресою HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
та в HKCU\Software\Microsoft\Terminal Server Client\Servers\
Використовуйте модуль Mimikatz dpapi::rdg
з відповідним /masterkey
, щоб дешифрувати будь-які .rdg файли
Ви можете витягнути багато DPAPI masterkeys з пам'яті за допомогою модуля Mimikatz sekurlsa::dpapi
Люди часто використовують додаток StickyNotes на робочих станціях Windows, щоб зберігати паролі та іншу інформацію, не усвідомлюючи, що це файл бази даних. Цей файл знаходиться за адресою C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
і завжди варто його шукати та перевіряти.
Зверніть увагу, що для відновлення паролів з AppCmd.exe вам потрібно бути адміністратором і працювати під високим рівнем цілісності.
AppCmd.exe знаходиться в каталозі %systemroot%\system32\inetsrv\
.
Якщо цей файл існує, то можливо, що деякі облікові дані були налаштовані і можуть бути відновлені.
Цей код був витягнутий з PowerUP:
Перевірте, чи існує C:\Windows\CCM\SCClient.exe
.
Інсталятори виконуються з привілеями SYSTEM, багато з них вразливі до DLL Sideloading (Інформація з https://github.com/enjoiz/Privesc).
SSH приватні ключі можуть зберігатися в реєстрі за ключем HKCU\Software\OpenSSH\Agent\Keys
, тому вам слід перевірити, чи є там щось цікаве:
Якщо ви знайдете будь-який запис у цьому шляху, це, ймовірно, буде збережений SSH-ключ. Він зберігається в зашифрованому вигляді, але може бути легко розшифрований за допомогою https://github.com/ropnop/windows_sshagent_extract. Більше інформації про цю техніку тут: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
Якщо служба ssh-agent
не працює і ви хочете, щоб вона автоматично запускалася при завантаженні, виконайте:
Схоже, що ця техніка більше не дійсна. Я намагався створити кілька ssh ключів, додати їх за допомогою ssh-add
і увійти через ssh на машину. Реєстр HKCU\Software\OpenSSH\Agent\Keys не існує, а procmon не виявив використання dpapi.dll
під час асиметричної аутентифікації ключа.
Ви також можете шукати ці файли, використовуючи metasploit: post/windows/gather/enum_unattend
Приклад вмісту:
Шукайте файл під назвою SiteList.xml
Раніше була доступна функція, яка дозволяла розгортання користувацьких локальних облікових записів адміністратора на групі машин через параметри групової політики (GPP). Однак цей метод мав значні недоліки в безпеці. По-перше, об'єкти групової політики (GPO), збережені у вигляді XML-файлів у SYSVOL, могли бути доступні будь-якому користувачу домену. По-друге, паролі в цих GPP, зашифровані за допомогою AES256 з використанням публічно задокументованого ключа за замовчуванням, могли бути розшифровані будь-яким автентифікованим користувачем. Це становило серйозний ризик, оскільки могло дозволити користувачам отримати підвищені привілеї.
Щоб зменшити цей ризик, була розроблена функція для сканування локально кешованих GPP-файлів, що містять поле "cpassword", яке не є порожнім. Після знаходження такого файлу функція розшифровує пароль і повертає користувацький об'єкт PowerShell. Цей об'єкт містить деталі про GPP та місцезнаходження файлу, що допомагає в ідентифікації та усуненні цієї вразливості в безпеці.
Шукайте в C:\ProgramData\Microsoft\Group Policy\history
або в C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (до W Vista) ці файли:
Groups.xml
Services.xml
Scheduledtasks.xml
DataSources.xml
Printers.xml
Drives.xml
Щоб розшифрувати cPassword:
Використання crackmapexec для отримання паролів:
Приклад web.config з обліковими даними:
Ви завжди можете попросити користувача ввести його облікові дані або навіть облікові дані іншого користувача, якщо вважаєте, що він може їх знати (зверніть увагу, що питати клієнта безпосередньо про облікові дані дійсно ризиковано):
Відомі файли, які деякий час тому містили паролі у відкритому вигляді або Base64
Шукайте всі запропоновані файли:
Вам також слід перевірити Кошик на наявність облікових даних всередині нього
Щоб відновити паролі, збережені кількома програмами, ви можете використовувати: http://www.nirsoft.net/password_recovery_tools.html
Інші можливі ключі реєстру з обліковими даними
Витягніть ключі openssh з реєстру.
Вам слід перевірити бази даних, де зберігаються паролі з Chrome або Firefox. Також перевірте історію, закладки та улюблені сторінки браузерів, можливо, деякі паролі зберігаються там.
Інструменти для витягування паролів з браузерів:
Mimikatz: dpapi::chrome
Модель об'єктів компонентів (COM) - це технологія, вбудована в операційну систему Windows, яка дозволяє взаємодію між програмними компонентами різних мов. Кожен компонент COM ідентифікується за допомогою ідентифікатора класу (CLSID), а кожен компонент надає функціональність через один або кілька інтерфейсів, які ідентифікуються за допомогою ідентифікаторів інтерфейсу (IIDs).
Класи та інтерфейси COM визначені в реєстрі під HKEY_CLASSES_ROOT\CLSID та HKEY_CLASSES_ROOT\Interface відповідно. Цей реєстр створюється шляхом об'єднання HKEY_LOCAL_MACHINE\Software\Classes + HKEY_CURRENT_USER\Software\Classes = HKEY_CLASSES_ROOT.
Всередині CLSID цього реєстру ви можете знайти дочірній реєстр InProcServer32, який містить значення за замовчуванням, що вказує на DLL, та значення під назвою ThreadingModel, яке може бути Apartment (однопотоковий), Free (багатопотоковий), Both (один або кілька) або Neutral (нейтральний до потоків).
В основному, якщо ви можете перезаписати будь-які з DLL, які будуть виконані, ви могли б підвищити привілеї, якщо ця DLL буде виконана іншим користувачем.
Щоб дізнатися, як зловмисники використовують COM Hijacking як механізм стійкості, перевірте:
COM HijackingШукайте вміст файлів
Шукати файл з певною назвою
Шукайте в реєстрі імена ключів та паролі
MSF-Credentials Plugin є плагіном msf, який я створив, щоб автоматично виконувати кожен модуль POST metasploit, що шукає облікові дані всередині жертви. Winpeas автоматично шукає всі файли, що містять паролі, згадані на цій сторінці. Lazagne є ще одним чудовим інструментом для витягування паролів з системи.
Інструмент SessionGopher шукає сесії, імена користувачів та паролі кількох інструментів, які зберігають ці дані у відкритому тексті (PuTTY, WinSCP, FileZilla, SuperPuTTY та RDP)
Уявіть, що процес, що працює як SYSTEM, відкриває новий процес (OpenProcess()
) з повним доступом. Той же процес також створює новий процес (CreateProcess()
) з низькими привілеями, але успадковує всі відкриті дескриптори основного процесу.
Тоді, якщо у вас є повний доступ до процесу з низькими привілеями, ви можете захопити відкритий дескриптор до привілейованого процесу, створеного з OpenProcess()
і впровадити shellcode.
Прочитайте цей приклад для отримання додаткової інформації про те, як виявити та експлуатувати цю вразливість.
Прочитайте цей інший пост для більш повного пояснення про те, як тестувати та зловживати більш відкритими дескрипторами процесів і потоків, успадкованими з різними рівнями дозволів (не тільки з повним доступом).
Сегменти спільної пам'яті, які називаються трубами, дозволяють процесам спілкуватися та передавати дані.
Windows надає функцію, звану Named Pipes, що дозволяє несумісним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру клієнт/сервер, з ролями, визначеними як сервер іменованих труб та клієнт іменованих труб.
Коли дані надсилаються через трубу клієнтом, сервер, який налаштував трубу, має можливість прийняти особистість клієнта, якщо у нього є необхідні SeImpersonate права. Виявлення привілейованого процесу, який спілкується через трубу, яку ви можете імітувати, надає можливість отримати вищі привілеї, прийнявши особистість цього процесу, як тільки він взаємодіє з трубою, яку ви створили. Для інструкцій щодо виконання такого нападу корисні посібники можна знайти тут та тут.
Також наступний інструмент дозволяє перехоплювати комунікацію іменованих труб за допомогою інструменту, як burp: https://github.com/gabriel-sztejnworcel/pipe-intercept і цей інструмент дозволяє перерахувати та переглянути всі труби для пошуку privescs https://github.com/cyberark/PipeViewer
Коли ви отримуєте оболонку як користувач, можуть бути заплановані завдання або інші процеси, які передають облікові дані в командному рядку. Скрипт нижче захоплює командні рядки процесів кожні дві секунди та порівнює поточний стан з попереднім, виводячи будь-які відмінності.
Якщо у вас є доступ до графічного інтерфейсу (через консоль або RDP) і UAC увімкнено, в деяких версіях Microsoft Windows можливо запустити термінал або будь-який інший процес, такий як "NT\AUTHORITY SYSTEM", з непривабливого користувача.
Це дозволяє підвищити привілеї та обійти UAC одночасно з тією ж вразливістю. Крім того, немає необхідності нічого встановлювати, а бінарний файл, що використовується під час процесу, підписаний і виданий Microsoft.
Деякі з уражених систем такі:
Щоб використати цю вразливість, необхідно виконати наступні кроки:
Ви маєте всі необхідні файли та інформацію в наступному репозиторії GitHub:
https://github.com/jas502n/CVE-2019-1388
Прочитайте це, щоб дізнатися про рівні цілісності:
Integrity LevelsПотім прочитайте це, щоб дізнатися про UAC та обходи UAC:
UAC - User Account ControlЯкщо ви вже працюєте на процесі з високим рівнем цілісності, перехід до SYSTEM може бути простим, просто створивши та виконуючи новий сервіс:
З процесу високої цілісності ви можете спробувати увімкнути записи реєстру AlwaysInstallElevated та встановити зворотний шелл, використовуючи обгортку .msi. Більше інформації про залучені ключі реєстру та як встановити пакет .msi тут.
Ви можете знайти код тут.
Якщо у вас є ці токен-привілеї (ймовірно, ви знайдете це в уже існуючому процесі високої цілісності), ви зможете відкрити майже будь-який процес (не захищені процеси) з привілеєм SeDebug, скопіювати токен процесу та створити процес з цим токеном. Використання цієї техніки зазвичай вибирає будь-який процес, що працює як SYSTEM з усіма токен-привілеями (так, ви можете знайти процеси SYSTEM без усіх токен-привілеїв). Ви можете знайти приклад коду, що виконує запропоновану техніку тут.
Цю техніку використовує meterpreter для ескалації в getsystem
. Техніка полягає в створенні каналу, а потім створенні/зловживанні службою для запису в цей канал. Тоді сервер, що створив канал, використовуючи привілей SeImpersonate
, зможе імпсонувати токен клієнта каналу (служба), отримуючи привілеї SYSTEM.
Якщо ви хочете дізнатися більше про іменовані канали, вам слід прочитати це.
Якщо ви хочете прочитати приклад як перейти з високої цілісності до System, використовуючи іменовані канали, вам слід прочитати це.
Якщо вам вдасться викрасти dll, що завантажується процесом, що працює як SYSTEM, ви зможете виконати довільний код з цими дозволами. Тому Dll Hijacking також корисний для цього виду ескалації привілеїв, і, більше того, якщо значно легше досягти з процесу високої цілісності, оскільки він матиме права на запис у папки, що використовуються для завантаження dll. Ви можете дізнатися більше про Dll hijacking тут.
Читати: https://github.com/itm4n/FullPowers
Найкращий інструмент для пошуку векторів ескалації локальних привілеїв Windows: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Перевірка на неправильні налаштування та чутливі файли (перевірте тут). Виявлено.
JAWS -- Перевірка на деякі можливі неправильні налаштування та збір інформації (перевірте тут).
privesc -- Перевірка на неправильні налаштування
SessionGopher -- Витягує інформацію про збережені сесії PuTTY, WinSCP, SuperPuTTY, FileZilla та RDP. Використовуйте -Thorough в локальному режимі.
Invoke-WCMDump -- Витягує облікові дані з Диспетчера облікових даних. Виявлено.
DomainPasswordSpray -- Розпилення зібраних паролів по домену
Inveigh -- Inveigh є спуфером PowerShell ADIDNS/LLMNR/mDNS/NBNS та інструментом "людина посередині".
WindowsEnum -- Основна перевірка привілеїв Windows
Sherlock ~~~~ -- Пошук відомих вразливостей привілеїв (ЗАСТОСУВАННЯ для Watson)
WINspect -- Локальні перевірки (Потрібні права адміністратора)
Exe
Watson -- Пошук відомих вразливостей привілеїв (потрібно скомпілювати за допомогою VisualStudio) (попередньо скомпільований)
SeatBelt -- Перераховує хост, шукаючи неправильні налаштування (більше інструмент збору інформації, ніж привілеїв) (потрібно скомпілювати) (попередньо скомпільований)
LaZagne -- Витягує облікові дані з багатьох програм (попередньо скомпільований exe в github)
SharpUP -- Порт PowerUp на C#
Beroot ~~~~ -- Перевірка на неправильні налаштування (виконуваний попередньо скомпільований в github). Не рекомендується. Погано працює в Win10.
Windows-Privesc-Check -- Перевірка на можливі неправильні налаштування (exe з python). Не рекомендується. Погано працює в Win10.
Bat
winPEASbat -- Інструмент, створений на основі цього посту (не потребує accesschk для правильної роботи, але може його використовувати).
Local
Windows-Exploit-Suggester -- Читає вихідні дані systeminfo та рекомендує робочі експлойти (локальний python) Windows Exploit Suggester Next Generation -- Читає вихідні дані systeminfo та рекомендує робочі експлойти (локальний python)
Meterpreter
multi/recon/local_exploit_suggestor
Вам потрібно скомпілювати проект, використовуючи правильну версію .NET (дивіться це). Щоб побачити встановлену версію .NET на хості жертви, ви можете зробити:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)