Главная / Блог / Linux для CTF с нуля: файловая система, права доступа и поиск флагов — практический чеклист

14 мин.00

Linux для CTF с нуля: файловая система, права доступа и поиск флагов — практический чеклист

Linux для CTF с нуля: файловая система, права доступа и поиск флагов — практический чеклист

Linux для CTF с нуля: файловая система, права доступа и поиск флагов — практический чеклист

На первом easy-боксе HackTheBox я потратил два с половиной часа — не на эксплуатацию уязвимости, а на то, чтобы найти файл flag.txt. Эксплойт нашёлся за минуту. А дальше — слепое тыканье по каталогам, потому что не знал ни find, ни структуру каталогов, ни как прочитать вывод ls -la. На каждом буткемпе, который веду для новичков, картина та же: люди приходят изучать хакинг, а застревают на уровне «как перейти в другой каталог». Ни один YouTube-ролик про взлом не покажет этот момент — а именно он отделяет того, кто решит первый таск, от того, кто бросит через час. Эта статья — чеклист, который закрывает разрыв между «установил Kali» и «нашёл первый флаг».

Файловая система Linux для новичков — карта территории

В CTF-задании после получения шелла на целевой машине первое действие — осмотреться. Не знаешь, где что лежит — осмотр превращается в хаотичный перебор каталогов. Linux — не Windows с дисками C:\ и D:\. Здесь всё начинается с единственного корня /, и у каждого каталога своя роль. Подробнее — в нашем статье о linux для пентестера.

Структура каталогов: что проверять первым делом

Заучивать все двадцать каталогов верхнего уровня не нужно. Для CTF критичны шесть-семь, где обычно прячут флаги и полезную информацию. Вот карта, которую стоит запомнить:

Каталог Что внутри Почему важен для CTF
/home Домашние директории пользователей Флаги user.txt, SSH-ключи в .ssh/, конфиги, .bash_history
/root Домашняя директория суперпользователя Финальный флаг root.txt после повышения привилегий
/etc Конфигурационные файлы системы Пароли (/etc/shadow), список пользователей (/etc/passwd), конфиги сервисов
/tmp Временные файлы, доступные всем на запись Куда загружать свои инструменты, скрипты от cron-задач
/var Логи, данные веб-серверов, почта /var/www/html — файлы сайта, /var/log — логи с подсказками
/opt Стороннее ПО Кастомные приложения с уязвимостями, нестандартные скрипты
/dev/shm Tmpfs в оперативной памяти Альтернатива /tmp для загрузки инструментов — быстрее и иногда менее контролируется

Мнемоника: Home — Root — Etc — Tmp — Var — Opt. Не самое элегантное сокращение, но после пяти-шести боксов пальцы сами набирают cd /home && ls -la.

Осмотр файловой системы — техника File and Directory Discovery (T1083, Discovery) в терминологии MITRE ATT&CK. Буквально первое, что делает атакующий после получения доступа к системе. В CTF — аналогично: получил шелл, осмотрелся, наметил цели.

Пути в Linux — абсолютные и относительные

Абсолютный путь начинается с / и описывает полный адрес от корня: /home/user/flag.txt. Относительный отсчитывается от текущего каталога: ./flag.txt, ../admin/notes.txt. Две точки .. — переход на уровень выше, одна точка . — текущий каталог.

Классическая ошибка: выполнить cat flag.txt, находясь не в той директории, и решить, что файла не существует. Команда pwd (print working directory) показывает, где вы сейчас. Если pwd возвращает /home/user, а нужный файл лежит в /home/admin/flag.txt — потребуется абсолютный путь или cd ../admin/.

Ещё один подводный камень — скрытые файлы. В Linux файл, чьё имя начинается с точки (.secret, .bash_history, .ssh), не показывается обычным ls. Только ls -a или ls -la выведет его. На буткемпах из десяти новичков минимум шестеро пропускают скрытые файлы в первом задании. Голый ls без флагов — ловушка, в которую попадают все.

Базовые команды Linux для CTF — минимальный рабочий набор

