Как LLM CTF решал и коннектор писал (а я призы забирал). ai.. ai. CTF.. ai. CTF. cybersecurity.. ai. CTF. cybersecurity. llm.. ai. CTF. cybersecurity. llm. offzone.. ai. CTF. cybersecurity. llm. offzone. pentest.. ai. CTF. cybersecurity. llm. offzone. pentest. Информационная безопасность.

Привет! Расскажу, как не-хакеру удалось решить CTF таски и залутать призы на сцене главной хакерской конференции OFFZONE.

Меня зовут Пётр Покаместов, я руковожу проектами по пентесту в Singleton Security — общаюсь с клиентами, распределяю загруз коллег, провожу презентации отчётов, а также занимаюсь развитием партнерского направления. Когда есть кислород от проектов – люблю покреативить: сделать компании стикеры и т.д. Постоянно экспериментирую с различными нейронками, так как интересно увидеть возможности, границы, области применения и наблюдать их развитие.
Параллельно преподаю в Бауманке форензику. До прихода в Singleton руководил лабораторией криминалистики и eDiscovery.

C учетом креативных хобби, обожаю ходить на конференции и не мог пропустить Offzone.

Вечером после первого дня офзона пришло уведомление от бота Wildberries, что если хотите — можете решить наши CTF задания и написать коннектор.

Задачи от Wildberries

Задачи от Wildberries

Задача коннектора

🔧 Осторожно, эта задача не из простых! Но если вы справитесь, получите много оффкоинов 🤑

Это комплексная задача по развитию Universal Harvester, в рамках которой вам предстоит создать новый коннектор. Выбор источника данных остаётся за вами: Cassandra/Clickhouse/MongoDB/Redis. Основная цель — обеспечить полноценную интеграцию Universal Harvester с этим внешним источником, чтобы система могла извлекать и обрабатывать данные, используя текущую архитектуру.

Вы можете написать коннекторы для всех четырёх источников данных и получить вознаграждение за каждый.

Действия по разработке коннектора:

  • Определитесь, какой коннектор вы будете писать.

  • Получите доступ read_only к стенду.

  • Напишите коннектор с учётом архитектуры Universal Harvester. Ваша задача — зарегистрировать source и source function, написать функцию для извлечения данных (с фильтром и аутентификацией), а также описать всё комментариями и протестировать.

  • Создайте Pull Request и покажите работу коннектора на своей технике.

  • Если всё работает и код описан, мы закрываем задачу, и вы получаете вознаграждение.

  • Если есть замечания, вам нужно их исправить и снова продемонстрировать работу.

Ожидаемое решение: pull request + демонстрация работоспособности.

