Райтап на задачу «Украденный флаг»

fderious

Автор:

fderious

31 октября 2026

5

31.10.2026
Украденный флаг
Категория:

Forensics

Задача «Украденный флаг»

Автор:

LastTeamLead

Первая кровь:
velvetway
Сложность:
medium
Дата публикации:
29.11.2025
Решений:
113
Рейтинг:
4.9/5
Ссылка:
Решать

Описание

Злоумышленники нашли уязвимость в поисковой строке сайта и с помощью слепой SQL-инъекции украли флаг из БД, а потом стёрли его.

Из логов есть только access-лог nginx. Попробуйте понять, какой флаг был украден.

Решение

Проанализировав лог, видим, что перед нами time-based blind SQLi. Если условие истинное, то будет выполнен тяжёлый запрос с RANDOMBLOB, что сможет увидеть злоумышленник.

Для того чтобы определить, когда начинаются действия с флагом, просто в файле лога жмём Ctrl+F и ищем строку flag.

В самом конце видим подбор символов флага. Нам нужны все строки, где в запросе встречается конструкция CAST(flag AS TEXT). Также заметим, что точные символы мы можем определить только если текущее значение сравнивается с каким-то символом оператором != (например, ...LIMIT 0,1),61,1)!=CHAR(55)), следовательно, вторым условием является наличие != в строке.

Теперь остаётся спарсить лог и собрать строку флага:

import urllib.parse

chars = {}

for line in open("bug-makers.ru-access.log"):
    query = urllib.parse.unquote(line.split('"')[1].split("q=", 1)[1])
    if "CAST(flag AS TEXT)" not in query or "!=" not in query:
        continue
    
    left, right = query.split("!=", 1)
    right = right.strip()

    left = left.rstrip()
    if left.endswith(")"):
        left = left[:-1].rstrip()
    parts = left.rsplit(",", 2)

    position = int(parts[1])
    char_code = int(right[5:right.find(")")])
    chars[position] = char_code
    
flag = "".join(chr(chars[p]) for p in sorted(chars))

Запускаем и получаем hex-кодированную строку. Используем bytes.fromhex() для перевода в читаемый текст и получаем флаг!

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

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

Райтап на задачу «Не доела ...»

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

Райтап на задачу «Не доела ...»

Разбор задачи «Не доела ...»: восстанавливаем заголовок PNG и размеры изображения по CRC.
Прочитать

9