← Back to list

Підвищення привілеїв (Privilege Escalation)

(за матеріалами Hack The Box Academy, Getting Started)

Fl4g Hunt3r Project · 2026-01-25 14:31 · 1 claps · 7.4 min read
#кібербезпека #cybersecurity #penetration-testing #privesc #hackthebox
Open on Medium ↗
Wiki topics: 🔒 · Cybersecurity

Підвищення привілеїв (Privilege Escalation)

(за матеріалами Hack The Box Academy, Getting Started)

Source: pexels.com

Source: pexels.com

Наш початковий доступ до віддаленого сервера зазвичай відбувається в контексті користувача з низькими привілеями, що не дає нам повного контролю над системою. Щоб отримати повний доступ, нам потрібно знайти внутрішню або локальну вразливість, яка дозволить підвищити наші права до рівня root у Linux або administrator/SYSTEM у Windows. Розглянемо деякі поширені методи ескалації привілеїв.

Чек-листи для PrivEsc📋

Щойно ми отримуємо початковий доступ, маємо провести ретельне перерахування (enumeration) системи, щоб знайти потенційні вразливості для експлуатації. В інтернеті є багато чек-листів і шпаргалок із набором перевірок та відповідних команд.

  • **HackTricks** — чудовий ресурс, який містить детальні чек-листи для локального підвищення привілеїв як у Linux, так і у Windows.
  • **PayloadsAllTheThings** — ще один чудовий репозиторій із аналогічними списками.

Ми маємо експериментувати з різними командами та техніками, щоб зрозуміти слабкі місця, які можуть призвести до захоплення повного контролю над системою. 🔍🧠

Скрипти для автоматичного перерахування (Enumeration Scripts) 🤖

Багато команд із вищезгаданих чек-листів можна автоматизувати за допомогою скриптів. Вони проходять по системі, запускають стандартні перевірки та повертають звіт про цікаві знахідки.

Популярні скрипти:

  • Linux: LinEnum, linuxprivchecker.
  • Windows: Seatbelt, JAWS.
  • Універсальні: Privilege Escalation Awesome Scripts SUITE (PEASS) — це набір скриптів (LinPEAS для Linux та WinPEAS для Windows), які постійно оновлюються та вважаються одними з найкращих в індустрії. 🏆

Важливо: Ці скрипти запускають величезну кількість команд одночасно, створюючи багато шуму, що може активувати антивірус або системи безпеки (EDR/SIEM), які моніторять такі події. У деяких випадках краще проводити перерахування вручну, щоб залишатися непомітним.

Приклад запуску LinPEAS

Давайте поглянемо на приклад запуску скрипта LinPEAS на Linux:

