Веб-задачи и криптографические задачи
Решение распространённых веб- и криптографических головоломок
«Веб-задачи и криптографические задачи» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Два столпа: веб и криптография
Веб и криптография — две самые распространённые точки входа в CTF.
- Веб-задачи предоставляют Вам работающее веб-приложение и предлагают найти ошибку в его работе с данными, аутентификацией или доверием.
- Криптографические задачи предоставляют шифротекст, схему и иногда исходный код и предлагают восстановить открытый текст или ключ, используя ошибку в применении криптографии.
Обе категории требуют систематического наблюдения. В этом уроке рассматриваются повторяющиеся типы задач каждой категории.
Первый шаг при работе с веб-целью
Прежде чем что-либо эксплуатировать, составьте карту приложения. Просмотрите исходный код, изучите ответы и проверьте скрытое содержимое.
# Inspect raw response headers and body
curl -i http://target/
# Look for hidden paths the UI does not link to
gobuster dir -u http://target/ -w wordlist.txt
# Common files worth checking by hand
# /robots.txt /.git/ /backup.zip /adminВнедрение кода в запросы базы данных
Внедрение кода в запросы базы данных происходит, когда пользовательские данные объединяются с запросом к базе данных без разделения кода и данных.
Форму входа, которая строит запрос вроде SELECT * FROM users WHERE name='INPUT', можно обмануть, передав данные, которые закрывают строку и изменяют логику:
# A classic auth-bypass payload supplied as the username
' OR '1'='1' --
# UNION-based extraction once the column count is known
' UNION SELECT username, password FROM users -- Настоящее исправление внедрения кода
CTF учит Вас взламывать внедрение кода, чтобы Вы могли защищать приложения от него. Правильная защита — это параметризованные запросы (подготовленные запросы), которые полностью исключают пользовательские данные из структуры запроса.
# Vulnerable: input becomes part of the SQL text
query = "SELECT * FROM users WHERE name='" + name + "'"
# Safe: input is bound as a parameter, never parsed as SQL
cursor.execute("SELECT * FROM users WHERE name = ?", (name,))Межсайтовый скриптинг (XSS)
XSS возникает, когда приложение отражает или сохраняет данные, контролируемые злоумышленником, а браузер выполняет их как сценарий. В CTF задача на XSS часто связана с ботом, который посещает страницу с Вашей полезной нагрузкой, сохраняя флаг в файле cookie.
- Отражённый — полезная нагрузка из запроса сразу возвращается в ответе.
- Сохранённый — полезная нагрузка сохраняется и выполняется при последующих посещениях.
- На основе DOM — клиентский JavaScript небезопасно записывает данные на страницу.
Защита заключается в контекстном кодировании выводимых данных и политике безопасности содержимого. Проверочная строка вроде <script>alert(1)</script> подтверждает, экранируются ли данные.
SSRF и обход каталогов
Ещё два основных типа веб-задач:
- Подделка запросов на стороне сервера (SSRF) — Вы заставляете сервер отправлять запросы от Вашего имени, часто к адресам, доступным только из внутренней сети, например
http://127.0.0.1, или к конечной точке метаданных облака, чтобы добраться до флага. - Обход каталогов — Вы выходите из предназначенного каталога с помощью последовательностей вроде
../, чтобы читать файлы за пределами корневого каталога веб-сайта, например../../../../etc/passwd.
Обе уязвимости возникают из-за доверия к пользовательским данным, выбирающим ресурс. Защита заключается в строгих списках разрешений, приведении путей к каноническому виду и их проверке перед использованием.
Кодирование — не шифрование
Самая распространённая криптографическая ловушка для новичков — путать кодирование с шифрованием. Кодирование обратимо для любого человека и не требует ключа, поэтому оно совершенно не обеспечивает конфиденциальность.
Научитесь сразу распознавать форматы:
- Base64 — буквы, цифры,
+ /и часто дополнение=. - Шестнадцатеричная запись — только
0-9 a-f. - ROT13 / шифр Цезаря — узнаваемая структура со сдвинутыми буквами.
# Decode base64
echo 'ZmxhZ3toZWxsb30=' | base64 -d
# Decode hex
echo '666c6167' | xxd -r -pКлассические шифры и XOR
Во многих криптографических задачах используются слабые исторические шифры или небрежно реализованные современные:
- Шифры Цезаря / Виженера — шифры со сдвигом, взламываемые частотным анализом или перебором всех 25 сдвигов.
- XOR с одним байтом — всё сообщение обрабатывается операцией XOR с одним байтом; переберите все 256 ключей и выберите читаемый результат.
- XOR с повторяющимся ключом — взламывается после определения длины ключа, затем каждый байт ключа решается как отдельный XOR с одним байтом.
Вывод таков: самодельный или классический шифр не обеспечивает настоящей защиты от аналитика.
Ошибки применения RSA
RSA безопасен только при правильном выборе параметров. В криптографических задачах CTF часто встречаются сломанные варианты:
- Маленький модуль — если
nдостаточно мал, его можно разложить на множители напрямую и восстановить закрытый ключ. - Крошечная степень без дополнения — при
e=3и коротком сообщении шифротекст может оказаться точным кубом, который можно восстановить с помощью целочисленного кубического корня. - Общие множители — если два открытых ключа имеют общий простой множитель, наибольший общий делитель их модулей мгновенно раскрывает его.
Защита в реальном мире: используйте проверенную библиотеку с большими ключами и правильным дополнением (OAEP), никогда не разрабатывайте собственную криптографию.
Взлом хешей
Если в задаче Вам дают хеш пароля, цель — восстановить исходные данные. Хеш нельзя обратить, но можно перебирать варианты и сравнивать результаты.
# Identify the hash type first
hashid 5f4dcc3b5aa765d61d8327deb882cf99
# Dictionary attack with hashcat (mode 0 = raw MD5)
hashcat -m 0 hash.txt rockyou.txt
# John the Ripper alternative
john --wordlist=rockyou.txt hash.txtПовторяемый рабочий процесс
Объедините всё единым циклом, подходящим для обеих категорий:
- Наблюдайте — прочитайте условие, просмотрите исходный код, определите кодировку или схему.
- Выдвигайте гипотезу — определите наиболее вероятный класс уязвимости.
- Проверьте на простом примере — отправьте одну пробную нагрузку и изучите точный ответ.
- Эксплуатируйте — развейте сработавшую пробную нагрузку в полноценную, которая выдаст флаг.
- Документируйте — записывайте нагрузку и ход рассуждений, пока всё свежо в памяти.
Этот цикл не даёт Вам заблудиться в бесплодных поисках и почти автоматически приводит к готовому отчёту о решении.
Быстрая проверка
Проверьте, насколько хорошо Вы усвоили основы веб-безопасности и криптографии.
Повторение
Вы изучили распространённые задачи по веб-безопасности и криптографии:
- Веб: сначала составьте карту приложения, затем ищите SQL-инъекции, XSS, SSRF и обход путей — все эти уязвимости возникают из-за небезопасного доверия к пользовательскому вводу, а устраняются разделением кода и данных.
- Криптография: отличайте кодирование от шифрования, взламывайте слабые классические шифры и шифры XOR, используйте ошибки в параметрах RSA и взламывайте хеши с помощью словарей.
- Один и тот же цикл — наблюдать, выдвигать гипотезу, проверять, эксплуатировать, документировать — подходит для обеих областей.
Далее Вы перейдёте к реверс-инжинирингу и эксплуатации бинарных файлов.
Часто задаваемые вопросы
Урок «Веб-задачи и криптографические задачи» бесплатный?
Да — полный текст урока «Веб-задачи и криптографические задачи» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Веб-задачи и криптографические задачи»?
Решение распространённых веб- и криптографических головоломок Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Веб-задачи и криптографические задачи»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Категории CTF и образ мышления
- Веб-задачи и криптографические задачи
- Основы реверс-инжиниринга и эксплуатации бинарных файлов
- Инструменты и отчёты о решениях