Перейти до змісту
View in the app

A better way to browse. Learn more.

Файна Україна

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Як отримати права root у Linux

Рекомендовані відповіді

Опубліковано
  • Адміністратор

Вітаю!

Отримавши права root, ви зможете робити в системі що захочете: закріпитися на майбутнє, впровадити бекдор, залишити руткіт або троян і т.п. Тому підвищення привілеїв у Linux - один з найважливіших етапів при пентесті. У статті я розповім, як отримати права root у Linux.

У загальному випадку ескалація привілеїв – це отримання прав у системі вище, ніж у вас уже є. Але найчастіше мається на увазі отримання доступу до облікового запису root у Linux.

Чому стає можливим підвищити права в системі, здавалося б покликаною запобігати такому? Причин багато. Ось, як на мене, основні:

  • вразливості у додатках/скриптах;

  • неправильна конфігурація ОС та додатків;

  • забуті критично важливі дані (паролі, логіни, бекапи та інше);

  • вразливості у ядрі ОС.

Ну а основна причина завжди одна й та сама — людські помилки. В ідеальному всесвіті, швидше за все, підвищити привілеї не вдалося б. Але людський фактор робить це можливим, тож насолоджуємося.

Як отримати права root у Linux
Перш ніж щось робити, потрібно зрозуміти, з чим ми матимемо справу. Звичайно, дещо ми дізнаємося про систему, вивчивши її на етапі проникнення, але тепер потрібно докладніше з'ясувати, що саме нам допоможе піднятися до root.

Якісь речі ми можемо дізнатися вручну. Наприклад, отримати відомості про ядро:

uname -a 2>/dev/null
Або про процесор:

cat /proc/cpuinfo 2>/dev/null
Або реліз ОС:

