Автор: Михаил

Источник: Купи слона Writeup

Ссылка на таск Codeby

https://codeby.games/categories/pwn/56a160a2-9ca5-43d9-9449-04d1117c1017

Описание задания

Все говорят “хочу флаг”, а ты купи слона

Решение

“Купи слона”

При запуске видим, что сначала у нас запрашивается имя, а затем выводится сообщение “Buy an elephant”, после чего каждое наше сообщение копируется в фразу для ответа.

Открываем файл в IDA, смотрим декомпилированный код:

Для получения флага нам нужно, чтобы выполнилась функция sub_4012B6. Но чтобы она запустилась необходимо сделать так, чтобы переменная byte_4051A0была не равна NULL и прервался бесконечный цикл while (1).

Ну с циклом понятно, достаточно ввести q, чтобы сработал break. Для изменения переменной byte_4051A0посмотрим, где она хранится в памяти, нажав по ней дважды ЛКМ.

Видим ее адрес - 4051A0. Посмотрим, что находится рядом с ней. Пролистав выше замечаем массив destпо адресу 405120.

В декомпилированном коде видим, что в массив dest копируется введенная нами строка s1 длиной до 256 символов. Значит, рассчитав смещение dest от byte_4051A0 в памяти, мы сможем подать такую строку, которая перезапишет эту переменную:

4051A0 - 405120 = 0x80 = 128

Но перед копированием в dest нашей строки в массив записывается строка Everyone says ", а после - строка ", but you need to buy an elephant Вычтем из 128 длины этих строк: 128 - 15 - 34 = 79.

Таким образом, при вводе 80 символов, последний символ перезапишет byte_4051A0.

Tags:

#codeby#writeup#pwn#easy