12 июля в 14:31

Решение promo task от BI.ZONE CTF



31 мая компания BI.ZONE анонсировала новость о «CTFzone presidential election». И уже 1-го июня на Хабрахабр появилась публикация BI.ZONE объявляет выборы президента CTFzone, в которой, как и в прошлом году, спрятана «пасхалка». Если присмотреться к тексту публикации, можно заметить, что в предложении «Всем удачи на выборах!» есть ссылка ведущая на веб-страницу содержащую QR-код:


QR сканер выдал сообщение:
try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r_try_h4rd3r

Первое, что пришло в голову найти пользователя «try_h4rd3r» в twitter. Вторая попытка «try hard» заключалась в том, что мы попробовали разбить большой оригинальный QR-код на несколько маленьких:

      

Но все попытки были тщетны. Было принято решение скачать файл promo_task.png и исследовать в Hexed.it Сильно привлекла внимание строка:



Таким образом, поменяв расширение на .7z, получаем архив, который можем открыть 32-x битным 7-Zip. Содержимое архива: zipbomb.exe — самая настоящая ZIP-бомба. «Перерезав красный провод» и поменяв расширение на .zip, получаем архив, в котором лежит файл "-" размером 38,1 ГБ (40 959 016 020 байт). Ясно было сразу, что такой файл не прочесть разом. Было принято решение написать простенький скрипт на языке Python, который бы читал его по частям.

def read_in_chunks(file_object, chunk_size=1024):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data

Результатом работы было множество строк, содержащих нули, среди которых тяжело было найти что-то особенное. Тогда скрипт модифицировали простой проверкой:

def read_in_chunks(file_object, chunk_size=1024):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data

f = open('-')
for piece in read_in_chunks(f):
    if piece.count("0") < 1023:
        print(piece)

Результат работы скрипта:


Видим строчку: @cc77af5382e431dc_bot и первым делом вбиваем имя бота в Telegram. Получаем инструкции бота и задачу:


Подобрав кодировку Base64, мы декодируем и получаем:



Далее отправив результат боту /solve <ответ> можно получить flag. Однако сегодня Вы получите только это: «Sorry all flags are gone».

Всем удачи на CTFzone presidential election!

Спасибо tugric tammio за командную работу над задачей. Если они вам ответят в комментариях — им можно верить.
Автор: @malchikserega

Комментарии (0)

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

Самое читаемое Разработка