cat /etc/*-release 2>/dev/nul
Можна, звичайно, і далі збирати інформацію за допомогою терміналу, але це довго. Набагато простіше та ефективніше використовувати спеціальні інструменти. Найпоширеніші з них:

Усі вони працюють однаково: послідовно запускають команди bash або короткі скрипти, а висновок відправляють у stdout чи лог-файл залежно від параметрів.

Так виглядає висновок подібного інструменту.

LinEnum


LinEnum
Давайте тепер розберемо кілька прикладів уразливостей і подивимося, як їх експлуатувати.

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

Іноді облікові дані хардкодять у скриптах та конфігах. Варто також перевірити історію шелла, там також можуть знайтися довгі команди, які містять облікові дані. А іноді буває, що користувач набрав пароль, коли консоль його не просила, і він також збережеться в історії.

SUID/GUID
Прапори setuid та setgid дозволяють користувачеві запускати програми від імені власника. Наприклад, коли треба запускати програму від рута, а користувач рутом не є. Найчастіше зустрічається SUID. Встановлюється цей біт легко:

chmod +s /bin/script
Йдеться про те, що програма з таким прапором не зможе робити нічого, крім того, для чого вона призначена. Але оскільки всі ми люди і помиляємось, то це добре часом помилки дозволяють скомпрометувати систему. Найчастіше до можливості підвищити привілеї наводить можливість програми робити запис у файлову систему чи якимось чином виконувати код.

Насамперед нас цікавлять файли, власник яких — root.

Знайти їх можна руками, такою командою:
як варіант - можна пошукати у виведенні тулз, які я перерахував вище. Так чи інакше, якщо знайдете файли з подібними дозволами, це означає, що у вас є шанс отримати root права.

Ось висновок таких файлів із LinEnum.sh.


Як отримати права root у Linux, зображення №3



З цікавих файлів – find. LinEnum навіть услужливо його підсвітив окремо.

Як отримати права root у Linux, зображення №4



Це дозволить досить легко отримати привілеї.

Як отримати права root у Linux, зображення №5



Linux Capabilities
Так як попередній спосіб дає надлишкові права файлів, у 1997 році була придумана ідея додаткових дозволів - linux capabilities . Якщо коротко, то ідея у тому, щоб давати повні привілеї, лише частина, необхідну виконання завдання.

Як це використовується? Для початку знайдемо такі файли в системі.

getcap -r/2>/dev/null
А ось результат.

Як отримати права root у Linux, зображення №6



Класичний приклад ілюстрації - це виконуваний файл tar з роздільною здатністю cap_dac_read_search+ep, який дозволяє йому читати будь-який файл у системі. Це означає, наприклад, можливість отримати архів із файлом /etc/shadow, який від імені звичайного користувача недоступний для читання. Доступ до цього файлу дасть нам хеші паролів, у тому числі від root, який ми можемо спробувати збрудити.

Ще трапляється порожній дозвіл =ep. Коли виставлена така роздільна здатність (є знак «рівно» на початку, і не перерахований список дозволів), це означає, що файлу надані всі можливі дозволи. У прикладі такі дозволи є у файлу openssl.

Цей приклад дозволить нам прочитати файл /etc/shadow.

Згенеруємо ключі.

Як отримати права root у Linux, зображення №7



Запустимо веб-сервер.

Як отримати права root у Linux, зображення №8



І прочитаємо файл.

Як отримати права root у Linux, зображення №9


Далі ми можемо просто згенерувати новий shadow та перезаписати їм системний. Створимо новий хеш, замінимо їм хеш (у прикладі — знак оклику) і підготуємо файл для заливання.

Як отримати права root у Linux, зображення №10

Як отримати права root у Linux, зображення №11



Копіюємо його в /etc/shadow і логінимся.

Як отримати права root у Linux, зображення №12



Cron
Cron - це служба Unix, яка використовується для періодичного виконання скриптів. Дії описуються у файлі /etc/crontab та спеціальних каталогах (наприклад, /etc/cron.daily).

Як отримати права root у Linux, зображення №13


Скрипти використовуються для найширшого спектра завдань - від створення бекапу за розкладом до очищення директорії /tmp.

Якщо у таких скриптів неакуратно виставлені привілеї, це може стати знахідкою для атакуючого. Коли адміністратор ставить привілеї абияк, «просто щоб працювало», він цілком може написати chmod 777, що дозволить нам відредагувати скрипт, що викликається за розкладом. Оскільки cron запускає файли від імені root, ніщо не заважає викликати рутовий шелл разом зі скриптом.

Sudo
Програма sudo дозволяє виконувати команди від імені суперкористувача (або інших користувачів системи). Її конфіг знаходиться в / etc / sudoers, і, як правило, помилки в цьому конфізі відкривають можливості ескалації привілеїв. Сценаріїв використання - безліч, можна обирати за ситуацією. Один із таких варіантів нижче.

Перевіряємо, які є дозволи у sudo.

Як отримати права root у Linux, зображення №14


Тут редактор vi можна відкрити без пароля, і він запуститься від імені root. У цьому випадку найпростіше виконати шелл через редактор, який також запуститься від рута.

Як отримати права root у Linux, зображення №15

Іноді адміни дають дозвіл на запуск звичайних скриптів sh і залишаються доступними для запису. Їх, звичайно ж, можна використовувати для отримання шелла та будь-яких інших дій.

Ще один спосіб аб'юзити sudo - можливість впроваджуватися в процес з діючим токеном.

Експлоїти для ядра
Як і в будь-якій іншій програмі, в ядрі Linux теж є вразливість. Іноді ці вразливості дозволяють отримати права root. Як і в інших способах, тут не існує універсального рецепту, і успішна експлуатація залежить від багатьох факторів: версії ядра, наявності необхідних дозволів або файлів і навіть наявності потрібного заліза (наприклад, вразливого перед процесором Meltdown).

На скріншоті нижче пошук експлоїтів для ядра Linux в Kali.

Як отримати права root у Linux, зображення №16

При різноманітті варіантів експлуатації не всі вони виявляться робітниками. Може бути експлоїту під конкретне ядро, чи версія ядра правильна, але вже пропатчено. Деякі експлоїти працюють нестабільно. І так далі.

Напевно багато хто пам'ятає вразливість у ядрі, відому як Dirty COW. Баг дозволяє спровокувати стан гонки, а це призводить до того, що користувач без привілеїв отримує доступ на запис до memory mappings (хоча доступ повинен бути тільки читання) і може підвищити свої привілеї до root.

Існує кілька експлоїтів для цієї вразливості.

Як отримати права root у Linux, зображення №17

На конкретній системі працюватимуть не всі з них, тому завжди є сенс перебирати різні варіанти.

Інші приклади вразливостей підвищення привілеїв:

  • CVE 2017-16995;

  • CVE 2013-1959;

  • CVE 2012-0056;

  • CVE 2010-3904.

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

Висновок
Способів отримати рут права в Linux - безліч, і я тут пройшовся тільки по найочевидніших і найпоширеніших. Тим, що трапляються і в реальному житті, і на CTF, і на іспитах.

Для публікації повідомлень створіть обліковий запис або авторизуйтесь

Акаунт

Навігація

Пошук

Пошук

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.