Требования к окружению

Перед тем как переходить к практике:

  • ОС: Kali Linux 2023.4+ (рекомендуется), Ubuntu 22.04+, Parrot OS. Подойдёт любой дистрибутив с bash
  • RAM: минимум 2 ГБ для виртуальной машины, 4 ГБ рекомендуется (Kali + браузер + VPN)
  • CPU: 2 ядра
  • Виртуализация: VirtualBox 7+ или VMware Workstation Player (бесплатный)
  • Сеть: подключение к TryHackMe или HackTheBox через OpenVPN или встроенный VPN-клиент платформы
  • Offline-режим: все команды ниже работают на любой Linux-VM без интернета, но для CTF-платформ нужен VPN

Навигация и осмотр: cd, ls, cat, id

Набор команд, без которого не решается ни одно CTF-задание на Linux:

  • cd /path — перейти в каталог. cd ~ — домашняя директория, cd - — предыдущий каталог (удобная штука, про которую мало кто знает на старте)
  • ls -la — вывести все файлы включая скрытые, с правами, владельцем и размером. Это ваш дефолтный ls — привыкайте набирать именно так
  • cat filename — вывести содержимое файла. Для больших файлов — less filename (навигация стрелками, выход — q)
  • pwd — показать текущий каталог (когда потерялись в дереве директорий)
  • id — под каким пользователем работаете, в каких группах состоите. Если id показывает uid=0(root) — привилегии уже максимальные, дальше можно не поднимать
  • whoami — имя текущего пользователя (короче id, но без информации о группах)
  • uname -a — версия ядра, архитектура системы. Это System Information Discovery (T1082, Discovery) — помогает определить, какие эксплойты ядра применимы для повышения привилегий

Первые три команды после получения шелла — id, pwd, uname -a. Они отвечают на три вопроса: кто я, где я, что за система. Без ответов на них дальнейшие действия — стрельба вслепую.

find и grep для поиска файлов и содержимого

Две команды, которые закрывают 80% задач по поиску флагов в CTF. Если из всей статьи запомните только их — этого хватит для первых десяти боксов.

find ищет файлы по имени, типу, правам, владельцу и времени модификации:

  • find / -name "flag.txt" 2>/dev/null — искать файл flag.txt начиная от корня. Суффикс 2>/dev/null подавляет ошибки «Permission denied» (их будет десятки)
  • find / -name "*.txt" -user root 2>/dev/null — все txt-файлы, принадлежащие root
  • find /home -name ".*" -type f 2>/dev/null — скрытые файлы в домашних каталогах
  • find / -writable -type d 2>/dev/null — директории с правом записи (куда можно загрузить инструменты)

