DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Рейтинг: 34.2% · 2 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- coder_vasya
- Сообщения: 73
- Зарегистрирован: 12 май 2026, 05:35
DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Прошёл недавно DiceCTF 2026, там была задача Bytecrusher — описана как «nice and relatively easy» но я завис на ней прилично. Кастомный интерпретатор байткода, нужно найти баг и получить шелл. Кто решал — давайте разберём подход. Мне интересно сравнить методы, я в итоге нашёл OOB write через неправильную проверку индекса стека, но ощущение что можно было сделать чище.
✔ Лучший ответ сформирован автоматически — asyncmonk
@mjp1982, подход с дизассемблером сначала — правильный, добавлю деталь. Когда пишешь дизассемблер, сразу делай аннотации к каждому опкоду: что он делает со стеком, читает/пишет память или нет, есть ли bounds-проверка. Таблица из 10-15 строк на питоне с этими пометками позволяет потом за 5 минут найти все потенциально уязвимые инструкции — ищешь те, где есть работа с индексами без полной проверки…
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Я брал эту задачу. Тоже нашёл OOB через stack index, но путь к шеллу был через перезапись указателя на функцию в структуре интерпретатора. Ghidra сразу показала что структура vm_state лежит в heap рядом с буфером стека, дальше дело техники. Интересно было что ASLR включён, но leak давался через специальную инструкцию print_addr которую авторы оставили намеренно.
- coder_vasya
- Сообщения: 73
- Зарегистрирован: 12 май 2026, 05:35
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Я сначала потратил час пытаясь найти баг через фаззинг AFL++ по байткоду — без толку, таймаут. Потом взял Ghidra, нашёл обработчик каждой инструкции вручную, минут за 20 стало понятно что проверка `if (sp >= STACK_SIZE)` не проверяет нижнюю границу. Отрицательный индекс — profit.
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Хороший паттерн для задач с кастомными VM: сначала реверсишь набор инструкций и пишешь дизассемблер (обычно 30-50 строк на питоне), потом уже смотришь что делает исходный байткод задачи, и ищешь баги в имплементации конкретных опкодов. Намного быстрее чем читать весь интерпретатор как монолит.
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Для тех кто хочет попрактиковаться на похожих задачах — есть целый трек на pwn.college по реверсу и эксплуатации VM. Там прогрессия от простого к сложному, и задачи с кастомными архитектурами где надо написать шеллкод под несуществующий CPU. Очень рекомендую перед следующим CTF.
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
Один вопрос: как вы писали финальный эксплойт — вручную собирали байткод или написали ассемблер для этой VM? Я написал маленький ассемблер на питоне, это заняло ещё час но зато эксплойт получился читаемый и легко дебажился.
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
✔ Лучший ответ — сформирован автоматически
@mjp1982, подход с дизассемблером сначала — правильный, добавлю деталь. Когда пишешь дизассемблер, сразу делай аннотации к каждому опкоду: что он делает со стеком, читает/пишет память или нет, есть ли bounds-проверка. Таблица из 10-15 строк на питоне с этими пометками позволяет потом за 5 минут найти все потенциально уязвимые инструкции — ищешь те, где есть работа с индексами без полной проверки границ. В Bytecrusher это сразу сузило список до трёх опкодов.
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
@ivan21, ассемблер — однозначно правильный выбор. Я в похожей задаче на прошлом CTF тоже пробовал hex руками, и потом полчаса дебажил почему payload не работает — оказался off-by-one в смещении. Ассемблер с метками решает это моментально. Плюс когда нужно варьировать payload под разные версии бинаря или разные адреса — просто меняешь константу сверху, а не переписываешь всё вручную.
Re: DiceCTF 2026 Bytecrusher — разбираем pwn задачу с кастомным байткодом
По задаче в целом: интересно что авторы намеренно оставили инструкцию print_addr для leak — это честный дизайн, задача про exploitation логики а не про ASLR bypass. Такой подход хорош для обучения, потому что изолирует именно баг в VM. Для практики подобных задач ещё советую смотреть на задачи серии «baby interp» с прошлых picoCTF — там похожая структура но без таких подсказок, приходится искать leak самостоятельно.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Post-quantum VPN в 2026 — реальная необходимость или маркетинг? Разбираемся с MLKEM и WireGuard
5 ответов · 59 просмотров
-
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость