CTF-райтапы
Привет, я Шон, и в свободное время мне нравится решать CTF-задачи. Моя текущая должность связана с эксплуатацией бинарных уязвимостей и реверс-инжинирингом ПО, поэтому я обычно сосредоточен на этих категориях. Большинство райтапов, которые я вижу в интернете — отстой, и я надеюсь, что эти объясняют фундаментальные концепции лучше.
Во всех своих решениях я стараюсь включать воспроизводимое решение, написанное с помощью pwntools. Дело не во флагах, а в пути, который привёл нас к флагу.
Надеюсь, это не устареет, но я также записал видеоразборы некоторых из этих CTF-задач. Вы можете посмотреть их на YouTube.
Ниже приведён список общих тем Unix Access и связанных с ними CTF-задач.
Знания Unix Access
Классы уязвимостей
Демонстрация способности эксплуатировать классы уязвимостей
- Написать рабочий шеллкод с нуля и показать все шаги его создания:
- Переполнение буфера в стеке с применением и без применения следующих механизмов смягчения: рандомизация адресного пространства (ASLR), неисполняемая память (NX) и стековые канарейки:
- Переполнение буфера в куче с использованием heap grooming и объектов с указателями на функции:
- Переполнение буфера в куче путём повреждения структур данных кучи:
- Использование после освобождения (UAF) с объектами, содержащими указатели на функции:
- Использование после освобождения (UAF) с объектами, позволяющими произвольное чтение/запись:
- Уязвимости, связанные с путаницей типов данных (type confusion)
- Уязвимости форматных строк для произвольного чтения/записи:
- Как неинициализированные переменные могут использоваться для эксплуатации:
Демонстрация способности реализовывать примитивы эксплуатации
- Примитив произвольной записи:
- Примитив относительной записи:
- Примитив произвольного чтения:
- Как примитивы объединяются в цепочку для построения эксплойта
- Как примитив записи можно использовать для повышения привилегий/выполнения произвольного кода:
Опишите назначение и структуру следующих структур связывания ELF и как ими можно злоупотребить при эксплуатации бинарных уязвимостей
- Таблица процедурных связей (PLT):
- Глобальная таблица смещений (GOT):
Опишите следующие режимы динамической релокации с точки зрения взаимодействия структур данных PLT/GOT и чем различаются примитивы эксплуатации между ними
- Частичный RELRO:
- Полный RELRO:
Демонстрация способности реализовывать ROP/JOP для:
- Поиска ROP/JOP-гаджетов:
- Вызова функций libc и системных вызовов:
- Связывания гаджетов в цепочку для выполнения кода:
- Выполнения произвольного шеллкода
Опишите назначение и реализацию защитных механизмов от эксплуатации
- ASLR
- Предотвращение выполнения данных (DEP)/NX:
- Позиционно-независимые исполняемые файлы (PIE)
- Как PIE влияют на эксплуатацию
- Стековые канарейки:
- Безопасное отцепление списка (safe unlinking)
Реверс-инжиниринг ПО
Сравните техники и сценарии их применения
- Статический реверс-инжиниринг:
- Динамический реверс-инжиниринг:
Продемонстрируйте уверенное владение следующими типами инструментов для статического и динамического реверс-инжиниринга
- Статические дизассемблеры
- Отладчики
- Приёмы автоматизации с использованием перечисленных инструментов
Техники фаззинга
- Слепой фаззинг (dumb fuzzing)
- Фаззинг на основе покрытия кода
- Символическое выполнение
Полезные, на мой взгляд, статьи по CTF