• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

CTF Недействительный (writeup)

Всем привет.
Немного "отдохнули" на ZipLock, идем дальше.

Скачали файл, разархивировали, смотрим file task4.exe
Видим в результате, что это data, т.е. файл то действительно сломан.

Смотрим hexeditor task4.exe
task4-badfile.png

Видим, что написано, что это PE, но он не запускается, не просматривается ghidra и ida, даже file ничего не показывает. Надо проверить магические байты. Погуглим какие должны быть для PE и DOS.


magic-numbers.PNG

Видим, что в файле и в таблице магических байтов есть как общее, так и разное, то прямо в hexeditor меняем и сохраняем.

Ура, можем видеть в ghidra. Видим main, видим какие-то нечитаемые данные и функцию check2, в который передается элемент из данных.
task4-main-check2.png


Проваливаемся в check2 и видим check, в который передается переданное, но еще и xor-ится.
task4-check.png


Проваливаемся в check и видим, что там происходит побитовый сдвиг и xor.
task4-checkk.png

Дебажить в линуксе я так и не научился, потому я возвращаюсь к питону.

Во время реверса надо знать, что все команды которые в коде делаются надо делать в обратную сторону, благо xor работает в обе стороны, но вот сдвиги, сложения, вычитания и деления и прочее уже так не работают. Т.е. надо выполнять команды в обратной последовательности и с обратными знаками, т.е. если был +, то делать надо - и т.д..
Python:
data = [ 0x4d18,0x4d28,0x4d04,0x4d00,0x4d1c,0x4d70,0x4df8,0x4cd0,0x4d2c,0x4d4c,0x4d10,0x4d24,0x4cd0,0x4d04,0x4d68,0x4d34,0x4cd8,0x4d10,0x4d04,0x4cd8,0x4d5c,0x4de0 ]
result = ''

for i in data:
    num = i
    num = num ^ 200
    num = num >> 2
    num = num ^ 0x1337
    result += chr( num )

print(result)

Получили флаг
 
Последнее редактирование:
  • Нравится
Реакции: dag0n, GoBL1n и Kevgen
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!