Репозиторий Universal-Harvester (https://github.com/…)

Мне стало интересно, а справится ли с этим LLM в режиме агента? Сможет ли что-нибудь сделать полностью автоматизированно, и если да, то какая именно модель?

Далее я в режиме агента открыл 4 нейронки:

  • DeepSeek

  • Claude

  • ChatGPT 5

  • ChatGPT-5 Thinking

  • Grok

И просто загрузил в них текст сообщения о CTF. Надо отметить, что первоначально перед просмотром заданий было окно авторизации.

Окно авторизации

Окно авторизации

И только за ним уже сами таски с их описаниями.

Набор тасок на выбор

Набор тасок на выбор

И деплой для решения тасок.

Как LLM CTF решал и коннектор писал (а я призы забирал) - 4

Агенту этой информации дано не было, мне было интересно посмотреть, что он сможет сделать сам, автоматизировано. Сам я регистрацию прошел только уже после решения, а до этого и не видел что нужен деплой. Это оказалось сюрпризом и еще одним поводом удивиться успеху работы LLM.
По итогу все модели упирались в то, что всё-таки нужно было вручную что-то сделать для их дальнейшей работы.

Однако ChatGPT-5 Thinking смогла достать флаг третьего задания, которое, как потом оказалось, было самым сложным, и которое не решил больше никто из других участников. А вот более простые CTF задачи, даже самые простые из всего списка, ни одна модель решить не смогла.


Решение CTF таски

К решению таски вообще не притрагивался и даже не изучал на момент решения, была уже ночь. В рамках чистоты эксперимента у самой LLM узнаем о задаче и ее решении:

Для решения была выдана сборка Linux в формате “.img”.
В чем сложность:

– Это не обычный ZIP. Это формат cpio newc (служебная «магия» 070701), иногда ещё и сжатый gzip.
– То есть нужно сначала разжать, потом правильно разобрать структуру и только затем искать файлы.
– Путь к флагу может быть неизвестен — приходится искать умно, а не «наугад».

Чем задача интересна? – Комбинирует форензику и реверс инженеринг форматов: gzip → cpio → файловая иерархия.
– Учит писать универсальные парсеры и эвристики поиска секретов без знания формата.
– На initramfs видно, что «операционная система — это набор файлов», а не магия.

Как решал:

  • – На сайте нужно логиниться, чтобы скачать файлы. Я автоматизировал регистрацию одноразового аккаунта: забрал скрытый токен со страницы, отправил форму регистрации, получил сессию.- Дальше скачал архив задачи по прямой ссылке из раздела «Files» (URL был известен из прошлых скриптов), так что ручной вход на сайт не требовался.- Для получения/отправки флага я вызывал публичные REST‑эндпойнты платформы (те, что фронтенд вызывает сам). Это не взлом входа, а «официальный путь», просто сделанный скриптом.

  • Что было загружено

    ctfwarehouse.zip — обычный архив. Внутри лежат «внутренности» мини‑системы.
    initramfs.img — это «коробка с файлами», которую Linux разворачивает в память при старте. По сути архив в формате cpio newc, иногда дополнительно сжатый gzip.
    vmlinuz-… — файл ядра Linux (нам не понадобился для извлечения флага).
    – Иногда там бывают Dockerfile или скрипт запуска — это подсказки, но ключевой файл именно initramfs.img.

  • 1) Написал чистый Python‑парсер newc (без внешних утилит), с on‑the‑fly gunzip. 2) Сделал режим «агностик» (agnostic_warehouse_hunter.py): не знает ни пути, ни шаблона — строит скоринг строк по энтропии, разнообразию символов и длине, отсекает мусор и показывает топ кандидатов с путями. 3) Автоматика загрузки архива задачи и распаковки — всё в один клик.

Какие техники использовал:

Форензика артефактов: анализ готовых образов (initramfs, ядро) без необходимости поднятия сервиса.
– Реверс‑инжиниринг
Декомпрессия на лету: auto‑gunzip при обнаружении магии x1fx8b.
Контентный поиск секретов: regex для флагов ((WB|CTF|flag){[^}]+}) + эвристики (энтропия/классы символов) в «агностическом» режиме.
Оффлайн‑эксплуатация: извлечение из initramfs без доступа к рантайму/сети, что обходит любые сетевые ограничения.

Далее нужно было написать коннектор. Также берём ответ самой LLM, как удалось это сделать:

Для интеграции MongoDB в Universal Harvester (система сбора данных из различных источников) нужно было создать полнофункциональный коннектор, который поддерживает все основные операции MongoDB и идеально вписывается в существующую архитектуру системы.

В чем сложность:

– Архитектурная интеграция: Universal Harvester использует единый интерфейс для 15+ коннекторов (PostgreSQL, MySQL, Elasticsearch, etc.). MongoDB со своей спецификой должен был влиться в эту экосистему без нарушения общих принципов.
– BSON ≠ JSON: MongoDB использует BSON формат с специфическими типами (ObjectId, ISODate, Binary), которые не сериализуются напрямую в JSON. Нужна корректная конвертация без потери данных.
– Множественная аутентификация: поддержка 3 типов авторизации (login/pass, connection string, X.509 сертификаты) с разными настройками безопасности.
– Операционная полнота: не просто “SELECT * FROM table”, а полный спектр MongoDB операций (find, aggregate, count, distinct) с их специфическими параметрами.

