Киберколизей CODEBY 04-2024. Writeup PWN #1
МихаилПолезная информации по ИБ и разборы задачек CTF.
Киберколизей CODEBY 04-2024. Writeup PWN #2
Киберколизей CODEBY 04-2024. Writeup PWN #3
"Вход не для всех"

При запуске у нас запрашивается сначала логин, после ввода "admin" нам предлагается ввести пароль, при неверно введенном пароле программа завершается.
Открываем файл в IDA, смотрим декомпилированный код:

Видим, что сначала у нас запрашивается логин, сравнивается с переменной true_login, которая хранится в программе в открытом виде, а затем проверяется MD5-хэш от введенного пароля с хэшем, хранимым в памяти.

Замечаем, что в случае, если хэш введенного пароля совпадет с true_hash, у нас выставляется v24 = 1 и выводится сообщение "Access is allowed!". После проверяется значение переменной v24, и если она не равна 1, то программа завершается.
Посмотрим, сможем ли мы изменить переменную v24, для этого перейдем к ее расположению в памяти (для этого дважды нажимаем ЛКМ по v24).

На стеке наша переменная v24 называется var_1 и располагается она по смещению -1.
Вернемся в декомпилированному коду и посмотрим, где располагается переменная v4, в которую записывается введенный нами пароль - -B0. Посчитаем разницу между B0 и 1:
0xB0 - 1 = 0xAF = 175.
Также по декомпилированному коду видим, что ввод пароля осуществлен при помощи функции scanf, которая принимает 176 строчных символов.
Итак, если мы вместо пароля введем 175 любых байт, а 176-ым байтом введем \x01, то переменная v24 должна стать равной 1.
python2 -c "print 'a'*175 + '\x01'" > codeby_pwn1_inp.txt
Открываем полученный файл текстовым редактором и копируем все содержимое.
Запускаем таск, чтобы проверить:

Все сработало. Осталось только провернуть такие же манипуляции с программой на сервере.
P.s. почему-то с первого раза при вводе "1" влаг не выдается, а если нажатьEnter, ничего не введя, а затем ввести "1", то получается, на серверной версии также было. Возможно, какие-то особенности функцииfgets, но да не суть, флаг получен)