grep ищет текст внутри файлов:

  • grep -r "flag{" /home/ 2>/dev/null — рекурсивно искать строку flag{ по всем файлам каталога /home
  • grep -ri "password" /etc/ 2>/dev/null — искать слово «password» без учёта регистра в конфигах
  • grep -l "CTF" /var/www/ 2>/dev/null — вывести только имена файлов, содержащих «CTF», без самого содержимого

Связка find + grep — основной инструмент для техники Credentials In Files (T1552.001, Credential Access). Атакующие ищут пароли, SSH-ключи и API-токены, забытые в конфигурационных файлах. В CTF это работает буквально: grep -ri "password" /var/www/ нередко выдаёт учётные данные базы данных прямо из конфига веб-приложения. Вот так просто — grep и готово.

Самая частая ошибка: забыть 2>/dev/null. Без этого суффикса терминал заваливается строками «Permission denied», и полезные результаты теряются в потоке мусора. На буткемпах показываю это в первые пять минут — и всё равно половина группы забывает через полчаса. Ничего страшного, через пару боксов станет рефлексом.

Права доступа Linux chmod — rwx, числовая нотация и SUID-бит

Как читать строку прав rwxr-xr-x

Выполните ls -la в любом каталоге — увидите столбец с непонятными символами слева. Разбираем:

-rwxr-xr-x 1 root root   68208 Jul 15 10:00 /usr/bin/passwd
drwxr-x--- 2 admin admin   4096 Jul 15 10:00 secret/
-rw------- 1 root shadow    891 Jul 15 10:00 /etc/shadow
-rwsr-xr-x 1 root root   12345 Jul 15 10:00 /usr/local/bin/backup

Первый символ: - — обычный файл, d — директория, l — символическая ссылка. Дальше — три тройки по три символа:

  • Позиции 1–3: права владельца (user)
  • Позиции 4–6: права группы (group)
  • Позиции 7–9: права остальных (others)

Каждая позиция: r (read, чтение, вес 4), w (write, запись, вес 2), x (execute, выполнение, вес 1). Дефис - — право отсутствует.

Разберём строку -rw------- для /etc/shadow: владелец (root) может читать и писать (rw-), группа и все остальные — ничего (---). Поэтому для чтения хешей паролей нужны привилегии root — это защита, описанная как техника /etc/passwd and /etc/shadow (T1003.008, Credential Access).

Числовая нотация chmod складывает веса: rwx = 4+2+1 = 7, r-x = 4+0+1 = 5, r-- = 4+0+0 = 4, --- = 0. Отсюда: chmod 755 script.sh даёт rwxr-xr-x, а chmod 600 secret.txt даёт rw-------.

Типичная ошибка новичков — ставить chmod 777 на всё подряд, «чтобы заработало». Это даёт полный доступ всем пользователям системы, что в реальной инфраструктуре — Security Misconfiguration (OWASP A05:2021). В CTF chmod 777 на файл с паролями означает, что любой пользователь может его прочитать — иногда это и есть вектор атаки, заложенный создателем задания.

SUID-бит и повышение привилегий в CTF

SUID (Set User ID) — специальный бит, при котором программа выполняется не с правами запустившего пользователя, а с правами владельца файла. Если бинарник принадлежит root и имеет SUID-бит — любой пользователь, запустив его, временно получает root-привилегии. Звучит как дыра? Иногда так и есть.

В выводе ls -la SUID обозначается буквой s вместо x в позиции владельца. В примере выше /usr/local/bin/backup имеет -rwsr-xr-xs вместо x у владельца, SUID активен.

Некоторые SUID-бинарники — нормальное поведение системы: /usr/bin/passwd нуждается в root-правах, чтобы записать новый хеш в /etc/shadow. Но если SUID-бит установлен на интерпретаторе (python3, perl, bash) или утилите вроде find, vim, nmap старых версий — это прямой путь к root-шеллу. Техника Setuid and Setgid (T1548.001, Privilege Escalation).

Поиск SUID-бинарников: find / -perm -4000 -type f 2>/dev/null. Каждый нестандартный результат (не /usr/bin/passwd, не /usr/bin/sudo, не /usr/bin/mount) проверяйте на GTFOBins (gtfobins.github.io) — проект каталогизирует эксплуатационные пути для десятков Unix-утилит. Например, find с SUID-битом может дать root-шелл командой: find . -exec /bin/sh -p \; -quit. Нюанс: на Debian/Ubuntu /bin/sh — это dash, который может не поддерживать флаг -p для сохранения effective UID. В таких случаях используйте find . -exec /bin/bash -p \; -quit (bash с -p не сбрасывает привилегии). Проверяйте актуальную команду на GTFOBins.

SUID на интерпретаторах (Python, Perl, Ruby) — один из самых надёжных векторов privilege escalation на практике. Эти инструменты дают слишком широкий контроль над системными вызовами, чтобы безопасно работать от имени root. Увидели SUID на Python — считайте, что root у вас в кармане.

[Применимо: CTF jeopardy и easy/medium боксы HackTheBox/TryHackMe. На hardened-продакшне нестандартные SUID-бинарники встречаются реже, а MAC-политики (SELinux, AppArmor) могут блокировать эксплуатацию даже при наличии бита.]

Поиск флагов CTF Linux — пошаговый чеклист новичка

Чеклист ниже — последовательность действий после получения шелла на целевой Linux-машине. Каждый шаг — звено в цепочке: discovery (осмотр) через credential access (поиск учётных данных) к privilege escalation (повышение привилегий). Работает для jeopardy-CTF и easy/medium боксов.

Разведка системы

Первые команды после получения шелла — без них непонятно, с чем работать:

id                              # кто я? uid, gid, группы
uname -a                        # ядро, архитектура
cat /etc/os-release             # дистрибутив и версия
which find grep chmod           # проверяем наличие ключевых утилит
sudo -l                         # что можно запускать через sudo?
cat /etc/passwd                 # список всех пользователей

Команда sudo -l — тут внимательно. Если в выводе есть строка (ALL) NOPASSWD: /usr/bin/vim — это мгновенный root: внутри vim выполняете :!/bin/bash и получаете шелл суперпользователя. Техника Sudo and Sudo Caching (T1548.003, Privilege Escalation). Если sudo -l просит пароль — не застревайте, переходите к следующим шагам и вернётесь, когда найдёте учётные данные.

Файл /etc/passwd не требует привилегий root и содержит список всех пользователей системы. Ищите пользователей с shell /bin/bash или /bin/sh — именно у них стоит проверять домашние каталоги на наличие флагов.

Поиск файлов и данных

Порядок — от самого вероятного к менее очевидному:

# Прямой поиск флагов
find / \( -name "flag*" -o -name "user.txt" -o -name "root.txt" \) 2>/dev/null

# Поиск по формату флага (подставьте формат вашего CTF)
grep -r "flag{" / 2>/dev/null
grep -r "CTF{" / 2>/dev/null

# Скрытые файлы в домашних каталогах
find /home -name ".*" -type f 2>/dev/null

# SSH-ключи (приватные ключи = доступ к другим аккаунтам)
find / -name "id_rsa" -o -name "id_ed25519" 2>/dev/null

# Пароли в конфигах
grep -ri "password\|passwd\|credentials\|secret" /etc/ /var/ /opt/ 2>/dev/null

# Недавно изменённые файлы (за последние 30 минут)
find / -mmin -30 -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null

# Файлы, принадлежащие текущему пользователю (вне домашней директории)
find / -user $(whoami) -not -path "/home/*" -not -path "/proc/*" 2>/dev/null

Нашли SSH-ключ (id_rsa)? Можно использовать для входа под другим пользователем: chmod 600 id_rsa && ssh -i id_rsa user@localhost. Не забудьте chmod 600 — SSH откажется работать с ключом, доступным на чтение другим пользователям. Без этого получите ошибку и будете гадать, что не так (проверено на себе).

Проверка SUID, sudo и capabilities

Три команды для поиска векторов повышения привилегий:

  • find / -perm -4000 -type f 2>/dev/null — SUID-бинарники
  • find / -perm -2000 -type f 2>/dev/null — SGID-бинарники (менее распространённый вектор, но проверить стоит)
  • getcap -r / 2>/dev/null — Linux capabilities (реже встречается на easy-боксах, но cap_setuid+ep на Python или другом интерпретаторе даёт аналогичный результат — root-шелл, хотя механизм иной: capabilities — гранулярные права ядра, а не подмена UID. Команда эксплуатации отличается от SUID — проверяйте секцию «Capabilities» на GTFOBins для конкретного бинарника)

Каждый нестандартный результат — проверяете на GTFOBins. Нестандартный — всё, что не /usr/bin/passwd, /usr/bin/sudo, /usr/bin/mount, /usr/bin/su. Если в списке оказался /usr/bin/python3, /usr/bin/vim, /usr/bin/find, /usr/bin/bash — это вектор к root. Бинго.

История команд и переменные окружения

Техника Shell History (T1552.003, Credential Access) — предыдущие пользователи могли наследить:

  • cat ~/.bash_history — история команд текущего пользователя
  • cat /home/*/.bash_history 2>/dev/null — история всех пользователей (если есть доступ на чтение)
  • env или printenv — переменные окружения: иногда пароли хранятся в DB_PASSWORD, SECRET_KEY, API_TOKEN
  • cat /etc/shadow — хеши паролей (требует root или группу shadow)

В .bash_history регулярно встречаются пароли, набранные по ошибке в командной строке: mysql -u root -p password123, sshpass -p 'MyS3cret' ssh admin@192.168.1.10. Это не гипотетическая ситуация — создатели CTF-заданий специально оставляют такие артефакты, потому что в реальной жизни люди делают это постоянно. Я сам находил пароли в .bash_history на реальных проектах — не раз и не два.

Ограничения чеклиста и когда нужны другие инструменты

Описанный чеклист покрывает easy-боксы и большинство medium-заданий в jeopardy-CTF. Но есть ситуации, когда его не хватит.

Контейнерные среды (Docker/LXC). Файловая система может быть минималистичной — нет привычных /home, /opt, утилита find может отсутствовать. Тогда ls -laR / для рекурсивного обхода или which find grep для проверки доступных инструментов.

Hardened-системы с MAC-политиками. На medium/hard боксах с настроенным SELinux или AppArmor SUID-бинарники могут быть ограничены в действиях даже при наличии бита. Команда find / -perm -4000 вернёт результаты, которые невозможно эксплуатировать из-за MAC-политик. Проверьте getenforce (SELinux) или aa-status (AppArmor), чтобы понять, с какой защитой имеете дело.

Ограниченные шеллы. Получили rbash или lshell — часть команд будет заблокирована. Проверьте echo $SHELL и попробуйте выйти из ограничения: python3 -c 'import pty; pty.spawn("/bin/bash")' или /bin/bash -i. Ограниченный шелл — это неприятно, но обычно обходится за пару минут.

Динамические задания с cron. Иногда флаг генерируется скриптом по расписанию и не хранится в файле постоянно. Команды cat /etc/crontab и ls -la /etc/cron.* покажут запланированные задачи. Утилита pspy (загружается на машину отдельно) показывает процессы в реальном времени без root-привилегий — незаменима для обнаружения задач, запускаемых от root.

Автоматизация для средних и сложных боксов. LinPEAS — скрипт автоматической разведки, проверяющий десятки векторов привилегий одной командой. На easy-боксах он избыточен, но на medium и hard экономит час работы. Навык ручного поиска нужен для понимания того, что именно LinPEAS находит и почему помечает результат красным цветом. Без этого понимания вы будете смотреть на вывод LinPEAS как на китайскую грамоту.

Каждая команда из чеклиста — звено в цепочке от initial access (получили шелл через уязвимость) через discovery и credential access (нашли систему, пользователей, пароли) к privilege escalation (повысили права до root). В реальном пентесте на внутренней инфраструктуре шаги те же, но добавляется необходимость уклоняться от SIEM и EDR. В CTF детекции обычно нет — и это делает соревнования идеальной площадкой для отработки фундамента без отвлечения на evasion.

За три года буткемпов я вижу один и тот же паттерн: люди приходят за хакингом, но вязнут в терминале. Это нормальный старт — стыдиться тут нечего. Проблема начинается, когда вместо того чтобы провести вечер с ls -la, find, cat /etc/passwd, новички уходят смотреть очередной ролик «как взломать сервер за 10 минут». Ролик не даёт мышечную память, а мышечная память — единственное, что невозможно компенсировать гуглом в реальном времени. Криптографический алгоритм можно подсмотреть. SQL-инъекцию — скопировать из cheatsheet. Но если не понимаешь, что означает s в -rwsr-xr-x, не поймёшь, почему LinPEAS подсветил бинарник красным, и пропустишь готовый вектор к root. Навигация по Linux и чтение прав доступа — рабочий навык, который отличает человека, решающего таски, от человека, читающего чужие writeup. Если хочется пройти этот путь системно, а не тыкаться в одиночку по YouTube — на IB Basics берут с любого старта и без требований «вы должны знать Linux на уровне X».

🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».

Поделиться

0 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...