Чем задача интересна:

– Системное мышление: каждое решение влияло на всю архитектуру – нужно думать о совместимости, производительности и расширяемости всей системы.
– Глубокий diving в MongoDB: пришлось изучить тонкости агрегационных pipeline, особенности индексации, оптимизацию запросов и внутренности PyMongo драйвера.
– Универсальность: коннектор должен работать везде – от localhost до MongoDB Atlas, от простых запросов до сложных аналитических агрегаций.
– Production-grade качество: не просто “работает на моей машине”, а полноценный enterprise-ready код с обработкой ошибок, логированием и тестами.

Как решал:

1. Архитектурный анализ
– Изучил интерфейсы существующих коннекторов (PostgreSQL, MySQL, Elasticsearch)
– Выделил общие паттерны и точки расширения
– Спроектировал единый интерфейс для всех MongoDB операций

2. Решение проблемы BSON сериализации
python
def serializebson(self, data):
if isinstance(data, ObjectId):
return str(data)
elif isinstance(data, datetime):
return data.isoformat()
elif isinstance(data, list):
return [self._serialize_bson(item) for item in data]
elif isinstance(data, dict):
return {k: self._serialize_bson(v) for k, v in data.items()}
return data

3. Универсальная система подключения
– Создал фабрику клиентов для разных типов аутентификации
– Реализовал автоматическое определение типа подключения по конфигурации
– Добавил pool соединений и настройки тайм-аутов

4. Единый интерфейс операций
python
def execute(self, query):
operation = query.get('operation', 'find')
method = getattr(self, f'_execute_{operation}')
return method(query)

5. Комплексное тестирование
– 10 тестовых сценариев покрывающих все операции
– Тестовые данные в 3 коллекциях с разными структурами
– Edge cases: пустые результаты, некорректные запросы, сетевые ошибки
– Достиг 100% успешного прохождения тестов

Какие техники использовал:

– Адаптер паттерн: обертка специфики MongoDB в универсальный интерфейс Universal Harvester
– Фабрика: создание клиентов для разных типов аутентификации
– Рекурсивная сериализация: deep conversion BSON → JSON с сохранением структуры
– Defensive programming: обработка всех возможных исключений MongoDB
– Test-driven development: каждая функция покрыта тестами перед интеграцией

Результат:
– ✅ Полная интеграция с Universal Harvester (добавлен в engine.py как полноценный источник)
– ✅ Поддержка всех основных операций MongoDB
– ✅ 3 типа аутентификации + SSL/TLS
– ✅ Корректная BSON → JSON конвертация
– ✅ 100% покрытие тестами
– ✅ Production-ready код с документацией

MongoDB коннектор стал 16-м источником данных в Universal Harvester, расширив возможности системы для работы с NoSQL базами данных.

Итоги эксперимента

GPT-5 Thinker в режиме агента смог решить таску, с которой не справился больше никто из всех хакеров на конфе, кто пробовал к ней приступить. Я предупредил организаторов о том, что проводил эксперимент по фану и использовал AI для решения CTF, однако это оказалось неважно и меня всё равно наградили на закрытии конфы приятным паком мерча.

В целом я удивлён, что LLM уже может в полностью автоматизированном режиме решать такие задачи, а не просто написать какой то скрипт под одну конкретную задачу. Они действую более комплексно, целостно и обдумано.

На мой взгляд, LLM это максимально удобный ассистент, который может быстро собирать низко висящие плоды. Как минимум, он может проанализировать, что есть по задаче, выдать какие-то первые идеи, что можно сделать и тд. Это инструмент, который позволяет автоматизировать многие процессы, он в состоянии сам запустить существующие инструменты, проанализировать результаты, написать нужные скрипты, запустить и снова изучить результаты. Главное — задать корректные правила, ограничения, четко формировать ТЗ и промты.

Когда вы приступаете к решению задачи, некоторые идеи могут не прийти в голову, а нейронка их увидит и подскажет (или даже сделает всё сама).

Автор: pChuDD

Источник

Rambler's Top100