user@host[/home]$ ./linpeas.sh
...SNIP...
Linux Privesc Checklist: https://book.hacktricks.xyz/linux-unix/linux-privilege-escalation-checklist
 LEYEND:
  RED/YELLOW: 99% a PE vector (99% вектор підвищення привілеїв)
  RED: You must take a look at it (Варто звернути увагу)
  LightCyan: Users with console (Користувачі з консоллю)
  Blue: Users without console & mounted devs (Користувачі без консолі та змонтовані пристрої)
  Green: Common things (Загальні речі: користувачі, групи, SUID/SGID, крони)
  LightMangenta: Your username (Ваше ім'я користувача)
====================================( Basic information )=====================================
OS: Linux version 3.9.0-73-generic
User & Groups: uid=33(www-data) gid=33(www-data) groups=33(www-data)
...SNIP...

Як бачимо, скрипт збирає інформацію та структурує її у зручний звіт. Далі ми обговоримо конкретні вразливості, на які варто звертати увагу у виводі таких скриптів. 📑✨

Експлойти ядра (Kernel Exploits) 🧠💥

Кожного разу, коли ми стикаємося із сервером, що працює на застарілій операційній системі, ми маємо перевірити наявність потенційних вразливостей ядра. Якщо сервер не оновлюється та не отримує останні патчі безпеки, він, найімовірніше, вразливий до специфічних кернел-експлойтів, характерних для непропатчених версій Linux та Windows.

Наприклад, у попередньому прикладі скрипт показав версію Linux — 3.9.0–73-generic. Якщо ми загуглимо експлойти для цієї версії або скористаємося утилітою searchsploit, то знайдемо CVE-2016-5195, також відому як DirtyCow. Ми можемо знайти код цього експлойту, завантажити його та запустити на сервері, щоб отримати права root.

Той самий концепт стосується і Windows: існує безліч вразливостей у застарілих версіях цієї ОС, які можна використовувати для підвищення привілеїв.

Важливо: Слід пам’ятати, що експлойти ядра можуть призвести до нестабільності системи. Ми маємо бути дуже обережними перед їх запуском на “production” системах (реальних робочих серверах). Найкраще спочатку тестувати їх у лабораторних умовах і запускати на системах клієнта лише за умови чіткого схвалення та координації. ⚠️

Вразливе програмне забезпечення та привілеї користувачів 🔐🛠️

Вразливе ПЗ (Vulnerable Software)

Ще один аспект, на який варто звернути увагу — це встановлене програмне забезпечення. Наприклад, ми можемо використати команду dpkg -l у Linux або переглянути вміст директорії C:\Program Files у Windows, щоб побачити список інстальованих програм. Нам слід шукати публічні експлойти для будь-якого знайденого ПЗ, особливо якщо використовуються застарілі версії з непропатченими вразливостями. 🔍📦

Привілеї користувачів (User Privileges)

Надзвичайно важливо проаналізувати привілеї користувача, під яким ми отримали доступ. Якщо нам дозволено запускати певні команди від імені root (або іншого користувача), ми можемо підвищити свої права до рівня root/system або отримати доступ до іншого облікового запису. Нижче наведені поширені шляхи експлуатації прав користувачів:

  • Sudo
  • SUID
  • Windows Token Privileges

Sudo 🛡️⚙️

Команда sudo в Linux дозволяє виконувати команди від імені іншого користувача. Зазвичай її використовують, щоб дозволити звичайним користувачам запускати специфічні команди (наприклад, tcpdump) або звертатися до захищених директорій без надання повного доступу до облікового запису root.

Ми можемо перевірити свої права sudo командою sudo -l:

user@host[/home]$ sudo -l
[sudo] password for user:
...SNIP...
User user1 may run the fllowing commands on ExampleServer:
    (ALL : ALL) ALL

Вивід вище означає, що ми можемо запускати будь-які команди через sudo. Це дає нам повний контроль, і ми можемо використати команду su з префіксом sudo, щоб миттєво стати root-користувачем.

Зазвичай sudo вимагає пароль. Проте іноді зустрічаються конфігурації, де певні (або всі) застосунки можна запускати без введення пароля:

user@host[/home]$ sudo -l
(user1 : user1) NOPASSWD: /bin/echo

Запис NOPASSWD вказує на те, що команду /bin/echo можна виконати без пароля. Це надзвичайно корисно, якщо ми отримали доступ через RCE і не знаємо пароля користувача. Оскільки в записі вказано user, ми можемо запустити команду від його імені, використовуючи прапорець -u:

user@host[/home]$ sudo -u user1 /bin/echo Hello World!
Hello World!

SUID/SGID Bit Exploitation 🚩

Це один із найпопулярніших векторів у Linux. SUID (Set User ID) — це спеціальний біт дозволу, який дозволяє файлу виконуватися з правами власника файлу (зазвичай root), а не того, хто його запустив. Якщо адмін поставив SUID на щось на кшталт find, vim або cp, можна використати їх для читання файлів /etc/shadow або отримання шелла.

  • Як шукати: find / -perm -u=s -type f 2>/dev/null

Capabilities (Linux) 🛠️

Це більш сучасний і «гранулярний» підхід до прав доступу, який прийшов на зміну SUID. Замість того, щоб давати програмі всі права root, їй дають лише одну конкретну можливість (capability). Наприклад, cap_setuid дозволяє програмі змінювати UID. Якщо вона встановлена на інтерпретатор типу Python, можна легко стати root.

  • Як шукати: getcap -r / 2>/dev/null

Abusing Token Privileges (Windows) 🎟️

У Windows користувачі мають «токени», які визначають їхні можливості.

SeImpersonatePrivilege дозволяє імітувати клієнта після автентифікації. Це класика для атак типу Juicy Potato або PrintSpoofer. Якщо є цей привілей (часто буває у сервісних акаунтів IIS), легко отримати права SYSTEM.

SeBackupPrivilege дозволяє читати будь-який файл у системі, ігноруючи ACL (списки доступу). Можна просто скопіювати кущ реєстру SAM і дістати хеші адміна. 🔓

Path Hijacking (DLL Hijacking / Binary Hijacking) 🛣️

Ця атака базується на тому, як ОС шукає файли для виконання.

  • Linux: Якщо скрипт запускає команду service apache2 restart без повного шляху (/usr/sbin/service), і є право запису в директорію, що стоїть раніше в змінній $PATH, можна підкинути свій шкідливий файл service.
  • Windows (DLL Hijacking): Застосунки часто шукають необхідні DLL-бібліотеки спочатку в папці, де лежить сам .exe. Якщо можна записати туди свою шкідливу DLL, програма виконає її при запуску. 🧬

NFS No_Root_Squash (Linux) 📂

Якщо сервер використовує NFS (Network File System) і в конфігу вказано no_root_squash, то будь-який користувач, який підключився як root зі своєї машини, буде розпізнаний як root на сервері. Тобто монтуємо диск до себе, створюємо там копію /bin/bash з SUID-бітом, і маємо root на сервері.

GTFOBins та LOLBAS 📚🚀

Якщо знайдено програму, яку можна запускати через sudo, наступний крок — перевірити її на спеціальних ресурсах:

  • **GTFOBins** — це кураторський список бінарних файлів Unix, які можна використати для обходу обмежень безпеки. Якщо програма є в цьому списку, там буде готова команда для отримання root-доступу через sudo.
  • **LOLBAS** (Living Off The Land Binaries, Scripts and Libraries) — аналогічний проєкт для Windows. Він містить список легітимних системних файлів, які можна використовувати для завантаження файлів або виконання коду з привілеями адміністратора.

Заплановані завдання (Scheduled Tasks / Cron Jobs) 🗓️⚙️

У Linux та Windows існують методи запуску скриптів через певні проміжки часу для виконання технічних завдань. Наприклад, це може бути антивірусне сканування щогодини або скрипт резервного копіювання, що запускається кожні 30 хвилин.

Зазвичай є два способи використати заплановані завдання (Windows) або Cron Jobs (Linux) для підвищення привілеїв:

  1. Додавання нових запланованих завдань або cron-завдань.
  2. Маніпуляція існуючими завданнями, щоб змусити їх виконати шкідливе ПЗ.

Cron Jobs у Linux 🐧🐚

Найпростіший спосіб — перевірити, чи маємо ми право додавати нові завдання. У Linux розклад завдань зазвичай керується через Cron. Якщо ми маємо права на запис (write permissions) у певні директорії або файли, ми можемо додати власне завдання.

Ось основні місця, які варто перевірити на наявність прав запису:

  • /etc/crontab
  • /etc/cron.d
  • /var/spool/cron/crontabs/root

Якщо ми можемо писати в директорію, яка викликається cron-завданням (або редагувати сам файл розкладу), ми можемо створити Bash-скрипт із командою реверс-шела. Оскільки багато системних завдань виконуються від імені root, наш реверс-шел прилетить до нас із найвищими привілеями. 🎯👑

Викриті облікові дані (Exposed Credentials) 🔓📂

Наступний крок — пошук файлів, доступних для читання, які можуть містити викриті паролі. Це надзвичайно поширене явище для конфігураційних файлів, лог-файлів (журналів подій) та файлів історії команд (bash_history у Linux або PSReadLine у Windows). Скрипти для перерахування, які ми обговорювали на початку, зазвичай автоматично шукають потенційні паролі:

...SNIP...
[+] Searching passwords in config PHP files (Пошук паролів у конфігах PHP)
[+] Finding passwords inside logs (Пошук паролів у логах)
...SNIP...
/var/www/html/config.php: $conn = new mysqli(localhost, 'db_user', 'password123');

Як ми бачимо, пароль до бази даних password123 виявився відкритим. Це дозволяє нам увійти до локальної бази даних MySQL і шукати там цікаву інформацію.

Повторне використання паролів (Password Reuse)

Ми також обов’язково маємо перевірити систему на повторне використання паролів. Системний адміністратор міг використати той самий пароль і для бази даних, і для свого облікового запису в системі. Це може дозволити нам змінити користувача (switch user) на root. Також отримані облікові дані можна спробувати використати для входу на сервер через SSH. 🚀🔐

У Windows цей вектор ще цікавіший через LSA Secrets або SAM database, де паролі зберігаються в хешованому вигляді, але іноді їх можна знайти прямо в скриптах розгортання системи (Unattended installs). 💻

SSH-ключі (SSH Keys) 🗝️🔐

Якщо ми маємо доступ до читання директорії .ssh конкретного користувача, ми можемо знайти його приватні SSH-ключі у файлах /home/user/.ssh/id_rsa або /root/.ssh/id_rsa та використати їх для входу на сервер.

Використання знайденого приватного ключа

Якщо нам вдалося прочитати приватний ключ id_rsa користувача root, ми можемо скопіювати його на нашу локальну машину та підключитися за допомогою прапорця -i:

user@host[/home]$ vim id_rsa          # Вставляємо скопійований ключ у файл
user@host[/home]$ chmod 600 id_rsa    # Обмежуємо права доступу до ключа
user@host[/home]$ ssh root@10.10.10.10 -i id_rsa
root@10.10.10.10#

Важливо: Зверни увагу на команду chmod 600 id_rsa. Якщо права на файл ключа будуть занадто вільними (наприклад, доступними для читання іншими користувачами), SSH-сервер з міркувань безпеки просто відхилить такий ключ.

Додавання власного ключа (Authorized Keys)

Якщо ми маємо права на запис у директорію .ssh користувача (наприклад, після отримання шелла від імені цього користувача), ми можемо додати свій публічний ключ у файл /home/user/.ssh/authorized_keys. Це дозволить нам заходити по SSH без пароля.

Спочатку генеруємо нову пару ключів на нашій машині:

user@host[/home]$ ssh-keygen -f key
Generating public/private rsa key pair.
Enter passphrase: ******* ...SNIP...
Your identification has been saved in key (приватний ключ)
Your public key has been saved in key.pub (публічний ключ)

Після цього ми копіюємо вміст файлу key.pub і додаємо його на віддаленій машині (наприклад, для root):

user@remotehost$ echo "ssh-rsa AAAAB...[текст ключа]... user@host" >> /root/.ssh/authorized_keys

Тепер сервер дозволить нам зайти як root, використовуючи наш приватний ключ key:

user@host[/home]$ ssh root@10.10.10.10 -i key
root@remotehost#

Корисні посилання:

[embed]GTFOBins GTFOBins is a curated list of Unix binaries that can be used to bypass local security restrictions in misconfigured…gtfobins.github.io

[embed]LOLBAS contribute, check out ourcontribution guide. Ourcriteria list sets out what we define as a LOLBin/Script/Lib. More…lolbas-project.github.io

[embed]PayloadsAllTheThings/Methodology and Resources at master · swisskyrepo/PayloadsAllTheThings A list of useful payloads and bypass for Web Application Security and Pentest/CTF - PayloadsAllTheThings/Methodology…github.com

[embed]OffSec's Exploit Database Archive The Exploit Database - Exploits, Shellcode, 0days, Remote Exploits, Local Exploits, Web Apps, Vulnerability Reports…www.exploit-db.com


메타데이터
post_id
6c0c4d72e4e8
slug
підвищення-привілеїв-privilege-escalation-6c0c4d72e4e8
url
https://medium.com/@fl4ghunt3rproject/%D0%BF%D1%96%D0%B4%D0%B2%D0%B8%D1%89%D0%B5%D0%BD%D0%BD%D1%8F-%D0%BF%D1%80%D0%B8%D0%B2%D1%96%D0%BB%D0%B5%D1%97%D0%B2-privilege-escalation-6c0c4d72e4e8
canonical_url
https://medium.com/@fl4ghunt3rproject/%D0%BF%D1%96%D0%B4%D0%B2%D0%B8%D1%89%D0%B5%D0%BD%D0%BD%D1%8F-%D0%BF%D1%80%D0%B8%D0%B2%D1%96%D0%BB%D0%B5%D1%97%D0%B2-privilege-escalation-6c0c4d72e4e8
author_url
https://medium.com/@fl4ghunt3rproject
status
ok
fetched_at
2026-08-16 11:45:14