Карьерный ускоритель: от CTF к профессии белого хакера
Заполни форму, и видео запустится здесь же.
Готово. Видео появится здесь, как только загрузим его.
Нажимая кнопку, соглашаешься с обработкой персональных данных

О чём эфир
Решаешь CTF или только собираешься? Поймёшь, почему регулярные задачи ускоряют путь в профессию и чем они отличаются от рабочих проектов.
Основная часть: три задачи с решением. Первая про повышение привилегий: права sudo с wildcard, защита от симлинков и обход через гонку с cron.
Вторая про pivoting: SOCKS-прокси через Chisel, сканирование изолированной сети и вход в админку. Третья про ядро: Dirty COW в среде без SUID-бинарников с эксплойтом, переписанным под задачу.
Плюс подход к задачам: методики и чек-листы. В блоке вопросов: корпоративные сети, инструменты для pivoting и место AI в практике.

Забери материалы эфира
Материалы одним файлом: вернись к ним, когда будешь повторять на практике.
Скачать материалыРазбор эфира по темам
Как стать белым хакером: зачем решать CTF-задачи до первой работы
Кибербезопасность одна из немногих областей, где навык можно отработать заранее, в учебном виде, а не только когда уже вышел на работу. CTF-задачи (Capture the Flag: на учебном стенде нужно добраться до флага) ускоряют путь в профессию белого хакера. Собеседование часто строят вокруг тех же сценариев, что встречаются в задачах, и тот, кто их прорешал, приходит уже подготовленным. Новую задачу One Task выдают каждую неделю, решать можно в любое время.
Инструмент не заменяет понимания: если понимаешь, как устроена система, доведёшь задачу до результата и руками, и с помощью сильного инструмента.
Если понимания нет, инструмент не спасёт. Ценность задач не в том, чтобы запомнить готовый порядок кнопок, а в том, чтобы научиться строить и проверять гипотезы.
Теория тоже очень важна, но без практики она мертва. Можно подряд прочитать несколько книг и пройти курсы, но пока не закрепишь это на практике и не проверишь, что действительно понял, оно просто не запомнится.
Ярослав ШмелевМетодология пентеста бьёт случайный перебор
Две типичные ошибки на старте в пентесте (тестировании на проникновение): нет методологии и нет записей по ней. Самый слабый подход это держать в голове кучу приёмов и случайно вспоминать, чему учился: вспомнил, попробовал, не вышло, вспомнил другое. Так легко пропустить вектор и потратить много сил впустую.

Рабочий порядок это цикл OODA:
- 1
Наблюдение. Собираешь, что известно о цели.
- 2
Ориентация. Выдвигаешь несколько самых вероятных гипотез.
- 3
Решение. Выбираешь, что конкретно сделать.
- 4
Действие. Пробуешь, а если не вышло, повторяешь цикл с поправкой.
Важная часть цикла это выводы: без них можно бесконечно спотыкаться на одном месте.
Упал инструмент, эксплойт положил машину вместо повышения прав, сканер сработал странно: из каждого такого случая стоит сделать вывод и поменять технику, чтобы в следующий раз проблема не повторилась.
Классическая ошибка это не иметь списка того, что нужно проверить, и просто случайно вспоминать: учил такое, учил такое, давай посмотрим, есть ли оно тут. Это подход отмычки: один известный ключ на кучу дверей. На стенде он обычно не срабатывает.
Ярослав ШмелевЗаписи нужны ещё и потому, что одну и ту же ошибку конфигурации ты увидишь сегодня в задаче, завтра на собеседовании, послезавтра в рабочем кейсе. Если всё задокументировал, потом вернёшься к готовому ответу и быстро адаптируешь его под похожую ситуацию. Для начинающих полезны публичные методички, например HackTricks, где расписано, что проверять в каждом сценарии, включая повышение привилегий в Linux.
Чем CTF отличается от боевого пентеста
У учебной CTF-задачи есть гарантированное решение: если её не удаётся решить, значит, задача плохая. В работе так не бывает. Хост может иметь кривую конфигурацию, которая ни к чему не ведёт. Уязвимость может существовать, но не эксплуатироваться нужным образом, и чтобы её дожать, уйдёт слишком много времени.

