Linux Privilege Escalation
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Давайте почнемо здобувати деякі знання про ОС, яка працює.
Якщо у вас є права на запис у будь-якій папці всередині змінної PATH
, ви можете захопити деякі бібліотеки або виконуючі файли:
Цікава інформація, паролі або ключі API в змінних середовища?
Перевірте версію ядра та наявність вразливостей, які можна використати для підвищення привілеїв
Можна знайти хороший список вразливих ядер та деякі вже скомпільовані експлойти тут: https://github.com/lucyoa/kernel-exploits та exploitdb sploits. Інші сайти, де можна знайти деякі скомпільовані експлойти: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
Для вилучення всіх вразливих версій ядра з цього веб-сайту можна виконати:
Інструменти, які можуть допомогти у пошуку експлойтів ядра:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (виконується на жертві, перевіряє експлойти лише для ядра 2.x)
Завжди шукайте версію ядра в Google, можливо, ваша версія ядра написана в якомусь експлойті, тоді ви будете впевнені, що цей експлойт є дійсним.
Підвищення привілеїв в Linux - Ядро Linux <= 3.19.0-73.8
На основі вразливих версій sudo, які зустрічаються в:
Ви можете перевірити, чи є версія sudo вразливою за допомогою цієї команди grep.
Від @sickrov
Перевірте smasher2 box of HTB для прикладу, як цю уразу можна використати
Якщо ви знаходитесь всередині контейнера Docker, ви можете спробувати втекти з нього:
Docker SecurityПеревірте що змонтовано і незмонтовано, де і чому. Якщо щось незмонтовано, ви можете спробувати змонтувати його і перевірити приватну інформацію.
Перерахуйте корисні виконувані файли
Також перевірте, чи встановлено будь-який компілятор. Це корисно, якщо вам потрібно використовувати який-небудь експлойт ядра, оскільки рекомендується компілювати його на машині, де ви збираєтеся використовувати його (або на подібній).
Перевірте версію встановлених пакетів та служб. Можливо, є якась стара версія Nagios (наприклад), яку можна використати для підвищення привілеїв... Рекомендується перевірити вручну версію найбільш підозрілого встановленого програмного забезпечення.
Якщо у вас є доступ до машини через SSH, ви також можете використовувати openVAS для перевірки застарілих та вразливих програм, встановлених усередині машини.
Зверніть увагу, що ці команди покажуть багато інформації, яка в основному буде некорисною, тому рекомендується використовувати додатки, такі як OpenVAS або подібні, які перевірять, чи є яка-небудь встановлена версія програмного забезпечення вразливою до відомих експлойтів
Подивіться, які процеси виконуються та перевірте, чи який-небудь процес має більше привілеїв, ніж повинен (можливо, tomcat виконується від імені root?)
Завжди перевіряйте можливість запущених відладчиків electron/cef/chromium, ви можете використати це для підвищення привілеїв. Linpeas виявляє їх, перевіряючи параметр --inspect
у командному рядку процесу.
Також перевірте свої привілеї над бінарними файлами процесів, можливо, ви зможете перезаписати когось.
Ви можете використовувати інструменти, такі як pspy для моніторингу процесів. Це може бути дуже корисно для ідентифікації вразливих процесів, які виконуються часто або коли виконані певні вимоги.
Деякі служби сервера зберігають паролі у відкритому вигляді у пам'яті. Зазвичай вам знадобиться root-привілеї, щоб прочитати пам'ять процесів, які належать іншим користувачам, тому це зазвичай корисно, коли ви вже маєте root-права і хочете дізнатися більше паролів. Однак пам'ятайте, що як звичайний користувач ви можете читати пам'ять процесів, які вам належать.
Зауважте, що в наш час більшість машин не дозволяють ptrace за замовчуванням, що означає, що ви не можете витягти інші процеси, які належать вашому непривілейованому користувачеві.
Файл /proc/sys/kernel/yama/ptrace_scope контролює доступність ptrace:
kernel.yama.ptrace_scope = 0: всі процеси можуть бути налагоджені, якщо вони мають той самий uid. Це класичний спосіб роботи ptrace.
kernel.yama.ptrace_scope = 1: можна налагоджувати лише батьківський процес.
kernel.yama.ptrace_scope = 2: Тільки адміністратор може використовувати ptrace, оскільки це потребує CAP_SYS_PTRACE.
kernel.yama.ptrace_scope = 3: Ніякі процеси не можуть бути відстежені за допомогою ptrace. Після встановлення потрібно перезавантаження для повторного ввімкнення відстеження.
Якщо у вас є доступ до пам'яті служби FTP (наприклад), ви можете отримати Heap та шукати в ньому паролі.
Для заданого ідентифікатора процесу maps показують, як пам'ять відображена в межах віртуального адресного простору цього процесу; вони також показують права доступу до кожного відображеного регіону. Псевдофайл mem викриває саму пам'ять процесів. З файлу maps ми знаємо, які області пам'яті доступні для читання та їх зміщення. Ми використовуємо цю інформацію, щоб перейти до файлу mem та вивантажити всі доступні для читання області у файл.
/dev/mem
надає доступ до фізичної пам'яті системи, а не віртуальної пам'яті. Віртуальний простір адрес ядра можна отримати, використовуючи /dev/kmem.
Зазвичай, /dev/mem
може бути прочитаний тільки користувачем root та групою kmem.
ProcDump - це переосмислення класичного інструменту ProcDump з набору інструментів Sysinternals для Windows. Отримайте його за посиланням https://github.com/Sysinternals/ProcDump-for-Linux
Для виведення пам'яті процесу ви можете використовувати:
https://github.com/hajzer/bash-memory-dump (root) - _Ви можете вручну видалити вимоги root та вивести процес, який вам належить
Скрипт A.5 з https://www.delaat.net/rp/2016-2017/p97/report.pdf (потрібен root)
Якщо ви виявите, що процес аутентифікатора працює:
Ви можете витягти процес (див. попередні розділи, щоб знайти різні способи вилучення пам'яті процесу) та шукати облікові дані всередині пам'яті:
Інструмент https://github.com/huntergregal/mimipenguin буде викрадати облікові дані у вигляді чіткого тексту з пам'яті та з деяких відомих файлів. Для правильної роботи він потребує привілеїв root.
Особливість | Назва процесу |
---|---|
Пароль GDM (Kali Desktop, Debian Desktop) | gdm-password |
Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
LightDM (Ubuntu Desktop) | lightdm |
VSFTPd (Активні FTP-з'єднання) | vsftpd |
Apache2 (Активні HTTP Basic Auth сесії) | apache2 |
OpenSSH (Активні SSH-сесії - Використання Sudo) | sshd: |
Перевірте, чи є які-небудь заплановані завдання вразливими. Можливо, ви зможете скористатися скриптом, який виконується від імені root (вразливість у шаблонах? можна змінювати файли, які використовує root? використовувати символьні посилання? створювати конкретні файли в каталозі, який використовує root?).
Наприклад, всередині /etc/crontab ви можете знайти ШЛЯХ: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Зверніть увагу, що користувач "user" має права на запис у /home/user)
Якщо всередині цього crontab користувач root намагається виконати якусь команду або скрипт без встановлення шляху. Наприклад: * * * * root overwrite.sh Тоді ви можете отримати оболонку root, використовуючи:
Якщо скрипт виконується користувачем root і містить "*" всередині команди, ви можете скористатися цим для виконання неочікуваних дій (наприклад, підвищення привілеїв). Приклад:
Якщо метасимвол передує шляху, наприклад /some/path/*, то вразливість відсутня (навіть ./* не є вразливим).
Для отримання додаткових прийомів експлуатації метасимволів перегляньте наступну сторінку:
Wildcards Spare tricksЯкщо можна змінити сценарій Cron, який виконується від імені root, можна дуже легко отримати оболонку:
Якщо сценарій, виконаний користувачем root, використовує каталог, до якого у вас є повний доступ, можливо, буде корисно видалити цей каталог і створити символічний посилання на інший каталог, в якому знаходиться сценарій, котрим ви керуєте
Ви можете моніторити процеси, щоб шукати процеси, які виконуються кожну 1, 2 або 5 хвилин. Можливо, ви зможете скористатися цим і підвищити привілеї.
Наприклад, для моніторингу кожні 0,1 секунди протягом 1 хвилини, сортування за менш виконуваними командами та видалення команд, які були виконані найбільше, ви можете виконати:
Ви також можете використовувати pspy (це буде відстежувати та перераховувати кожен процес, який починається).
Можливо створити cron-завдання, додавши символ повернення каретки після коментаря (без символу нового рядка), і це cron-завдання буде працювати. Приклад (зверніть увагу на символ повернення каретки):
Перевірте, чи можете ви записувати будь-який файл .service
, якщо можете, ви можете змінити його, щоб він виконував вашу задню дверку при запуску, перезапуску або зупинці сервісу (можливо, вам доведеться зачекати, поки машина перезавантажиться).
Наприклад, створіть свою задню дверку всередині файлу .service з ExecStart=/tmp/script.sh
Пам'ятайте, що якщо у вас є права на запис для бінарних файлів, які виконуються сервісами, ви можете змінити їх на задні дверки, тому коли сервіси будуть перевиконані, задні дверки будуть виконані.
Ви можете побачити шлях, який використовує systemd, за допомогою:
Якщо ви виявите, що можете записувати в будь-якій з папок шляху, ви, можливо, зможете підвищити привілеї. Вам потрібно шукати файли конфігурації служб, де використовуються відносні шляхи.
Потім створіть виконуваний файл з такою ж назвою, як і відносний шлях бінарного файлу всередині папки шляху systemd, де ви можете писати, і коли запитують сервіс виконати уразливу дію (Start, Stop, Reload), ваш задній прохід буде виконаний (непривілейовані користувачі зазвичай не можуть запускати/зупиняти сервіси, але перевірте, чи можете використовувати sudo -l
).
Дізнайтеся більше про сервіси за допомогою man systemd.service
.
Таймери - це файлы одиниць systemd, ім'я яких закінчується на **.timer**
, які керують файлами або подіями **.service**
. Таймери можуть бути використані як альтернатива cron, оскільки вони мають вбудовану підтримку подій календарного часу та монотонних подій та можуть бути запущені асинхронно.
Ви можете перелічити всі таймери за допомогою:
Якщо ви можете змінити таймер, ви можете зробити його виконати деякі існуючі одиниці systemd (наприклад, .service
або .target
)
У документації ви можете прочитати, що таке Unit:
Unit, який активується, коли таймер завершується. Аргумент - це ім'я unit, суфікс якого не є ".timer". Якщо не вказано, це значення за замовчуванням встановлюється на службу, яка має те саме ім'я, що й unit таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб ім'я unit, який активується, та ім'я unit таймера були ідентичними, за винятком суфікса.
Отже, для зловживання цим дозволом вам потрібно:
Знайти деякий systemd unit (наприклад, .service
), який виконує записний бінарний файл
Знайти деякий systemd unit, який виконується за допомогою відносного шляху, і у вас є права на запис до шляху systemd (щоб видаляти цей виконавчий файл)
Дізнайтеся більше про таймери за допомогою man systemd.timer
.
Для увімкнення таймера вам потрібні права root і виконати:
Зауважте, що таймер активується, створивши символічне посилання на нього у /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Сокети Unix Domain (UDS) дозволяють комунікацію процесів на одній або різних машинах у моделях клієнт-сервер. Вони використовують стандартні файлові дескриптори Unix для міжкомп'ютерної комунікації і налаштовуються через файли .socket
.
Сокети можна налаштувати за допомогою файлів .socket
.
Дізнайтеся більше про сокети за допомогою man systemd.socket
. У цьому файлі можна налаштувати кілька цікавих параметрів:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Ці параметри різняться, але узагальнення використовується для вказівки, де буде прослуховуватися сокет (шлях до файлу сокета AF_UNIX, IPv4/6 та/або номер порту для прослуховування і т. д.)
Accept
: Приймає булеве значення. Якщо true, для кожного вхідного підключення створюється екземпляр служби, і лише сокет підключення передається йому. Якщо false, всі прослуховуючі сокети самі передаються запущеній службі, і лише один екземпляр служби створюється для всіх підключень. Це значення ігнорується для датаграмних сокетів та FIFO, де один службовий блок однозначно обробляє весь вхідний трафік. За замовчуванням false. З міркувань продуктивності рекомендується писати нові демони тільки так, щоб вони підходили для Accept=no
.
ExecStartPre
, ExecStartPost
: Приймає один або кілька рядків команд, які виконуються перед тим, як прослуховуючі сокети/FIFO створюються та зв'язуються відповідно. Перший токен рядка команди повинен бути абсолютним іменем файлу, за яким слідують аргументи для процесу.
ExecStopPre
, ExecStopPost
: Додаткові команди, які виконуються перед тим, як прослуховуючі сокети/FIFO закриваються та видаляються відповідно.
Service
: Вказує ім'я служби, яку активувати при вхідному трафіку. Це налаштування дозволено лише для сокетів з Accept=no. За замовчуванням воно встановлюється на службу, яка має те саме ім'я, що й сокет (замінено суфіксом). У більшості випадків не повинно бути необхідності використовувати цей параметр.
Якщо ви знайдете записуваний файл .socket
, ви можете додати на початку розділу [Socket]
щось на зразок: ExecStartPre=/home/kali/sys/backdoor
, і backdoor буде виконано перед створенням сокета. Тому, ймовірно, вам доведеться зачекати, поки машина перезавантажиться.
Зауважте, що система повинна використовувати цю конфігурацію файлу сокета, інакше backdoor не буде виконано
Якщо ви визначите будь-який записуваний сокет (зараз ми говоримо про Unix сокети, а не про файли конфігурації .socket
), то ви можете спілкуватися з цим сокетом і, можливо, використовувати уразливість.
Приклад експлуатації:
Socket Command InjectionЗверніть увагу, що можуть існувати деякі сокети, які слухають HTTP запити (Я не говорю про файли .socket, а про файли, які діють як unix сокети). Ви можете перевірити це за допомогою:
Якщо сокет відповідає на запит HTTP, то ви можете взаємодіяти з ним і, можливо, експлуатувати деякі вразливості.
Сокет Docker, який часто знаходиться за шляхом /var/run/docker.sock
, є критичним файлом, який повинен бути захищений. За замовчуванням він доступний для запису користувачем root
та членами групи docker
. Володіння правами на запис до цього сокету може призвести до підвищення привілеїв. Ось розбір того, як це можна зробити, та альтернативні методи, якщо CLI Docker недоступний.
Якщо у вас є права на запис до сокету Docker, ви можете підвищити привілеї за допомогою наступних команд:
У випадках, коли Docker CLI недоступний, сокет Docker все ще можна маніпулювати за допомогою Docker API та команд curl
.
Перелік образів Docker: Отримати список доступних образів.
Створення контейнера: Надіслати запит на створення контейнера, який монтує кореневий каталог системи хоста.
Запустіть новостворений контейнер:
Приєднання до контейнера: Використовуйте socat
, щоб встановити з'єднання з контейнером, що дозволяє виконувати команди всередині нього.
Після налаштування з'єднання socat
ви можете виконувати команди безпосередньо в контейнері з рівнем доступу root до файлової системи хоста.
Зверніть увагу, що якщо у вас є права на запис до сокету Docker через належність до групи docker
, у вас є більше способів підвищення привілеїв. Якщо API Docker прослуховує порт ви також можете скомпрометувати його.
Перевірте інші способи виходу з Docker або зловживання ним для підвищення привілеїв в:
Docker SecurityЯкщо ви виявите, що можете використовувати команду ctr
, прочитайте наступну сторінку, оскільки ви можете зловживати нею для підвищення привілеїв:
Якщо ви виявите, що можете використовувати команду runc
, прочитайте наступну сторінку, оскільки ви можете зловживати нею для підвищення привілеїв:
D-Bus - це складна система міжпроцесного зв'язку (IPC), яка дозволяє програмам ефективно взаємодіяти та обмінюватися даними. Розроблена з урахуванням сучасної системи Linux, вона пропонує надійний фреймворк для різних форм взаємодії програм.
Система є універсальною, підтримуючи базовий IPC, який полегшує обмін даними між процесами, нагадуючи про покращені UNIX-сокети. Крім того, вона допомагає в трансляції подій або сигналів, сприяючи безшовній інтеграції між компонентами системи. Наприклад, сигнал від демона Bluetooth про вхідний дзвінок може викликати приглушення музичного програвача, покращуючи взаємодію з користувачем. Крім того, D-Bus підтримує віддалену систему об'єктів, спрощуючи запити служб та виклики методів між додатками, спрощуючи процеси, які традиційно були складними.
D-Bus працює за моделлю дозволити/заборонити, керуючи дозволами повідомлень (виклики методів, емісії сигналів і т. д.) на основі кумулятивного ефекту відповідності політичним правилам. Ці політики вказують взаємодії з автобусом, що потенційно дозволяє підвищення привілеїв через експлуатацію цих дозволів.
Наведено приклад такої політики в /etc/dbus-1/system.d/wpa_supplicant.conf
, де детально описані дозволи для користувача root на володіння, відправлення та отримання повідомлень від fi.w1.wpa_supplicant1
.
Політики без вказаного користувача або групи застосовуються універсально, тоді як політики контексту "default" застосовуються до всіх, кого не охоплюють інші конкретні політики.
Дізнайтеся, як перелічити та використовувати комунікацію D-Bus тут:
D-Bus Enumeration & Command Injection Privilege EscalationЗавжди цікаво перелічити мережу та визначити положення машини.
Завжди перевіряйте мережеві служби, які працюють на машині, з якою ви не могли взаємодіяти до доступу до неї:
Перевірте, чи можете ви перехоплювати трафік. Якщо можете, ви можете отримати деякі облікові дані.
Перевірте хто ви є, які привілеї у вас є, які користувачі є в системах, які з них можуть увійти і які мають root-привілеї:
Деякі версії Linux були порушені багом, який дозволяє користувачам з UID > INT_MAX підвищувати привілеї. Додаткова інформація: тут, тут та тут.
Використовуйте це за допомогою: systemd-run -t /bin/bash
Перевірте, чи ви є членом якої-небудь групи, яка може надати вам привілеї root:
Interesting Groups - Linux PrivescПеревірте, чи є щось цікаве в буфері обміну (якщо це можливо)
Якщо ви знаєте будь-який пароль середовища, спробуйте увійти як кожен користувач, використовуючи цей пароль.
Якщо вам не заважає робити багато шуму і на комп'ютері присутні бінарні файли su
та timeout
, ви можете спробувати виконати перебір користувачів за допомогою su-bruteforce.
Linpeas з параметром -a
також спробує виконати перебір користувачів.
Якщо ви виявите, що ви можете записувати всередині деякої папки $PATH, ви можете підняти привілеї, створивши задній прохід всередині записуємої папки з ім'ям якоїсь команди, яка буде виконана іншим користувачем (ідеально root) і яка не завантажується з папки, що розташована перед вашою записуємою папкою в $PATH.
Вам може бути дозволено виконати деяку команду за допомогою sudo або вони можуть мати біт suid. Перевірте це за допомогою:
Деякі неочікувані команди дозволяють вам читати та/або записувати файли або навіть виконувати команду. Наприклад:
Конфігурація Sudo може дозволити користувачеві виконувати деякі команди з привілеями іншого користувача без введення пароля.
У цьому прикладі користувач demo
може запускати vim
як root
, тепер отримати оболонку стає тривіально, додавши ключ ssh у каталог root
або викликавши sh
.
Ця директива дозволяє користувачеві встановлювати змінну середовища під час виконання чого-небудь:
Цей приклад, заснований на машині HTB Admirer, був уразливий на використання PYTHONPATH для викрадення для завантаження довільної бібліотеки Python під час виконання скрипту як root:
Перескочіть, щоб прочитати інші файли або використовуйте символічні посилання. Наприклад, у файлі sudoers: hacker10 ALL= (root) /bin/less /var/log/*
Якщо використовується зірочка (*), це ще простіше:
Протиправні дії: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
Якщо дозвіл sudo надано для однієї команди без вказання шляху: hacker10 ALL= (root) less, ви можете використати це, змінивши змінну PATH.
Ця техніка також може бути використана, якщо suid бінарний файл виконує іншу команду без вказання шляху до неї (завжди перевіряйте з strings вміст дивного SUID-бінарного файлу).
Приклади полезних навантажень для виконання.
Якщо suid бінарний файл виконує іншу команду, вказуючи шлях, тоді ви можете спробувати експортувати функцію, яка має таку ж назву, як команда, яку викликає файл suid.
Наприклад, якщо suid-бінарний файл викликає /usr/sbin/service apache2 start, вам слід спробувати створити функцію та експортувати її:
Змінна середовища LD_PRELOAD використовується для вказівки однієї або декількох спільних бібліотек (.so файли), які будуть завантажені завантажувачем перед усіма іншими, включаючи стандартну бібліотеку C (libc.so
). Цей процес відомий як попереднє завантаження бібліотеки.
Однак, для забезпечення безпеки системи та запобігання зловживання цією функцією, особливо з використанням виконуваних файлів з правами suid/sgid, система накладає певні умови:
Завантажувач ігнорує LD_PRELOAD для виконуваних файлів, де реальний ідентифікатор користувача (ruid) не відповідає ефективному ідентифікатору користувача (euid).
Для виконуваних файлів з suid/sgid завантажуються лише бібліотеки в стандартних шляхах, які також мають suid/sgid.
Підвищення привілеїв може відбутися, якщо у вас є можливість виконувати команди з sudo
, а вивід sudo -l
містить заяву env_keep+=LD_PRELOAD. Ця конфігурація дозволяє змінній середовища LD_PRELOAD залишатися та визнаватися навіть під час виконання команд з sudo
, що потенційно може призвести до виконання довільного коду з підвищеними привілеями.
Зберегти як /tmp/pe.c
Потім скомпілюйте його, використовуючи:
Нарешті, підвищте привілеї запускаючи
Подібний підвищення привілеїв може бути зловжито, якщо зловмисник контролює змінну середовища LD_LIBRARY_PATH, оскільки він контролює шлях, де будуть шукатися бібліотеки.
При зустрічі бінарного файлу з дозволами SUID, який виглядає незвичайно, корисно перевірити, чи він належним чином завантажує файли .so. Це можна перевірити, виконавши наступну команду:
Наприклад, зіткнення з помилкою типу "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)" вказує на потенційну можливість експлуатації.
Для експлуатації цього, користувач міг би продовжити, створивши файл С з назвою "/path/to/.config/libcalc.c", що містить наступний код:
Цей код, після компіляції та виконання, спрямований на підвищення привілеїв шляхом маніпулювання дозволами файлів та виконання оболонки з підвищеними привілеями.
Скомпілюйте вищезазначений файл C у файл об'єкта з розширенням .so за допомогою:
Тепер, коли ми знайшли SUID-бінарний файл, який завантажує бібліотеку з папки, куди ми можемо записувати, створимо бібліотеку в цій папці з необхідною назвою:
Якщо ви отримуєте помилку такого типу
Це означає, що у згенерованій вами бібліотеці повинна бути функція під назвою a_function_name
.
GTFOBins - це підібраний список Unix-бінарників, які можуть бути використані зловмисником для обходу локальних обмежень безпеки. GTFOArgs - те ж саме, але для випадків, коли ви можете лише впроваджувати аргументи у команду.
Проект збирає законні функції Unix-бінарників, які можуть бути зловживані для виходу з обмежених оболонок, ескалації або підтримки підвищених привілеїв, передачі файлів, створення прив'язаних та зворотних оболонок та сприяння іншим завданням після експлуатації.
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
Якщо у вас є доступ до sudo -l
, ви можете використовувати інструмент FallOfSudo, щоб перевірити, чи він знаходить спосіб використання будь-якого правила sudo.
У випадках, коли у вас є доступ до sudo, але немає пароля, ви можете підвищити привілеї, чекаючи на виконання команди sudo, а потім захоплюючи токен сеансу.
Вимоги для підвищення привілеїв:
У вас вже є оболонка як користувач "sampleuser"
"sampleuser" використовував sudo
для виконання чогось останні 15 хвилин (за замовчуванням це тривалість токена sudo, який дозволяє нам використовувати sudo
без введення пароля)
cat /proc/sys/kernel/yama/ptrace_scope
дорівнює 0
gdb
доступний (ви можете завантажити його)
(Ви можете тимчасово увімкнути ptrace_scope
за допомогою echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
або постійно змінивши /etc/sysctl.d/10-ptrace.conf
і встановивши kernel.yama.ptrace_scope = 0
)
Якщо всі ці вимоги виконані, ви можете підвищити привілеї, використовуючи: https://github.com/nongiach/sudo_inject
Перша експлуатація (exploit.sh
) створить бінарний файл activate_sudo_token
в /tmp. Ви можете використовувати його для активації токена sudo у вашому сеансі (ви не отримаєте автоматично оболонку root, виконайте sudo su
):
Друга експлойта (exploit_v2.sh
) створить оболонку sh в /tmp належність root з setuid
Третій експлойт (exploit_v3.sh
) створить файл sudoers, який робить токени sudo вічними та дозволяє всім користувачам використовувати sudo.
Якщо у вас є права на запис у папці або на будь-якому з створених файлів всередині папки, ви можете використовувати бінарний файл write_sudo_token для створення токену sudo для користувача та PID. Наприклад, якщо ви можете перезаписати файл /var/run/sudo/ts/sampleuser і у вас є оболонка як цей користувач з PID 1234, ви можете отримати привілеї sudo не потребуючи знання пароля, виконавши:
Файл /etc/sudoers
та файли всередині /etc/sudoers.d
налаштовують, хто може використовувати sudo
та як. Ці файли за замовчуванням можуть бути прочитані лише користувачем root та групою root.
Якщо ви можете прочитати цей файл, ви можете отримати цікаву інформацію, і якщо ви можете записати будь-який файл, ви зможете підвищити привілеї.
Якщо ви можете писати, ви можете зловживати цим дозволом
Ще один спосіб зловживання цими дозволами:
Існують альтернативи бінарному файлу sudo
, такі як doas
для OpenBSD, не забудьте перевірити його конфігурацію за шляхом /etc/doas.conf
Якщо ви знаєте, що користувач зазвичай підключається до машини і використовує sudo
для підвищення привілеїв, і ви отримали оболонку в контексті цього користувача, ви можете створити новий виконуваний файл sudo, який буде виконувати ваш код в якості root, а потім команду користувача. Потім змініть $PATH контексту користувача (наприклад, додавши новий шлях у .bash_profile), щоб при виконанні користувачем sudo виконувався ваш виконуваний файл sudo.
Зверніть увагу, що якщо користувач використовує інший оболонку (не bash), вам доведеться змінити інші файли, щоб додати новий шлях. Наприклад, sudo-piggyback змінює ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
. Ви можете знайти інший приклад у bashdoor.py
Або виконати щось на зразок:
Файл /etc/ld.so.conf
вказує звідки завантажуються файли конфігурації. Зазвичай, цей файл містить наступний шлях: include /etc/ld.so.conf.d/*.conf
Це означає, що будуть прочитані файли конфігурації з /etc/ld.so.conf.d/*.conf
. Ці файли конфігурації вказують на інші теки, де будуть шукатися бібліотеки. Наприклад, вміст /etc/ld.so.conf.d/libc.conf
- /usr/local/lib
. Це означає, що система буде шукати бібліотеки всередині /usr/local/lib
.
Якщо користувач має права на запис до будь-якого з вказаних шляхів: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, будь-якого файлу всередині /etc/ld.so.conf.d/
або будь-якої теки всередині файлу конфігурації всередині /etc/ld.so.conf.d/*.conf
, він може мати можливість підвищення привілеїв.
Перегляньте як експлуатувати цю помилку конфігурації на наступній сторінці:
Копіюючи бібліотеку в /var/tmp/flag15/
, вона буде використовуватися програмою в цьому місці, як вказано в змінній RPATH
.
Тоді створіть зловісну бібліотеку в /var/tmp
за допомогою gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Можливості Linux надають підмножину доступних привілеїв root процесу. Це ефективно розбиває привілеї root на менші та відмінні одиниці. Кожну з цих одиниць можна надавати процесам незалежно. Таким чином повний набір привілеїв зменшується, зменшуючи ризики експлуатації. Прочитайте наступну сторінку, щоб дізнатися більше про можливості та як їх зловживати:
Linux CapabilitiesУ каталозі біт для "виконання" означає, що користувач, який стосується, може "cd" у папку. Біт "читання" означає, що користувач може переглядати файли, а біт "запису" означає, що користувач може видаляти та створювати нові файли.
Списки керування доступом (ACL) представляють собою вторинний рівень умовних дозволів, здатних перевищувати традиційні дозволи ugo/rwx. Ці дозволи покращують контроль над доступом до файлу або каталогу, дозволяючи або відмовляючи права конкретним користувачам, які не є власниками або частиною групи. Цей рівень деталізації забезпечує більш точне управління доступом. Додаткові відомості можна знайти тут.
Надайте користувачеві "kali" права на читання та запис у файлі:
Отримати файли з конкретними ACL на системі:
У старих версіях ви можете захопити деякі сеанси оболонки іншого користувача (root). У новіших версіях ви зможете підключитися лише до сеансів екрану власного користувача. Однак ви можете знайти цікаву інформацію всередині сеансу.
Перелік сеансів екрану
Прикріплення до сеансу
Це була проблема з старими версіями tmux. Я не міг захопити сеанс tmux (v2.1), створений користувачем root як не привілейований користувач.
Перелік сеансів tmux
Прикріплення до сеансу
Перевірте Valentine box від HTB для прикладу.
Усі ключі SSL та SSH, створені на системах на основі Debian (Ubuntu, Kubuntu і т. д.) між вереснем 2006 року та 13 травня 2008 року можуть бути пошкоджені цим багом. Цей баг виникає при створенні нового ssh ключа в цих ОС, оскільки можливі лише 32 768 варіантів. Це означає, що всі можливості можна розрахувати, і маючи публічний ключ ssh, ви можете шукати відповідний приватний ключ. Ви можете знайти розраховані можливості тут: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Вказує, чи дозволена аутентифікація за паролем. За замовчуванням - no
.
PubkeyAuthentication: Вказує, чи дозволена аутентифікація за публічним ключем. За замовчуванням - yes
.
PermitEmptyPasswords: Коли дозволена аутентифікація за паролем, вказує, чи дозволяє сервер вхід в облікові записи з порожніми рядками паролю. За замовчуванням - no
.
Вказує, чи може root увійти за допомогою ssh, за замовчуванням - no
. Можливі значення:
yes
: root може увійти за допомогою пароля та приватного ключа
without-password
або prohibit-password
: root може увійти лише за допомогою приватного ключа
forced-commands-only
: Root може увійти лише за допомогою приватного ключа, якщо вказані параметри команд
no
: no
Вказує файли, які містять публічні ключі, які можна використовувати для аутентифікації користувача. Він може містити токени, такі як %h
, які будуть замінені на домашній каталог. Ви можете вказати абсолютні шляхи (починаючи з /
) або відносні шляхи від домашнього каталогу користувача. Наприклад:
Така конфігурація покаже, що якщо ви спробуєте увійти за допомогою приватного ключа користувача "testusername", ssh порівняє публічний ключ вашого ключа з тими, що знаходяться в /home/testusername/.ssh/authorized_keys
та /home/testusername/access
Пересилання SSH агента дозволяє вам використовувати ваші локальні SSH ключі замість того, щоб залишати ключі (без паролів!) на вашому сервері. Таким чином, ви зможете перейти через ssh на хост і звідти перейти на інший хост, використовуючи ключ, що знаходиться на вашому початковому хості.
Вам потрібно встановити цю опцію в $HOME/.ssh.config
таким чином:
Зверніть увагу, що якщо Host
- це *
, кожного разу, коли користувач переходить на іншу машину, ця машина зможе отримати доступ до ключів (що є проблемою безпеки).
Файл /etc/ssh_config
може перевизначити ці опції та дозволити або заборонити цю конфігурацію.
Файл /etc/sshd_config
може дозволити або заборонити пересилання ssh-агента за допомогою ключового слова AllowAgentForwarding
(за замовчуванням - дозволено).
Якщо ви виявите, що Forward Agent налаштований в середовищі, прочитайте наступну сторінку, оскільки ви можете використати це для підвищення привілеїв:
SSH Forward Agent exploitationФайл /etc/profile
та файли у /etc/profile.d/
- це сценарії, які виконуються, коли користувач запускає новий оболонку. Тому, якщо ви можете записати або змінити будь-який з них, ви можете підвищити привілеї.
Якщо виявлено будь-який дивний сценарій профілю, ви повинні перевірити його на чутливі дані.
Залежно від ОС файли /etc/passwd
та /etc/shadow
можуть мати іншу назву або там може бути резервна копія. Тому рекомендується знайти всі їх та перевірити, чи можете ви читати їх, щоб побачити, чи є в них хеші.
У деяких випадках ви можете знайти хеші паролів всередині файлу /etc/passwd
(або еквівалентного)
Спочатку створіть пароль за допомогою однієї з наступних команд.
Потім додайте користувача hacker
і встановіть згенерований пароль.
Наприклад: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Тепер ви можете використовувати команду su
з hacker:hacker
Альтернативно, ви можете використати наступні рядки, щоб додати користувача-пустун без пароля. ПОПЕРЕДЖЕННЯ: ви можете погіршити поточний рівень безпеки машини.
ПРИМІТКА: На платформах BSD файл /etc/passwd
розташовується за адресою /etc/pwd.db
і /etc/master.passwd
, також файл /etc/shadow
перейменовано на /etc/spwd.db
.
Вам слід перевірити, чи можете ви записувати в деякі чутливі файли. Наприклад, чи можете ви записувати в файл конфігурації служби?
Наприклад, якщо машина працює на сервері tomcat і ви можете змінити файл конфігурації служби Tomcat всередині /etc/systemd/, то ви можете змінити рядки:
Наступні теки можуть містити резервні копії або цікаву інформацію: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Ймовірно, ви не зможете прочитати останню, але спробуйте)
Прочитайте код linPEAS, він шукає кілька можливих файлів, які можуть містити паролі. Ще один цікавий інструмент, який ви можете використовувати для цього, це: LaZagne, який є відкритим додатком, призначеним для отримання багатьох паролів, збережених на локальному комп'ютері для Windows, Linux та Mac.
Якщо ви можете читати журнали, ви, можливо, зможете знайти цікаву/конфіденційну інформацію всередині них. Чим дивніше буде журнал, тим цікавіше він буде (імовірно). Також, деякі "погано" налаштовані (з задніми дверима?) журнали аудиту можуть дозволити вам записувати паролі всередині журналів аудиту, як пояснено в цьому пості: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Для того щоб читати журнали групи adm буде дійсно корисно.
Ви також повинні перевірити файли, що містять слово "password" у своєму імені або всередині вмісту, а також перевірити IP-адреси та електронні адреси всередині журналів або хешів regexps. Я не буду перераховувати тут, як робити все це, але якщо вас це цікавить, ви можете перевірити останні перевірки, які виконує linpeas.
Якщо ви знаєте звідки буде виконуватися сценарій Python і ви можете писати всередині цієї теки або ви можете змінювати бібліотеки Python, ви можете змінити бібліотеку ОС і встановити в неї задній прохід (якщо ви можете писати там, де буде виконуватися сценарій Python, скопіюйте та вставте бібліотеку os.py).
Для встановлення заднього проходу в бібліотеку просто додайте в кінець бібліотеки os.py наступний рядок (змініть IP та PORT):
Уразливість у logrotate
дозволяє користувачам з правами запису на файл журналу або його батьківські каталоги потенційно отримати підвищені привілеї. Це тому, що logrotate
, який часто працює в якості root, може бути зманіпульований для виконання довільних файлів, особливо в каталогах, таких як /etc/bash_completion.d/. Важливо перевіряти дозволи не лише в /var/log, але й в будь-якому каталозі, де застосовується обертання журналу.
Ця уразливість впливає на версію logrotate
3.18.0
та старіші
Докладнішу інформацію про уразливість можна знайти на цій сторінці: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
Ви можете експлуатувати цю уразливість за допомогою logrotten.
Ця уразливість дуже схожа на CVE-2016-1247 (nginx logs), тому кожного разу, коли ви виявляєте, що ви можете змінювати журнали, перевірте, хто керує цими журналами, і перевірте, чи можете ви підвищити привілеї, замінюючи журнали символічними посиланнями.
Посилання на уразливість: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
Якщо, з якої завгодно причини, користувач може записувати сценарій ifcf-<що-небудь>
до /etc/sysconfig/network-scripts або може налаштувати існуючий, то ваша система взламана.
Мережеві сценарії, наприклад ifcg-eth0, використовуються для мережевих підключень. Вони виглядають точно так само, як файли .INI. Однак вони ~підключаються~ на Linux за допомогою Network Manager (dispatcher.d).
У моєму випадку атрибут NAME=
в цих мережевих сценаріях не обробляється правильно. Якщо у вас є білий/порожній пробіл у назві, система намагається виконати частину після білого/порожнього пробілу. Це означає, що все після першого порожнього пробілу виконується як root.
Наприклад: /etc/sysconfig/network-scripts/ifcfg-1337
Директорія /etc/init.d
є домашньою для скриптів для System V init (SysVinit), класичної системи управління службами Linux. Вона містить скрипти для start
, stop
, restart
та іноді reload
служб. Їх можна виконати безпосередньо або через символічні посилання, що знаходяться в /etc/rc?.d/
. Альтернативний шлях у системах Redhat - /etc/rc.d/init.d
.
З іншого боку, /etc/init
пов'язана з Upstart, новішою системою управління службами, яку ввів Ubuntu, використовуючи файли конфігурації для завдань управління службами. Незважаючи на перехід до Upstart, скрипти SysVinit все ще використовуються поряд з конфігураціями Upstart через шар сумісності в Upstart.
systemd виходить як сучасний ініціалізатор та менеджер служб, який пропонує розширені функції, такі як запуск демонів за вимогою, управління автомонтуванням та знімками стану системи. Він організовує файли в /usr/lib/systemd/
для пакунків розподілу та /etc/systemd/system/
для модифікацій адміністратора, спрощуючи процес адміністрування системи.
Статичні бінарні файли Impacket
LinEnum: https://github.com/rebootuser/LinEnum(-t option) Enumy: https://github.com/luke-goddard/enumy Unix Privesc Check: http://pentestmonkey.net/tools/audit/unix-privesc-check Linux Priv Checker: www.securitysift.com/download/linuxprivchecker.py BeeRoot: https://github.com/AlessandroZ/BeRoot/tree/master/Linux Kernelpop: Перелічення уразливостей ядра в Linux та MAC https://github.com/spencerdodd/kernelpop Mestaploit: multi/recon/local_exploit_suggester Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester EvilAbigail (фізичний доступ): https://github.com/GDSSecurity/EvilAbigail Компіляція додаткових скриптів: https://github.com/1N3/PrivEsc
Вивчайте та практикуйте взлом AWS:Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)