Райтап на задачу «Гесс вот (Guess what)»

dikiyponos

Автор:

dikiyponos

6 ноября 2026

7

06.11.2026
Гесс вот (Guess what)
Категория:

Misc

Задача «Гесс вот (Guess what)»

AlexB

Автор:

AlexB

Первая кровь:
feadal
Сложность:
easy
Дата публикации:
07.03.2026
Решений:
33
Рейтинг:
5/5
Ссылка:
Решать

Откроем консоль и подключимся к серверу.

Решение задачи «Гесс вот (Guess what)»: иллюстрация 1

Мы можем вводить символы, и нам показывает, где у нас «ошибка». Таким образом, мы можем подобрать, какую же строку от нас всё-таки хотят, но вручную это делать очень долго, поэтому вооружаемся питоном.

Мы можем сделать тупой перебор, и это даже сработает. Это займёт примерно 1050 запросов. Мы создаём сокет, подключаемся к серверу, перебираем символы нашего ASCII-алфавита с +/=, т. к. это Base64 и, например, = может уйти в паддинги. Смотрим на «ошибка на позиции Х» и продолжаем подбирать, пока не получим флаг.

import base64, re, socket, string, time, sys
HOST, PORT = "guess-what.t1.bug-makers.ru", 20002
ALPHABET = string.ascii_uppercase + string.ascii_lowercase + string.digits + "+/="
def pos(r):
    m = re.search(rb"mistake at position (\d+)", r)
    return int(m.group(1)) if m else None
s = socket.create_connection((HOST, PORT))
def recv():
    buf = b""
    while not (b"guess the string:" in buf or b"BugCTF{" in buf):
        chunk = s.recv(4096)
        if not chunk:
            sys.exit(1)
        buf += chunk
    return buf
recv()
known, reqs, t0 = "", 0, time.time()
while True:
    i = len(known)
    for ch in ALPHABET:
        reqs += 1
        s.sendall((known + ch + "\n").encode())
        r = recv()
        print(known+ch)
        if b"BugCTF{" in r:
            print("WIN после", reqs, "запросов за", round(time.time() - t0, 1), "s")
            print("секрет:", known + ch, "=", base64.b64decode(known + ch))
            print(r.decode('utf-8'))
            sys.exit(0)
        p = pos(r)
        if p is not None and p > i:
            known += ch
            break
Решение задачи «Гесс вот (Guess what)»: иллюстрация 2

Теперь, когда мы подобрали втупую эту строку, попробуем понять, из чего она состоит. Это Base64 от следующей строки: «[случайные_hex_символы] [ip 10.42.0.0] [YYYY-MM-DD] [HH:MM:SS]», например «309 10.42.0.0 2026-11-06 00:12:27». Мы явно видим части, которые можно оптимизировать, например дату, примерное время и айпи-адрес. Мы можем считать их заранее и проверять целый блок, а не перебирать каждый Base64-символ. Таким образом, мы можем заметно ускорить время решения задачи.

Решение задачи «Гесс вот (Guess what)»: иллюстрация 3

Если будете писать собственные скрипты, не забудьте про UTF-8, иначе будут отображаться некоторые не-ASCII-символы в флаге.

Итак, теперь, если мы запустим наш скрипт, то после успешного подбора мы получим:

Решение задачи «Гесс вот (Guess what)»: иллюстрация 4

Задача со звёздочкой для тех, кто любит программировать, — оптимизировать скрипт, чтобы он подбирал по целым известным блокам. А для флага можно и подождать ~70 секунд.

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «Учебная граната»

/Разборы задач

Райтап на задачу «Учебная граната»

Распаковываем 1015 вложенных ZIP-архивов и собираем скрытое сообщение из имён файлов.
Прочитать

5

Райтап на задачу «Огрызок»

/Разборы задач

Райтап на задачу «Огрызок»

Определяем компактный формат Micro QR и считываем флаг с обрывка листа.
Прочитать

11