Навык, который задачи тренируют хорошо: быстро проверять гипотезы и выбирать приоритетные направления.
Ещё отличия. На стенде почти нет ответственности за поломку: уронил машину эксплойтом ядра, стенд перезагрузят. В работе та же ошибка это финансовые потери заказчика и неустойки твоему работодателю. На стенде систему никто не защищает, а в боевом пентесте будут и люди на той стороне, и защитные средства. И масштаб: в задаче один изолированный вектор, в настоящей сети тысячи машин, и большинство путей окажутся тупиками.
Поэтому старт логично выстроить по шагам. Сначала задачи на одну технику, чтобы отработать конкретный навык, по аналогии с юнит-тестами в программировании. Потом задачи, где нужно самому понять, что из арсенала применить. Это ближе к интеграционному тесту и к среде, которая имитирует корпоративную сеть с типовыми сервисами, базами данных и каталогом.
Повышение привилегий в Linux: ошибка в правах sudo открывает путь к root
Первый стенд, Backup, выглядит просто, но в одну кнопку не решается. Доступ дан обычному пользователю по ssh, и есть правило sudo на удаление файлов внутри одной директории. Ошибка в том, что в правиле используется wildcard, а он позволяет подставлять произвольные параметры с обеих сторон. Отсюда гипотеза: получится ли выйти за пределы разрешённой директории.

В Linux повышение привилегий собирается из маленьких примитивов: произвольная запись файла, чтение, удаление. Здесь первый примитив это удаление. Через символическую ссылку путь не проходит, потому что включена защита fs.protected_symlinks: ядро не даёт обычному пользователю подсунуть root симлинк на чужой файл. Зато срабатывает особенность работы с путями. Через конструкцию с выходом на уровень выше можно собрать имя так, что под правило попадает любой файл в системе. Так примитив расширяется до удаления произвольного файла.
Дальше нужен второй примитив. Монитор процессов, который следит за /proc и не требует прав root, показывает, что раз в короткий промежуток запускается скрипт от имени root: он создаётся во временной папке, получает право на исполнение и запускается. Атака через симлинк закрыта, поэтому путь другой. Удалить свежесозданный скрипт и положить на его место свой. Это гонка: окно между созданием и запуском около тридцати секунд. Полезная нагрузка минимальная, скопировать root-флаг в доступное место и выставить права на чтение. Со второй попытки флаг оказывается в руках.
Вывод по этому стенду шире самого решения.
Сначала смотришь на доступные векторы, потом из имеющихся примитивов конструируешь путь.
Таких уязвимостей много, и выглядят они по-разному: где-то задача запускается раз в минуту и попыток хватает, где-то раз в день, и собрать всё правильно нужно почти с первого раза. Отсюда привычка тестировать у себя на стенде, а не на чужом проде.
Pivoting через Chisel: как провести трафик в закрытую сеть
Второй стенд про pivoting, то есть трансляцию трафика через скомпрометированный сервер: за сервером спрятана изолированная сеть, в ней нужно найти веб-админку и войти. Сложность в том, что штатная трансляция трафика через ssh на этом сервере запрещена конфигурацией, а прав пользователя не хватает, чтобы её поменять. Сам сервер оказался на архитектуре MIPS, что добавляет возни со сборкой инструментов.

Решение через Chisel, который поднимает SOCKS5-прокси. Тонкость в направлении: по умолчанию клиент подключается к серверу и ходит через него, а здесь нужен обратный режим, когда скомпрометированная машина сама подключается к атакующему и открывает ему проход внутрь. Chisel под целевую архитектуру сначала падал с segmentation fault: свежие сборки используют инструкции, несовместимые со старой системой под эмуляцией. Помог даунгрейд версии на пару лет назад, обычный бинарный поиск по версиям до рабочей.
Сканировать сеть через прокси лучше инструментом, который сам умеет работать по SOCKS, а не гнать nmap через proxychains: так он работает плохо. Жадничать числом подключений не стоит, иначе упираешься в лимит открытых файлов и ловишь ложные срабатывания, порядка шестнадцати соединений в секунду достаточно. Отдельный момент: внимательно читай условие, перепутанная подсеть (сканируешь 152.152 вместо 151.151) стоит времени. Найденную админку открываешь через браузер с прокси и Burp Suite в цепочке, а пароль к тестовой панели нередко угадывается с первого раза на admin и admin.
Dirty COW: когда готовый эксплойт ядра Linux не запускается
Третий стенд самый сложный: уязвимая версия ядра Linux, но готовые эксплойты к ней не работают. Окружение минимальное, ядро старое, из бинарников только BusyBox, и ни один из них не SUID. Уязвимость это Dirty COW, которая затрагивает ядра примерно с 2009 по 2016 год. Стандартные стратегии с её сайта тут бесполезны: перезаписать /etc/passwd можно, но толку нет, потому что нечем повысить права, SUID-бинарника для подмены шелла в системе просто нет.

Выход нашёлся через vDSO, виртуальную динамическую библиотеку, которую ядро отдаёт для лёгких системных вызовов вроде получения времени. Фоновый процесс на стенде периодически дёргает clock_gettime, а эта функция идёт через vDSO, значит, его можно пропатчить и подложить свой код, который выполнится при вызове.
Готовая нагрузка эксплойта тоже не запускалась: она поднимает reverse shell, а в её коде вызываются функции с параметрами, недопустимыми для BusyBox, и BusyBox на этом ломается. Решение минимальное, не переписывать весь эксплойт, а вставить в полезную нагрузку один вызов: сменить права на нужный файл через chmod. В старом ядре нет защиты fs.protected_symlinks, поэтому символическая ссылка на цель срабатывает. Собирать эксплойт нужно статически, чтобы он не зависел от библиотек атакуемой машины.
Проверять всё это удобно локально:
- 1
Распакуй образ initramfs. Это обычный архив, он распаковывается и запаковывается через cpio.
- 2
Подними ядро со стендом в QEMU.
- 3
Положи туда тестовый флаг и прогони эксплойт. Если права на файл меняются на 777, нагрузка отработала.
- 4
Доставь собранный бинарник на цель через простой HTTP-сервер на Python и запусти. Флаг получен.
Приёмы из CTF, которые переносятся в работу пентестера
Несколько вещей из разбора CTF-задач пригодятся далеко за пределами учебных стендов.
- Для pivoting без прав root подойдут инструменты туннелирования вроде ngrok, они дают примерно те же возможности без sudo. Клиенты pivoting часто встроены во фреймворки, и трафик любого инструмента можно пустить через ту же цепочку.
- Статическая сборка эксплойта снимает зависимость от версий библиотек на атакуемой машине, это общая страховка, а не частность одной задачи.
- Отдельное минимальное окружение в QEMU с распакованным initramfs экономит время: сломанную гипотезу проверяешь на своём стенде за секунды, а не на цели.
- Для корпоративных сетей в первую очередь стоит разобраться с Active Directory: он есть почти везде, и его редко заменяют на аналоги.
- Ассемблер нужен там, где штатная нагрузка не предусмотрена под пограничное окружение: пара строк кода заставляет эксплойт работать в условиях, которых автор не закладывал.
Про AI-инструменты вывод сдержанный.
Большие языковые модели, в том числе локальные, годятся как консультант, но замещать ими процесс решения не стоит.
Сильный инструмент не компенсирует пробел в понимании: кто не разобрался, как работает система, тому средства не помогут.
Одно из главных качеств специалиста это умение продолжать разбираться, несмотря на фрустрацию. Она возникает с каждым продвижением, и это нормально для всех. А на самых первых этапах важно пройти через всё это самому.
Ярослав ШмелевЕщё эфиры по теме
Тема:ПентестКарьера639 участниковХод мысли на собеседовании важнее готового ответа. Два технических интервью целиком: junior по вебу, middle по инфраструктуре. Где проходит граница между уровнями?
Тема:Пентест1079 участниковНи одной учётной записи, а домен уже выдаёт о себе много. Карта кратчайшего пути к администратору домена и кейс, где изоляцию двух доменов обошли через пароли из сетевой папки.
Тема:Пентест79 участниковОдна кавычка ломает запрос к базе. А условие OR 1=1 может изменить данные всех пользователей банка. Практика: перехват запросов в Burp Suite, поиск инъекции в API, выгрузка пользователей из базы.