Введение в CTF¶
Основы¶
task-based ctf (jeopardy) — игрокам предоставляется набор заданий (тасков), к которым требуется найти ответ. Ответом является флаг — набор символов или произвольная фраза. Каждое задание оценивается различным количеством очков, в зависимости от сложности. Обычно выделяются следующие категории:
- admin - задачи на администрирование.
- joy - различные развлекательные задачи вроде коллективной фотографии или мини-игры.
- ctb - задачи на аудит удалённых машин (crack the box).
- reverse - исследование программ без исходного кода (реверс-инжиниринг).
- stegano - стеганография.
- ppc - задачи на программирование (professional programming and coding).
- crypto - криптография.
- web - задачи на веб-уязвимости, такие как SQL injection, XSS и другие.
- forensics - одна из сложных категорий заданий, сравнимая с PWN.
Рекомендации¶
Обращайте внимание на текст задания, название, адрес. Там могут быть подсказки.
Активно используйте интеренет, некоторые таски специально сделаны с расчетом на это.
- Гуглите все, что вам кажется подсказкой.
Начинайте анализ таска с классических для этой категории способов.
Описание категорий и способы решения¶
admin¶
- Обычно задания, связанные с работой
сисадмина
: восстановление данных, виртуальные машины и т.д. Скорее всего, вам нужно будет просто погуглить, как делается та или инная вещь.
Joy¶
- Обычно какая-то
игра
, в которой нужно найти флаг. Например, пройти карту в какой-нибудь Half-Life.
Reverse¶
- Достаточно сложная категория. Обычно приходится дизассемблерировать, затем редактровать код на ассемблере.
- Но бывают и более простые задания. Сперва следует обратить внимание на
формат файла
, что он из себя представляет. Затем открыть бинарник в текстовом редакторе и пробежать по нему глазами в поисках чего-то интересного. В этом может помочь перевод в hex. В vim это делается командой:%!xxd
, обратно::%!xxd -r
.
Stegano¶
- Стеганография - это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи.
- Чаще всего вам дается изображения в котором скрыт флаг. В самом простом случае он находится на картинке, но его не видно. Тут можно либо пробежаться по каналам, либо сделать
XOR
с оригинальным изображением, если оно есть. Программа для этого указана ниже . - В более сложных случаях в изображении зашит не просто флаг, а какая-то другая информация, которую нужно дальше преобразовать в него.
- Первым делом при решении открываем
Stegsolve
(см. здесь). - Так же есть стега с аудио-файлами, такие задания достаточно сложные.
PPC¶
- Это категория должна вам понравиться! Ничего искать не надо, просто напишите
программу
для автоматизации ваших действий. - Обычно эти таски решаются на
python
, так как это самый удобный язык для прототипирования. - Если вам необходимо делать
POST
иGET
запросы используйте встроенную библиотекуrequests
вpython
. Если вам нужно куда-то подключаться используйтесокеты
.
Crypto¶
- Ознакомьтесь с базовыми
алгоритмами шифрования
тут. Поймите, какой подходит вам. Это пригодится! - Так же бывают таски с
эзотерическими языкми
. Погуглите этот язык и перевидите программу на нормальный для дальнейшего решения. - Если вам дан код программы и выходные данные, просто разберитесь в коде и напишите декодер.
Web¶
- Внимательно осмотрите весь
html код
. - Обратите внимание, какие cookie передаются.
- Посмотрите, что происходит при работе с сайтом: что отправляется и что примается. Используйте встроенный в браузер
отладчик
. - Проверьте сайт на наличие известных папок. Например,
/phpmyadmin
или/admin
. - Проверьте сайт на наличие
sql-injection
. - Если вам необходимо отправить
POST
запрос с вашими параметрами или cookies, будет удобно использовать библиотекуrequests
вpython
.
Forensics¶
Каких-либо универсальных методов решения тасков категории
forensic
нет. Никогда не знаешь, что тебе за инцидент попадется и как с ним справляться.Чаще всего таски решаются использованием
binwalk
.- Получить подробную информацию о содержании файла и распаковать все, что внутри:
binwalk -e file
.
- Получить подробную информацию о содержании файла и распаковать все, что внутри: