ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Simple BOF: Я хочу купить этот флаг!!! (writeup) (https://forum.antichat.xyz/showthread.php?t=1642117)

yetiraki 19.07.2023 13:04

Всем привет.

Идем дальше. Идем в [S]MEGABANK от EVIL CORP[/S] с огромным желанием "купить" флаг.
Скачиваем банк-клиент, unzip его, открываем в IDA и идем в main.

https://forum.antichat.xyz/attachmen...06da40d7bd.png

Далее идем в login

https://forum.antichat.xyz/attachmen...9eb2a55cb8.png

Видим, что тут у нас есть пользовательский ввод логина и пароля, но тут у нас все по феншую, ввод ограничен, тут мы ничего переписать не можем. Сразу видно, что в банке хороший разработчик =) но где же взять логин и пароль, не может же он быть захардкоден прямо в приложухе?

https://forum.antichat.xyz/attachmen...625e60a79f.png

https://forum.antichat.xyz/attachmen...187cbc6061.png

А не, может, оказывается... Запоминаем.

Далее идем в admin_menu

https://forum.antichat.xyz/attachmen...15f516bf33.png

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

Там где мы смотрели креды, там же видно, что все 3 переменные лежат друг за другом, значит, чтобы переписать balance, надо переписать admin_login и admin_pass. Размер admin_login 10байт, размер admin_pass 34байта и далее unsigned int переменная balance. Но как нам записать в int из строки? Можем обратиться к ASCII таблице. Видим что в коде написан hex суммы необходимой для покупки флага, по таблице это будет CDB.
Пробуем нагрузку

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDB и в отладке видим что у нас сумма стала 424443, что нам не подходит. Почему так получилось? Потому что есть Big-Endian и есть Little-Endian. поменяем местами B и C.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDC - ура, все переписалось как надо, баланс точный и соответствует необходимому для покупки флага. выбираем пункт меню покупка флага и получаем флаг.

Так как у нас pwn, то будем использовать pwn.

https://forum.antichat.xyz/attachmen...3356a32575.png

PWNED

KatCote 25.07.2023 07:32

Извиняюсь если это глупый вопрос, но откуда мы взяли 10 и 34 байта?? Откуда 10 я еще примерно могу понять, но вот 34 никак не выходит найти. Заранее Спасибо

yetiraki 25.07.2023 13:21

Цитата:


KatCote сказал(а):

Извиняюсь если это глупый вопрос, но откуда мы взяли 10 и 34 байта?? Откуда 10 я еще примерно могу понять, но вот 34 никак не выходит найти. Заранее Спасибо


Не бывает глупых вопросов.

Справедливо урезонили дерзость зарвавшегося юнца.
Когда я писал райтап, я меньше знал, чем сейчас и писал исходя из имевшихся знаний, но дела там обстоят так:
1. 2 раза кликаем на admin_login и проваливаемся туда, где лежат переменные.
2.1 ПКМ на admin_login и выбираем Array и у нас указывается размер массива. Так же и для admin_password.
2.2 Либо можно вычитать адреса где лежат переменные со всеми align и прочим и получать размеры массивов.
Я использовал вычитание адресов и получилось admin_login = 10 admin_password = 28
3. Размер balance 4 (он int), но между окончанием admin_password и balance есть еще 4 байта. Как они там и почему я так и не допер, в этой части нагрузку я формировал опытным путем.

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

https://forum.antichat.xyz/attachmen...7e7353dd64.png

Надеюсь смог ответить на вопрос.

PS
Полезные ссылки
ссылка1
серия статей


Время: 13:26