Серия «Хороший тамада и конкурсы интересные»

10

BGGP3: Хороший тамада и конкурсы интересные

Серия Хороший тамада и конкурсы интересные

Продолжаю рассказывать широкой аудитории о «гусарских забавах» компьютерной элиты. Дело поручика Ржевского живет и господа-офицеры от программирования меряются своей крутизной и развлекаются ничуть не хуже далеких предков времен Наполеона.

На фоне незабываемая Натали Портман в свои лучшие годы, перенесенная силами нейросети в питерскую коммуналку.

На фоне незабываемая Натали Портман в свои лучшие годы, перенесенная силами нейросети в питерскую коммуналку.

Конкурс

Однажды я уже рассказывал об этом интересном конкурсе для самых отбитых опытных из программерской тусовки, взяв для статьи работы с самого его первого проведения, случившегося в пандемийном 2020м.

На этот раз рассказ пойдет о третьем по счету BGGP, прошедшим в 2022 году.

Поясняю для непричастных:

Binary Golf Grand Prix — соревнование для особенных избранных от мира программирования и компьютеров: реверс-инженеров, пентестеров, системных программистов и хакеров в классическом понимании этого термина.

Раз в год все эти интересные личности собираются, придумывают какие‑нибудь особо изощренные правила и устраивают конкурс «для своих».

По духу все это сильно напоминает гусарские забавы времен Наполеона, отлично раскрытые в анекдотах про поручика Ржевского — чистый офицерский угар ради забавы и веселья.

На этот раз цель соревнования звучала лаконично:

The goal of the 3rd Annual Binary Golf Grand Prix (BGGP3) is to find the smallest file which will crash a specific program.

Проще говоря надо найти или подобрать набор байт, который будучи скормленным программе убьет ее при запуске. Пистолеты программу господин офицер волен выбрать самостоятельно. Правила столь интересного конкурса разумеется тоже доставляют:

Any software running on a machine that does not belong to you will not be accepted.

Так что конь у офицера должен быть свой, а не «арендованный» ;)

Работы оценивались по количеству набранных баллов, чем больше баллов — тем длиннее автор(ы) круче. Правила подсчета баллов тоже весьма своеобразны:

  • Базовый скор = 4096 минус размер файла

  • Плюс 1024 за статью с описанием

  • Плюс 1024 если внутреннее состояние было перезаписано байтами 0x33's или ASCII-символом "3"

  • Плюс 2048 если было достигнуто выполнение кода, в качестве доказательства - вывод числа "3"

  • Плюс 4096 если был сделан патч, закрывающий уязвимость.

Описаны далеко не все присланные работы, только те что удалось запустить и проверить в моем окружении (FreeBSD 14.3).

David3141593

https://github.com/binarygolf/BGGP/blob/main/2022/david3141593/entry.qemu.txt

11244 баллов

Работа‑победитель, набравшая больше всего итоговых баллов.

20 байт, убивающие широко известный эмулятор Qemu, причем баг до сих пор не исправлен.

Команда-убийца:

base64 -d<<<uAJPuxhBzRC61AO+E3y5BQDzbwcMDOgTCReKG4I=>a;
qemu-system-i386 -vga cirrus -no-fd-bootchk -fda a

Как это выглядит в действии:

Как это работает:

An assert() is triggered in QEMU's CirrusVGA emulation code

С помощью специально подобранного набора байт, переданного эмулятору Qemu в качестве образа дискеты вызывается программная проверка (assert), которая при срабатывании вызывает segmentation fault.

И Qemu падает. Насмерть.

novafacing

https://github.com/binarygolf/BGGP/blob/main/2022/novafacing/entry.clang.txt

5098 баллов.

23 байта убивающие компилятор clang, причем любой актуальной версии — с 15 до 19го включительно.

Команда-убийца:

base64 -d <<< aW50IG1haW4oKXtyZXR1cm4gMTt9Cg== > crash.c;
clang -target i386-apple-windows-eabi crash.c

Хотя на самом деле тут в виде base64 закодирован минимально рабочий код:

int main(){return 1;}

Как выглядит в действии:

Что происходит:

11 Separate crashes due to mishandledtarget triples passed on command line

Из-за того что clang поддерживает слишком много разных архитектур, операционных систем и окружений не все из комбинаций поддерживаются и работают:

