Автор темы
На KnightCTF 2024 пять задач из категории networking крутились вокруг одного .pcap-файла: определить IP атакующего, опознать уязвимую службу vsFTPd 2.3.4, найти CVE, установить инструмент эксплуатации и вычислить порт reverse shell. Один артефакт - пять флагов, каждый следующий опирается на предыдущий. Именно такие цепочки прокачивают навык, который OSCP проверяет в первую очередь: способность выстроить полную атаку от разведки до получения шелла. Не "решить задачку", а собрать картину целиком.
Ниже - разбор задач CTF по четырём категориям с конкретными примерами, инструментами и ходом мысли на каждой развилке.
Web-категория CTF: от robots.txt до цепочек эксплуатации
Web встречается почти на каждом CTF-турнире - и одновременно это самая недооценённая категория. Новички считают её простой, потому что entry-level задачи действительно тривиальны. Но разрыв между "прочитать robots.txt" и "выстроить цепочку SSRF через SSTI к RCE" - как между "я знаю HTML" и "я ломаю продакшен". Подробнее - в нашем обзоре создание ctf заданий.
Ход мысли на веб-задаче
Первое действие при получении веб-таска - не запускать сканер, а открыть DevTools. Исходный код страницы, cookies, скрытые поля форм, JavaScript-обработчики. На KnightCTF 2024 задача "Levi Ackerman" решалась за минуту: условие "Levi Ackerman is a robot!" - прямая отсылка к/robots.txt. Переход выдал Disallow: /l3v1_4ck3rm4n.html, а по этому пути лежал флаг. Минута - если знаешь, куда смотреть.На международных CTF соревнованиях веб-задачи давно ушли дальше. Три вектора, которые встречаются чаще всего, от простого к сложному:
SQL-инъекции - классика, маппится на OWASP A03:2021 (Injection). На CTF от OTUS и Volga CTF задача Databases решалась вводом
1" OR "1"="1" -- в поле поиска. Стандартная UNION-based инъекция раскрывала скрытый товар с флагом в описании. Тут важно не просто знать синтаксис: нужно по ответам сервера определить тип СУБД, проверить количество столбцов через ORDER BY, и только потом строить payload. Бездумная подстановка ' OR 1=1-- из шпаргалки - путь в тупик.Манипуляция cookie - второй по частоте вектор. На том же CTF задача Cookies содержала base64-закодированный JSON с полем
is_admin: "False". Декодировать -> изменить на "True" -> закодировать обратно -> подставить. Три минуты работы. Удивительно, сколько реальных приложений до сих пор так "защищают" админку.Многоступенчатые цепочки - тут начинается настоящий CTF. На KnightCTF 2024 задача "Kitty" требовала сначала обойти авторизацию через SQL-инъекцию (
" or 1=1/*), затем обнаружить в JavaScript-коде скрытый обработчик, принимающий cat flag.txt через POST на /execute. Без анализа клиентского JS эндпоинт был невидим - ни один сканер его бы не нашёл. Gobuster бесполезен, если путь генерируется динамически.Инструменты для решения задач CTF в web-категории: Burp Suite для перехвата запросов,
gobuster для фаззинга директорий, ручной curl для нестандартных случаев. На соревнованиях автоматизация часто медленнее ручного подхода - задачи рассчитаны на понимание механики, а не на скорость сканера.Pwn: бинарная эксплуатация и обход защит
Pwn пугает новичков сильнее остальных категорий. И именно поэтому навыки в ней ценятся выше всего. Бинарная эксплуатация - фундамент, на котором строится понимание privilege escalation в OSCP и PNPT.
Алгоритм решения pwn-задачи
Базовый подход, который применим к типовым CTF-задачам:- Определить архитектуру и защиты:
file binary+checksec binaryпокажут x86/x64, наличие NX, PIE, Stack Canary, RELRO. - Загрузить в Ghidra - найти опасные функции (
gets(),strcpy(),scanf("%s")), которые не проверяют размер ввода. - Запустить под GDB с pwndbg - подать паттерн через
cyclic 200из pwntools, определить точное смещение до адреса возврата. - Собрать exploit - перезаписать return address на
system("/bin/sh")или построить ROP-цепочку через ROPgadget.
Три подхода к одной задаче: check-list из pwn.college
На Advent of Pwn 2025 (pwn.college, Arizona State University) бинарник выполнял арифметические трансформации (add, sub) над 1024 входными байтами и сравнивал результат с захардкоженными значениями. Задачу можно было решить тремя способами - и выбор подхода определял разницу между 10 секундами и 10 минутами.Perl-скрипт: парсинг objdump, обратные вычисления
target = val - accumulated_ops. Быстро, но работает только для обратимой арифметики без ветвлений. Для конкретно этой задачи - за глаза.angr (символьное выполнение): создать символьный буфер, запустить
simgr.explore(find=success_addr, avoid=fail_addr). Максимально автоматический подход, но на миллионе операций работает минуты. Зато не надо думать - скормил бинарник и ждёшь.Z3 SMT-solver: парсинг операций из objdump, построение системы уравнений, решение за ~10 секунд для 1 048 576 операций. Вот ядро:
Python:
from z3 import *
input_bytes = [BitVec(f'in_{i}', 8) for i in range(1024)]
state = list(input_bytes)
for op, idx, val in operations:
state[idx] = state[idx] + val if op == 'add' else state[idx] - val
solver = Solver()
for idx, target in targets.items():
solver.add(state[idx] == target)
if solver.check() == sat:
m = solver.model()
solution = bytes(m.eval(b).as_long() for b in input_bytes)
Защиты бинарников и их обход
Понимание защитных механизмов - обязательное условие для решения задач CTF уровня выше начального:| Защита | Что делает | Типичный обход |
|---|---|---|
| NX | Запрет выполнения кода на стеке | ROP-цепочки |
| ASLR | Рандомизация адресов памяти | Info leak через format string |
| Stack Canary | Проверка целостности стека | Утечка canary через побочный канал |
| PIE | Рандомизация базы бинарника | Partial overwrite или info leak |
| Seccomp | Ограничение доступных syscall | io_uring (работал на ядрах до ~5.13; в новых ядрах и hardened-конфигурациях блокируется) |
На pwn.college была задача с seccomp-sandbox'ом, который допускал только
io_uring_setup, io_uring_enter и io_uring_register - ни read, ни write, ни open. Решение: io_uring выполняет файловые операции (OPENAT, READ, WRITE) через ядро, минуя запрещённые syscall. Флаг IORING_SETUP_NO_MMAP позволял работать без mmap. Это уровень, до которого русскоязычные CTF writeup пока редко добираются. (Оговорка: этот обход работал на конкретной конфигурации ядра; в hardened-окружениях io_uring блокируется.)Crypto: CTF-задачи на криптографию
Crypto на CTF - не брутфорс, а математика. Найти слабость в реализации, использовать свойства алгоритма, написать декодер. Если задача решается перебором - скорее всего, ты решаешь не ту задачу.
Три уровня сложности
Кодировки и классика. На CTF от OTUS задача "Algo" маскировала hex-преобразование под "алгоритм хеширования". Строка666c61677b32646733326473323334327d - просто hex-представление ASCII. bytes.fromhex(hex_string).decode() -> flag{2dg32ds2342}. Сюда же - бинарные кодировки: на том же CTF cookie содержал нули и единицы, которые через перевод в ASCII давали JSON-структуру. Такие задачи - разминка, но на них обидно терять время, если не узнал формат с первого взгляда.RSA с уязвимыми параметрами. Маленький экспонент
e, факторизуемый модуль n, общие множители между двумя ключами - RsaCtfTool решает автоматически, SageMath - вручную. Ключевой навык: определить конкретную слабость по предоставленным параметрам. Если e=3 и шифротекст маленький - кубический корень без модуля. Если два ключа с общим p - GCD и дело в шляпе.Кастомные конструкции. AES-CBC с padding oracle, линейные конгруэнтные генераторы с предсказуемым seed, ECDSA с повторным нонсом. Тут нужна теория чисел и умение читать чужой код шифрования. На этом уровне CyberChef уже не спасёт.
Ход мысли: определить алгоритм по структуре данных -> найти слабость реализации -> написать скрипт-декодер. Инструменты:
pycryptodome для работы с примитивами, CyberChef для быстрых преобразований, SageMath для вычислений на конечных полях.Forensics: задачи CTF по цифровой форензике
Forensics - категория без универсального алгоритма. Каждый таск - новый тип артефакта и новый набор инструментов. Но методология всё-таки есть, и она сводится к одному: систематически перебирать слои данных, пока не найдёшь аномалию.
Сетевой трафик
На KnightCTF 2024 цепочка forensics-задач показала полный цикл анализа .pcap:- Protocol Hierarchy в Wireshark - обнаружить, что помимо HTTP присутствует FTP
- Фильтрация:
ip.addr == 192.168.1.8 and ip.addr == 192.168.1.7 and ftp- изолировать трафик между атакующим и уязвимой службой (vsFTPd 2.3.4) - Conversations (Statistics -> Conversations) - выявить аномальный трафик на порту 6200/tcp, характерный для бэкдор-шелла vsFTPd 2.3.4 (CVE-2011-2523, CVSS 3.1: 9.8 CRITICAL, CWE-78)
- TCP Stream Follow - восстановить полную сессию и вытянуть bash_history атакующего
Файловые артефакты
Первая команда при получении неизвестного файла -file для определения формата, затем binwalk -e для извлечения вложенных данных. strings помогает найти читаемые фрагменты в бинарных файлах. Эта тройка - как скальпель, пинцет и лупа для форензика.Для Windows-форензики: NTUSER.DAT через reged для извлечения реестра, .evtx через evtx_dump для журналов событий, USN Journal для истории файловых операций, ConsoleHost_history.txt для истории PowerShell (техника Credentials In Files, T1552.001).
Для дампов памяти - Volatility: извлечение процессов, сетевых соединений, DLL-инъекций. Этот инструмент из CTF-практики переходит прямиком в работу SOC-аналитика - тот же Volatility, те же плагины, только артефакты настоящие.
CTF writeup по категориям: что даёт для сертификации
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Часть русскоязычных CTF writeup фокусируется на web и networking, реже углубляясь в pwn и сложную криптографию. Это формирует искажённое представление: будто CTF - это про SQL-инъекции и Wireshark. На международных соревнованиях уровня DownUnderCTF или hxp CTF web-категория давно ушла в цепочки SSRF -> SSTI -> десериализация, а pwn требует обхода seccomp через ядерные примитивы. Разрыв между тем, что разбирают на русском, и тем, что реально решают на CTFtime, бьёт по тем, кто готовится к OSCP на русскоязычных материалах. Экзамен не проверяет умение декодировать base64 - он проверяет способность собрать полную цепочку от initial access до root-шелла.
Совет: не ограничиваться чтением решений. Брать задачи, в которых ничего не понятно - именно они двигают вперёд. Если после двух часов задача не поддаётся - читать writeup и повторять руками, не копипастить в терминал. Так формируется мышечная память на паттерны эксплуатации. Именно поэтому CTF-тренировка работает лучше с прогрессией и обратной связью. На WAPT эту цепочку проходят в течение двух модулей с лабами - для тех, кому writeups мало и нужен ментор.
Последнее редактирование модератором: