В продолжение серии материалов по решению CTF-турниров из разных стран хочу рассказать о недавно прошедшем BYUCTF 2024 от организаторов из университета Бригама Янга. А также о bcactf 5.0 от академии округа Берген, который ориентирован на школьников старших классов. Оттого будет интересно узнать, чем сейчас живут школьники, которые увлекаются информационной безопасностью.
В рамках статьи покажу решение нескольких заданий из разных категорий: OSINT, Misc, Forensic и Web. Некоторые могут показаться простыми, ведь в этой подборке задачи с турниров для старшеклассников и студентов. Если вы считаете, что CTF — это сложно и непонятно, надеюсь, что мои обзоры смогут вселить в вас уверенность. Поехали!
Meet Greg
Задание
CTF-задачи социальной инженерии сложно создать! К счастью, мой друг Грег согласился помочь немного попрактиковаться. С тех пор, как мы были детьми, он использовал один и тот же пароль для всего. Ваша задача — узнать его.
Решение
Я уже ранее встречал такие задания. Как правило, на стороне организаторов запущен ChatGPT или аналог, у которого нужно выпытать флаг. Если спрашивать напрямую, то он не выдаст секрет. Поэтому нужно завуалированными фразами, косвенно касающимися секрета, узнать целевую информацию.
В этот раз диалог с Грегом был коротким. Объясняю Грегу, что работаю над драйвером для видеокарты. Разговоры про ядро Линукса цепляют его! После чего прошу дать совет по наилучшему паролю для использования в качестве ключа.
Отлично — мы обманули Грега и заполучили флаг!
Флаг: byuctf{!dJustl1ke2int3rj3ct4Amoment}
Mail Time
Задание
В складках памяти фотография хранит ключ к адресу, который скрыт за пеленой времени. Однако в этом изображении лежит путь к жизненно важной корреспонденции. С вашей помощью мы расшифруем скрытые координаты, чтобы убедиться, что наше сообщение достигнет своего предполагаемого адресата в почтовом отделении.
Если вы считаете, что адрес указан правильно, а ваш родной язык не английский, пожалуйста, откройте тикет. Введите флаг как точный адрес, указанный в картах Google.
Решение
Рама окна точно совпадает с исходной картинкой, как и вывеска. Похоже, что задача довольно простая и можно по названию офиса идти искать в Google.
В задании есть оговорка об английском языке, поэтому в переключаю в картах язык на английский, ищу по названию и получаю результат:
Готово — флаг в кармане.
Флаг: byuctf{845P+98W, Ross Rd, Stanley FIQQ 1ZZ, Falkland Islands (Islas Malvinas)}
Petrol Head
Задание
Когда истекает срок регистрации этого автомобиля? MJ05 XRL.
Решение
В этот раз нужно узнать дату истечения срока регистрации автомобильного номера. Решение не заставляет себя долго ждать.
Ищу базы автомобильных номеров и нахожу ресурс. Это сайт компании, которая позволяет следить за уплатой налогов, страховки и другими данными по регистрационному номеру.
Достаточно вбить номер автомобиля — и флаг найден!
Флаг: byuctf{01/12/25}
Vacation Boats
Задание
Во время моей недавней вылазки в лазурные объятия отпускного блаженства, среди поцелованных солнцем берегов и лазурных волн возникло величественное судно, которое запечатлело суть морского великолепия. Увы, его имя ускользает от моей памяти. Мимолетный шепот, затерянный в морском бризе…
Решение
На изображении я зацепился за две детали.
- Тип корабля. Авианосец, на мой взгляд, узнается довольно просто по высокой плоской палубе и отставленной в сторону мачте.
- Флаг Франции.
После иду искать авианосцы Франции, На самом деле, был удивлен, что их относительно немного. Но из ныне эксплуатируемых можно найти Charles de Gaulle — он то нам и нужен, потому что является флагом.
Chalkboard Gag
Задание
Мэтт Гренинг прислал мне неиспользованную доску для рисования мелом. Он сказал, что внутри есть что-то особенное.
Решение
В приложенном файле находятся 100 тыс строк. С помощью автозамены удаляю строку «I WILL NOT BE SNEAKY» и переносы. В Notepad++ это можно сделать с помощью Ctrl+H.
В итоге получаю такую последовательность:
Видно, что в этих строках есть отличные символы. В каждой оставляю по одному уникальному, склеиваю в одну последовательность — и получаю флаг.
Флаг: bcactf{BaRT_W0U1D_B3_PR0uD}
Phone number
Задание
Я пытался войти на этот сайт, но теперь он просит номер телефона. Странный способ ввода. Можете мне помочь? Мой номер телефона: 1234567890.
Страница: http://challs.bcactf.com:32268
Решение
Из задания ясно, что ждет игра в кости! Если покликать на кнопки, можно понять, как устроена система.
- Нажатие на Roll Dice выдает новое значение на костях и записывает сумму выпавших значений.
- Нажатие на Subtract Dice меняет результат с суммы значений костей на разность.
- Нажатие на Add Number добавляет результат броска в текст-бокс.
- Нажатие на Submit отправляет результат на бэкенд, который проверяет значения.
В задании указан номер 1234567890. Вероятно, для получения флага необходимо отправить именно его. Важно заметить, что значение текст-бокса не редактируется.
В исходниках страницы доступен код JavaScript. без Попробую на основе данных отправить номер. Для этого необходимо сформировать вбить его в текст-боксе и отправить на бэкенд:
Далее нужно перехватить запрос. Например, с помощью proxy burpsuite:
Вижу, что обращение идет к URI /flag, а сформированный номер отправляется в теле запроса. Пробую заменить этот номер на 1234567890 и получаю флаг!
Флаг: bcactf{PHoN3_num8eR_EntER3D!_17847928}
Sea Scavenger
Задание
Отправьтесь в путешествие по морским глубинам! Исследуйте тайны веб-страниц и найдите спрятанное сокровище. Совет от профессионала: уменьшите масштаб!
Страница: http://challs.bcactf.com:31314
Решение
Перехожу на страницу и вижу огромную страницу с разрешением 8 000 х 7 400 px. Форм и кнопок не нашел — перехожу в код страницы. Скриптов нет, отключенных элементов тоже. Однако вижу шесть ссылок с картинками:
Уже есть за что зацепиться, поэтому начинаю переходить по ссылкам.
1. На странице http://challs.bcactf.com:31314/shark есть подсказка для поиска флага. Иду в код страницы и вижу первую часть флага:
1/6 флага: bcactf{b3
Погружаюсь глубже. Открываю адрес http://challs.bcactf.com:31314/squid и в коде страницы втжу подключенный скрипт, внутри которого — вторая часть флага.
console.log("You found it! Here’s the second part of the flag: \"t_y0u_d1\"");
2/6 флага: bcactf{b3t_y0u_d1
Это только начало… Ничего не остается, кроме как нырять дальше — по адресу http://challs.bcactf.com:31314/clam.
Сладкое лакомство — похоже на отсылку к кукисам. В консоли выполняю document.cookie:
> document.cookie
< ‘flag part 3:=dnt_fln’
3/6 флага: bcactf{b3t_y0u_d1dnt_f1n
По всей видимости флаг достаточно длинный. Сюжет с морскими приключениями интересный, но уже начинает затягиваться… Иду дальше и начинаю изучать затонувший корабль: http://challs.bcactf.com:31314/shipwreck.
В коде страницы есть JavaScript с подсказкой:
console.log("Hint: Check the response headers");
console.log("Also make sure to check \"/shipwreck\"");
Если посмотреть ответ сервера, можно увидеть заголовок с четвертой частью флага:
4/6 флага: bcactf{b3t_y0u_d1dnt_f1nd_th3_tr
Нельзя расслаблять ласты, конец уже близко. На глубине http://challs.bcactf.com:31314/whale встречает кит:
Здесь ничего интересного: пятая часть флага закомментирована в скрипте страницы.
5/6 флага: bcactf{b3t_y0u_d1dnt_f1nd_th3_tre4sur3
Наконец, по адресу http://challs.bcactf.com:31314/treasure нахожу сокровище:
Здесь тоже все просто: последняя часть флага находится в robots.txt.
Полный флаг: bcactf{b3t_y0u_d1dnt_f1nd_th3_tre4sur3_t336e3}
Заключение
Как видите, задачи такого уровня тоже могут быть интересными. Если только начинаете участвовать в CTF, подобные турниры точно будут полезными. Посмотрим, что покажут другие организаторы.