To be fair, nobody really wants to target Apple as a vendor on the Cygnus CPU, hopefully.

Поэтому указание трешевого i386-apple-windows-eabi в качестве целевой платформы для компилятора приводит к падению, даже с валидным кодом:

clang -target i386-apple-windows-eabi <<< "int main(){}"

Еще у автора есть отдельная большая статья с детальным описанием процесса поиска этого бага, которую рекомендую к изучению.

_mattata

https://github.com/binarygolf/BGGP/blob/main/2022/_mattata/entry.gnucobol.txt

9176 баллов, 40 байт убивающих GNU COBOL.

Команда:

base64 -d <<< CSILQkdHUMKFMzMzM8KFLi4uM8KFMzMzM8KFLi4uM8KFMzMzM8KFAA== > crash.cob;
cobc -o /dev/null crash.cob

Внутри base64-строки вместо кода находится специально подобранный текстовый мусор:

" BGGP 3333 ...3 3333 ...3 3333

В действии:

Что происходит:

File causes crash due to stack protector in creation of an an error literal due to a 5-Byte Stack based overflow. Testcase aligns a NULL to exact size of CB_ERR_LITMAX.

Хотя куда показательней решение проблемы, именно так выглядят реальные баги а не весь этот ваш «вайбкодинг».

Цитируя автора:

This section correctly handles everything correctly EXCEPT a strlen of 38.

if (strlen (literal_data) > CB_ERR_LITMAX) {

If we add a single character “=”, we should no longer see a crash.

if (strlen (literal_data) >= CB_ERR_LITMAX) {

Как видите, всего лишь один символ может привести к падению столь сложной программы как компилятор. Статья с детальным описанием процесса поиска этого замечательного бага по ссылке.

0xDroogy

https://github.com/binarygolf/BGGP/blob/main/2022/0xdroogy/entry.qterminal.txt

4094 баллов

2 байта (!) убивающие приложение:

qterminal allows for an option to supply commands to be run in a new terminal. When the string “0” is sent as a command, the terminal launches and crashes immediately.

Оформление согласно правилам конкурса:

base64 -d <<< MAo= > crash.txt; qterminal -e $(cat crash.txt)

Или в более читаемом варианте:

qterminal -e 0

В действии:

Баг кстати вполне обыденный — такое часто встречается, когда некий «особенный» вариант использования программы просто не приходит в голову разработчикам. Именно для таких случаев в ИТ до сих пор нужны тестировщики и любой качественный софт все также зависит от постоянных проверок живыми людьми.

ifygecko

https://github.com/binarygolf/BGGP/blob/main/2022/ifygecko/entry.doom.txt

5112 баллов и 8 убийственных байт.

В этот раз с помощью специально сформированного «битого» файла с ресурсами в мир иной отправляется современная версия классического шутера — Chocolate Doom.

Команда-убийца:

echo -ne "IWAD\xff\xff\xff\xff" > crash.wad; chocolate-doom -iwad crash.wad

В действии:

Что происходит:

Having an 'IWAD' type wad file containing only the identification field and numlumps field with the numlumps field set to a negative value such as -1 will cause a segfault when allocating a memory block for the allocation of the lump directory from a newblock->next->prev deference that points into an invalid memory address.

Да это тоже классика «багостроения» — очень многие программы падают при попытке открытия неправильно сформированных или битых файлов с данными. Хотя в данном конкретном случае файл был сформирован намеренно битым — в нем указано количество блоков с данными в виде -1, что и убивает программу при попытке открытия.

pierrekim_alextor

https://github.com/binarygolf/BGGP/blob/main/2022/pierrekim_alextor/entry.telnet.txt

9214 балла и 2 байта убивающие демон telnetd.. вообще везде:

FreeBSD-telnetd, NetBSD-telnetd, netkit-telnetd, telnetd in Kerberos Version 5 Applications and inetutils-telnetd are standard telnet servers used in several Linux distributions, BSD systems, UNIX systems and commercial products:

  • FreeBSD, NetBSD

  • Debian, Fedora, Gentoo, ArchLinux, ... - using inetutils-telnetd or netkit-telnetd

  • specific Palo Alto appliances

  • specific Cisco appliances

  • specific Brocade appliances

  • specific Arista appliances

  • OS running telnetd from Kerberos Version 5 Applications: this may include BSD 4.3 Reno, UNICOS 5.1 to UNICOS 7.0, SunOs 3.5 to SunOs 4.1, DYNIX V3.0.17.9 and Ultrix 3.1 to Ultrix 4.0. Note that these OS may be EOL.

Эти милые люди Pierre Kim и Alexandre Torres откопали 30-летний баг в telnetd ради победы на конкурсе:

These vulnerabilities are very old (at least 30 years).

А что ты сделал для хип-хопа?

Конечно же уязвимость на данный момент закрыта да и сам telnetd ныне можно обнаружить лишь в NAS и Wifi-роутерах, что никак не снижает степерь эпичности найденного бага и заслуженное третье место в конкурсе.

Детальная статья с разбором и описанием процесса поиска находится тут.

P.S.

Статья была опубликована на Хабре, оригинал статьи в более вольном изложении можно как обычно найти в нашем блоге.

Показать полностью 5
3

Развлечения джентельменов: Binary Golf

Серия Хороший тамада и конкурсы интересные

Перепробовав все возможные излишества, девиации и грани декаданса, истинный джентельмен всегда возвращается к компилятору.

Нет это не баг, это спецэффект!

Нет это не баг, это спецэффект!

После четырех лет жизни в Питере, IOCCC, запусков всевозможной дичи из далекого прошлого, самопальных патчей ядра Linux и исправления ошибок в драйверах для FreeBSD я пребывал в полной уверенности, что удивить столь искушенного джентельмена не сможет уже ничто.

Я ошибался.

То что описано в этой статье — за гранью понимания обычного разработчика и тем более обычного человека, далекого от ИТ. Честно и при всем желании не смогу объяснить даже подготовленным «молодым специалистам» от разработки, протирающим штаны в опенспейсе за шлепаньем форм для очередного корпоративного маркетплейса насколько круто то что описано ниже.

Если программирование для вас не более чем «работа за деньги» — пожалуйста закройте эту статью и забудьте автора как страшный сон, потому что описанное ниже вам точно не надо.

Добро пожаловать, снова: <a href="https://d.pikabu.ru/story/razvlecheniya_dzhentelmenov_binary_golf_14068864?u=https%3A%2F%2Fbinary.golf%2F&t=https%3A%2F%2Fbinary.golf%2F&h=24e67b8051d9cea0d28f96b2a437c4d76cc5f62e" title="https://binary.golf/" target="_blank" rel="nofollow noopener">https://binary.golf/</a>

Добро пожаловать, снова: https://binary.golf/

Любовь и байты

Однажды в хорошем пабе собрались несколько джентельменов от мира разработки:

демосценеры, реверс-инженеры, ИБ-аналитики малвари и разумеется яркие представители с «другой стороны».

Когда в одном месте собираются столь крутые профи, обязательно начинается потеха под названием у кого длиннее «кто круче»:

─── Binary Golf Grand Prix 1──────────────────────//──

Welcome to the Binary Golf Grand Prix! This is a challenge for people who like to craft tiny binaries.

Так появился на свет этот замечательный конкурс:

The goal of the Binary Golf Grand Prix is to challenge programmers to make the smallest possible binary that fits within certain constraints.

Cуть развлечения заключается в том чтобы создать минимально возможный запускаемый бинарник (нативное приложение), который делает хоть что‑то интересное.

Но этого показалось мало, поэтому помимо основной задачи, джентельмены каждый год придумывают себе дополнительные:

The binary you will craft will be the same executable when flipped backwards.

Да, вы все правильно поняли, а некоторые наверное даже сильно удивились с такой постановки вопроса, поскольку задача заключается в создании приложения, которое бы продолжило запускаться даже его бинарное содержимое перевернуть:

$ xxd some.random.exe | head -n 1
00000000: 4d5a 9000 0345 0000 0400 0000 ffff 0000 MZ...E..........

The entire binary will be reversed, and the first byte, will be the last byte:

4d5a 9000 0345 .... <-- reversed --> .... 4503 0090 5a4d

Критериев оценки в столь замечательном конкурсе два длина и толщина:

размер запускаемого бинарника и «процент реиспользования» байт при запуске в обратном порядке.

В оригинале:

Scores will be calculated based on both the size of the executable, as well asthe percentage of bytes executed when it is run.

Так что у джентельменов все серьезно.

Исходный код всех работ с описанием выложен на Github, также тут можно посмотреть разбор победителей этого замечательного конкурса за 2020й год и дальше не читать. Но если вы все же решили продолжить, то ниже будет описан реальный запуск каждой работы этого удивительного конкурса.

BootNoodle: A Palindromic Bootloader for BGGP

Автор: xcellerator

Статья с детальным описанием процесса находится тут, вот так выглядит оригинальный бинарник со стильным оформлением:

Запускается в эмуляторе QEMU:

qemu-system-x86_64 bin/bootnoodle.bin

В работе:

Вот так выглядит сборка и создание «зеркальной» копии:

mkdir bin 2>/dev/null
nasm -f bin -o bin/bootnoodle.bin src/bootnoodle.asm
dd if=bin/bootnoodle.bin of=bin/tmp.bin bs=1 count=256
rm bin/bootnoodle.bin
perl -0777pe '$_=reverse $_' bin/tmp.bin > bin/tmp2.bin
cat bin/tmp.bin bin/tmp2.bin > bin/bootnoodle.bin
rm bin/tmp*

512 байт на все, если вы вдруг не заметили. И это у джентельменов считается «слишком много».

ns.bggp : Palindromic 64 bit ELF binary

Автор: netspooky

Статья с описанием: https://n0.lol/elf-palindrome-original/

Работа с оформлением, которую можно распечатать и повесить в рамку на стену, чтобы пугать окружающих быдлокодеров:

Он же в упакованном виде:

base64 -d <<< \
f0VMRgUP/zFIPLCQkJDrNAIAPgABAAAABAAAAAEAAAAcAAAAAAAAAAAAAAAAAAAAAQAAAEAAOAAB\
AAIA6wsAAAAAAADrCwAAAAAAADzrwDFIUFVQUFlTUFlQU1lQUFVQ6xiQkJCQkAUPlbZAIObBSMaJ\
D7LHiQAAAAG4AQAAAInHsg+JxkjB5iBAtpUPBZCQkJCQGOtQVVBQWVNQWVBTWVBQVVBIMcDrPAAA\
AAAAAAvrAAAAAAAAC+sAAgABADgAQAAAAAEAAAAAAAAAAAAAAAAAAAAcAAAAAQAAAAQAAAABAD4A\
AjTrkJCQsDxIMf8PBUZMRX8= > ns.bggp

Теперь о печальном:

This was tested and built on Ubuntu 20.04 with kernel 5.4.0-42-generic.

Из-за последних изменений в ядре, бинарник более не работает на последних ядрах, по крайней мере мне не удалось запустить ни на одной из подконтрольных систем, увы.

Вот так это должно было выглядеть:

$ ./build.sh
Executing initial binary...
PUPPYSPYPSYPPUP
00000000: 7f45 4c46 050f ff31 483c b090 9090 eb34 .ELF...1H&lt;.....4
00000010: 0200 3e00 0100 0000 0400 0000 0100 0000 ..>.............
00000020: 1c00 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0100 0000 4000 3800 0100 0200 eb0b 0000 ....@.8.........
00000040: 0000 0000 eb0b 0000 0000 0000 3ceb c031 ............&lt;..1
00000050: 4850 5550 5059 5350 5950 5359 5050 5550 HPUPPYSPYPSYPPUP
00000060: eb18 9090 9090 9005 0f95 b640 20e6 c148 ...........@ ..H
00000070: c689 0fb2 c789 0000 0001 b801 0000 0089 ................
00000080: c7b2 0f89 c648 c1e6 2040 b695 0f05 9090 .....H.. @......
00000090: 9090 9018 eb50 5550 5059 5350 5950 5359 .....PUPPYSPYPSY
000000a0: 5050 5550 4831 c0eb 3c00 0000 0000 000b PPUPH1..&lt;.......
000000b0: eb00 0000 0000 000b eb00 0200 0100 3800 ..............8.
000000c0: 4000 0000 0100 0000 0000 0000 0000 0000 @...............
000000d0: 0000 0000 1c00 0000 0100 0000 0400 0000 ................
000000e0: 0100 3e00 0234 eb90 9090 b03c 4831 ff0f ..>..4.....&lt;H1..
000000f0: 0546 4c45 7f .FLE.

Reversing...
Executing binary in reverse...
PUPPYSPYPSYPPUP
00000000: 7f45 4c46 050f ff31 483c b090 9090 eb34 .ELF...1H&lt;.....4
00000010: 0200 3e00 0100 0000 0400 0000 0100 0000 ..>.............
00000020: 1c00 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0100 0000 4000 3800 0100 0200 eb0b 0000 ....@.8.........
00000040: 0000 0000 eb0b 0000 0000 0000 3ceb c031 ............&lt;..1
00000050: 4850 5550 5059 5350 5950 5359 5050 5550 HPUPPYSPYPSYPPUP
00000060: eb18 9090 9090 9005 0f95 b640 20e6 c148 ...........@ ..H
00000070: c689 0fb2 c789 0000 0001 b801 0000 0089 ................
00000080: c7b2 0f89 c648 c1e6 2040 b695 0f05 9090 .....H.. @......
00000090: 9090 9018 eb50 5550 5059 5350 5950 5359 .....PUPPYSPYPSY
000000a0: 5050 5550 4831 c0eb 3c00 0000 0000 000b PPUPH1..&lt;.......
000000b0: eb00 0000 0000 000b eb00 0200 0100 3800 ..............8.
000000c0: 4000 0000 0100 0000 0000 0000 0000 0000 @...............
000000d0: 0000 0000 1c00 0000 0100 0000 0400 0000 ................
000000e0: 0100 3e00 0234 eb90 9090 b03c 4831 ff0f ..>..4.....&lt;H1..
000000f0: 0546 4c45 7f .FLE.

Comparing hashes...
c082d226c96b7251649c48526dd9766071fa5e59 ns.bggp
c082d226c96b7251649c48526dd9766071fa5e59 ns.bggp.R

Текст «PUPPYSPYPSYPPUP» это вывод приложения при запуске.

Viznut/PWP

Автор: viznut

Статья с описанием: http://viznut.fi/demos/vic20/vizpalapziv.html

Работа:

Также сие произведение компьютерного исскуства показано в работе на заглавной картинке к статье, краткая аннотация от автора:

Entry name: VIZPALAPZIV Executable format: Commodore 8-bit PRG format on Commodore VIC-20 Number of bytes: 20 (including the 2-byte start address) Executed bytes: 18 (every byte except the start address, i.e. 90%) Bytes: 7c 00 8f 0f 90 25 48 48 73 a9 a9 73 48 48 25 90 0f 8f 00 7c

Да, это программа для Commodore, вот такой игрушечной машинки из 80х:

Которую мало кто из читателей имел возможность видеть в живую.

BGGP.COM

Автор: Boo Khan Ming

Работа:

Как гласит известная поговорка:

неважно чем вы занимаетесь, всегда найдется азиат который сделает это лучше вас.

И код выше — лучшая тому иллюстрация.

Простой малазийский паренек сорвал куш — его код стал победителем этой специальной олимпиады в 2020 м году:

Hi! Nice to meet you everyone there! I am Wu (Boo Khan-Ming) from Malaysia. I am not a scene/demo coder. Just join this ASMCOMPO3 for fun.

Исходник на ассемблере под DOS:

JMP 103  EB01
RET  C3
MOV AX, B800  B800B8
MOV ES, AX  8EC0
MOV DI, 07D0  BFD007  
MOV AX, 9090  B89090
MOV ES:[DI], AX  268905
ADD AX, 2689  058926
NOP  90
NOP  90
MOV AX, D007  B807D0
MOV DI, 8EC0  BFC08E
MOV AX, B800  B800B8
RET  C3

Вот так это выглядит в работе:

При работе синий блок еще и мигает.

При работе синий блок еще и мигает.

Эпилог

Я разобрал один только первый год этой замечательной олимпиады, в следующих было уже заметно больше участников и куча интересных и сложных примеров, точно достойных внимания истинного джентельмена.

Отдельно доставляет блог создателя конкурса BGGP, некоторые материалы оттуда точно будут переведены в ближайшем будущем.

Статья была опубликована на Хабре, оригинальная статья в нашем блоге.

Показать полностью 8
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества