Опубліковано Вівторок в 16:553 дн Адміністратор Вітаю!Отримавши права 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Можна, звичайно, і далі збирати інформацію за допомогою терміналу, але це довго. Набагато простіше та ефективніше використовувати спеціальні інструменти. Найпоширеніші з них:privilege-escalation-awesome-scripts-suite (linPEAS) ;LinEnum ;PXEnum ;linuxprivchecker ;SysEnum ;linux-smart-enumeration .Усі вони працюють однаково: послідовно запускають команди bash або короткі скрипти, а висновок відправляють у stdout чи лог-файл залежно від параметрів.Так виглядає висновок подібного інструменту.LinEnumДавайте тепер розберемо кілька прикладів уразливостей і подивимося, як їх експлуатувати.Забуті критичні даніПерше, що варто перевірити, це забуті критичні дані. Нічого не варто заглянути в домашні папки користувачів і подивитися, чи не зберігає хтось на робочому столі файл із паролем або ключами від чогось необхідного. Це трапляється рідко, але все ж таки трапляється.Іноді облікові дані хардкодять у скриптах та конфігах. Варто також перевірити історію шелла, там також можуть знайтися довгі команди, які містять облікові дані. А іноді буває, що користувач набрав пароль, коли консоль його не просила, і він також збережеться в історії.SUID/GUIDПрапори setuid та setgid дозволяють користувачеві запускати програми від імені власника. Наприклад, коли треба запускати програму від рута, а користувач рутом не є. Найчастіше зустрічається SUID. Встановлюється цей біт легко:chmod +s /bin/scriptЙдеться про те, що програма з таким прапором не зможе робити нічого, крім того, для чого вона призначена. Але оскільки всі ми люди і помиляємось, то це добре часом помилки дозволяють скомпрометувати систему. Найчастіше до можливості підвищити привілеї наводить можливість програми робити запис у файлову систему чи якимось чином виконувати код.Насамперед нас цікавлять файли, власник яких — root.Знайти їх можна руками, такою командою:як варіант - можна пошукати у виведенні тулз, які я перерахував вище. Так чи інакше, якщо знайдете файли з подібними дозволами, це означає, що у вас є шанс отримати root права.Ось висновок таких файлів із LinEnum.sh.З цікавих файлів – find. LinEnum навіть услужливо його підсвітив окремо.Це дозволить досить легко отримати привілеї.Linux CapabilitiesТак як попередній спосіб дає надлишкові права файлів, у 1997 році була придумана ідея додаткових дозволів - linux capabilities . Якщо коротко, то ідея у тому, щоб давати повні привілеї, лише частина, необхідну виконання завдання.Як це використовується? Для початку знайдемо такі файли в системі.getcap -r/2>/dev/nullА ось результат.Класичний приклад ілюстрації - це виконуваний файл tar з роздільною здатністю cap_dac_read_search+ep, який дозволяє йому читати будь-який файл у системі. Це означає, наприклад, можливість отримати архів із файлом /etc/shadow, який від імені звичайного користувача недоступний для читання. Доступ до цього файлу дасть нам хеші паролів, у тому числі від root, який ми можемо спробувати збрудити.Ще трапляється порожній дозвіл =ep. Коли виставлена така роздільна здатність (є знак «рівно» на початку, і не перерахований список дозволів), це означає, що файлу надані всі можливі дозволи. У прикладі такі дозволи є у файлу openssl.Цей приклад дозволить нам прочитати файл /etc/shadow.Згенеруємо ключі.Запустимо веб-сервер.І прочитаємо файл.Далі ми можемо просто згенерувати новий shadow та перезаписати їм системний. Створимо новий хеш, замінимо їм хеш (у прикладі — знак оклику) і підготуємо файл для заливання.Копіюємо його в /etc/shadow і логінимся.CronCron - це служба Unix, яка використовується для періодичного виконання скриптів. Дії описуються у файлі /etc/crontab та спеціальних каталогах (наприклад, /etc/cron.daily).Скрипти використовуються для найширшого спектра завдань - від створення бекапу за розкладом до очищення директорії /tmp.Якщо у таких скриптів неакуратно виставлені привілеї, це може стати знахідкою для атакуючого. Коли адміністратор ставить привілеї абияк, «просто щоб працювало», він цілком може написати chmod 777, що дозволить нам відредагувати скрипт, що викликається за розкладом. Оскільки cron запускає файли від імені root, ніщо не заважає викликати рутовий шелл разом зі скриптом.SudoПрограма sudo дозволяє виконувати команди від імені суперкористувача (або інших користувачів системи). Її конфіг знаходиться в / etc / sudoers, і, як правило, помилки в цьому конфізі відкривають можливості ескалації привілеїв. Сценаріїв використання - безліч, можна обирати за ситуацією. Один із таких варіантів нижче.Перевіряємо, які є дозволи у sudo.Тут редактор vi можна відкрити без пароля, і він запуститься від імені root. У цьому випадку найпростіше виконати шелл через редактор, який також запуститься від рута.Іноді адміни дають дозвіл на запуск звичайних скриптів sh і залишаються доступними для запису. Їх, звичайно ж, можна використовувати для отримання шелла та будь-яких інших дій.Ще один спосіб аб'юзити sudo - можливість впроваджуватися в процес з діючим токеном.Експлоїти для ядраЯк і в будь-якій іншій програмі, в ядрі Linux теж є вразливість. Іноді ці вразливості дозволяють отримати права root. Як і в інших способах, тут не існує універсального рецепту, і успішна експлуатація залежить від багатьох факторів: версії ядра, наявності необхідних дозволів або файлів і навіть наявності потрібного заліза (наприклад, вразливого перед процесором Meltdown).На скріншоті нижче пошук експлоїтів для ядра Linux в Kali.При різноманітті варіантів експлуатації не всі вони виявляться робітниками. Може бути експлоїту під конкретне ядро, чи версія ядра правильна, але вже пропатчено. Деякі експлоїти працюють нестабільно. І так далі.Напевно багато хто пам'ятає вразливість у ядрі, відому як Dirty COW. Баг дозволяє спровокувати стан гонки, а це призводить до того, що користувач без привілеїв отримує доступ на запис до memory mappings (хоча доступ повинен бути тільки читання) і може підвищити свої привілеї до root.Існує кілька експлоїтів для цієї вразливості.На конкретній системі працюватимуть не всі з них, тому завжди є сенс перебирати різні варіанти.Інші приклади вразливостей підвищення привілеїв:CVE 2017-16995;CVE 2013-1959;CVE 2012-0056;CVE 2010-3904.Звісно, це не всі вразливості. Їх набагато більше, і ви завжди можете пошукати їх описаним вище способом або покопатися на сайтах для пошуку вразливості.ВисновокСпособів отримати рут права в Linux - безліч, і я тут пройшовся тільки по найочевидніших і найпоширеніших. Тим, що трапляються і в реальному житті, і на CTF, і на іспитах.
Для публікації повідомлень створіть обліковий запис або авторизуйтесь