Blog08: Разное — MCSC v10 Writeups: Part One (Reverse Challenges)

Mar 06 2023
Привет, ребята! 10-я версия нашего крупного турнира, MCSC, подошла к концу, как и его соревнование CTF. Победители были коронованы, но всем, казалось, не терпелось узнать все подробности о предстоящих испытаниях.

Привет, народ!
Подошла к концу 10-я версия нашего крупного турнира, MCSC, а также соревнования CTF. Победители были коронованы, но всем, казалось, не терпелось узнать все подробности о предстоящих испытаниях.
Именно по этой причине мы представим вам официальные отчеты о задачах, которые мы предложили на CTF этого года. Начиная с категории «Обратное».

Будьте начеку, так как в ближайшие дни в сети появится больше рецензий на другие категории.
Итак, давайте приступим к делу, не так ли?

Вызов — самореф.

Это ELF64, который динамически генерирует флаг. Это легко отследить с помощью хорошего отладчика, который не будет возражать против missing section headers at 4296, например, radiuse2.

[0x00600580]> db sym.main 
[0x00600580]> doo 
INFO: File dbg:///home/thamugadi/mcsc/selfref/selfref reopened in read-write mode 
[0x00600580]> dc 
hit breakpoint at: 0x60064b 
[0x0060064b]>

      
                
r2

[0x0060064b]> db 0x006006a7 
[0x0060064b]> dc 
hit breakpoint at: 0x6006a7 
[0x006006a7]> pxq @rsi 
0x00a00a48 0x6c6b7b6365736e69 0x7831665f336e3333 insec{kl33n3_f1x 
0x00a00a58 0x746e3130705f6433 0x000000000000007d 3d_p01nt}……. 
0x00a00a68 0x0000000000000000 0x0000000000000000 …………….

Вызов — пакет

pack: ELF 64-bit LSB executable, x86–64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86–64.so.2, stripped
checksec pack
[*] ‘/home/thamugadi/mcsc/pack’ 
Arch: amd64–64-little 
RELRO: No RELRO 
Stack: No canary found 
NX: NX disabled 
PIE: No PIE (0x400000) 
RWX: Has RWX segments

Мы собираемся проследить за его выполнением, используя radiuse2.

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

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

Вот callинструкция к области стека

0x004010ea mov rdx, r10 
0x004010ed call 0x401288 
0x004010f2 lea r11, [rbp — 0x304] 
0x004010f9 call r11 
0x004010fc mov eax, 0 
0x00401101 leave 
0x00401102 ret

динамически генерируемый исполняемый файл

Обратное очень просто: у нас есть ключ 0xdeadbeefdeadbeefи пять магических значений : 0xeaddc58cbbded086, 0xb09cdcb0ba9ed58c, 0xb6ca8f9d81d4ccdb, 0xa3c8ccdcb6d9e19b, 0xfffeedaa9deeebbcкоторые с ним подвергаются операции XOR.

Значение, которое мы получаем после выполнения этих операций:insec{p4ck3d_b1n4ry_r1ght_th3re}

Задача — открыть прошивку

Эта задача состоит из изображения Apple Partition Map, предназначенного для Macintosh эпохи PowerPC.

После недолгих поисков в Интернете мы можем узнать, что на этих машинах используется прошивка OpenFirmware , а также что она запускает скрипт Forth при запуске.

Давайте просто напечатаем необработанный DISK.APM: мы сразу заметим скрипт Forth.

: initmsg .” I just loaded the flag for you! :)” cr ; 
: startmsg .” Find it…” cr ; 
: sup — dup abs = ; 
: inf dup sup 1 + ; 
: diff = if 0 else -1 then ; 
: fba frame-buffer-adr ; 
: val1 15d74719 ; 
: val2 2626cd75 ; 
: val3 637b663 ; 
: val4 265cd ;
val1 5 * val2 3 
* val3 10 * val4 
2bf9 * 80000010 l! 80000014 l! 80000018 l! 8000001c l! 
then fba mac99-vram = if mac99-message val1 5 
* val2 3 * val3 10 * val4 
2bf9 * 81000010 l! 
81000014 l! 81000018 l! 8100001c l! 
then .” informations stored :” cr variable run -1 run ! 
fba beige-vram diff fba mac99-vram diff and if hardware-error 0 run ! then 
run @ 0 = if 1 0 do 0 +loop then 
initmsg 
startmsg 
boot hd:,\boot\kernel.elf

Поэтому эти строки:

val1 5 * val2 3 
* val3 10 * val4 
2bf9 *

push 0x5*val1
push 0x3*val2
push 0x10*val3
push 0x2bf9*val4

0x696e7365
0x637b6630
0x7274685f
0x6d34637d

кстати, остальная часть образа диска совершенно не имеет значения и просто содержит один из моих игрушечных проектов , которые загружаются на Mac на базе PowerPC :)

Вызов — фамиком

Это испытание состоит из ПЗУ Nintendo Entertainment System . В описании предлагается использовать эмулятор FCEUX, в котором есть такие интересные возможности, как отладка, просмотр памяти, дизассемблирование.

Перед началом следует отметить, что не обязательно хорошо разбираться в сборке 6502 (на которой основан ЦП NES), чтобы полностью разобраться в интересующей нас части кода. На самом деле достаточно знать, что сравнения выполняются с помощью инструкции CMP.

Мы запустим ПЗУ и динамически проверим память (как указано в подсказке).

с вводом LLLLLL..
с входом RRRRRR..

Мы сразу замечаем кое-что интересное: когда мы вводим пароль с помощью стрелок направления, место в памяти ( 0x300) заполняется байтами 01, 02, 03или 04. После нескольких тестов мы видим, что клавиша «Влево» соответствует 01, клавиша «Вправо» — 02, клавиша «Вверх» — 03, а клавиша «Вниз» — 04.

Теперь давайте посмотрим на исполняемый код. Мы, конечно, можем сделать это с помощью FCEUX, но я буду использовать Radeone2, который мне кажется более удобным.

Перейдем по указанному в описании адресу для начала Main:s 0x90a5

сравнивать

Спустившись немного вниз, мы обнаруживаем, что сталкиваемся с длинной цепочкой условных ветвей (BEQ, ветвь, если они равны) после сравнений со значениями в диапазоне от 1 до 4, точно так же, как байты, соответствующие входным данным, которые мы определили ранее.

Создавая соответствие, которое мы изложили ранее, вот полная последовательность, ожидаемая этим кодом:

ЛУДРЛУРУЛЛУДРДУ

Давайте попробуем этот пароль, и мы получим флаг :)

флаг

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

Ссылки

Facebook: ИНСЕК Энсиас

Инстаграм: ИНСЕК Энсиас

Linkedin: INSEC Ensias

Youtube: Клуб ИНСЕК

Не забудьте подписаться на нас в социальных сетях, чтобы быть в курсе всего, что делает клуб. С нетерпением ждем возможности поделиться знаниями со всеми читателями, и мы приветствуем ваши отзывы по адресу [email protected].

Сценарист: thmgdi

Редакторы: berradAtay , akna , F3nn3C