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

в 11:31, , рубрики: ctf, ctfzone, python, ZIP-бомбы, Блог компании Перспективный мониторинг, информационная безопасность

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

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

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

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 от BI.ZONE CTF - 3  Решение promo task от BI.ZONE CTF - 4  Решение promo task от BI.ZONE CTF - 5  Решение promo task от BI.ZONE CTF - 6

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

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

Таким образом, поменяв расширение на .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)

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

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

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

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

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

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

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

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

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

Автор: malchikserega

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js