Всем доброго времени суток! Набираем обороты... Сегодня мы будем 'пывнить" stack3.exe (ссылочка на файл, как обычно, на Github). Закидываем в Ghidra: Анализируем... Получаем декомпилированный код. Нас встречает все тот же массив из 64-х байт. Небезопасная функция gets(). Функция gets() считывает строку символов из стандартного потока ввода (stdin) и помещает ее в массив local_54. Также в коде есть указатель (local_14) на функцию и проверка (if), не является ли local_14 - NULL. Т.е. если мы "перезапишем" local_14, то попадем в ветку THEN и получим сообщение "calling function pointer, jumping to...", а также перейдем по адресу, которым мы перезапишем local_14: Вроде бы все понятно, но есть ощущение, что чего-то нехватает? :) Обращаем внимание на функцию "win": Функция "win" просто выводит сообщение "code flow successfully changed": Фактически, нам нужно использовать BOF, чтобы изменить значение указателя функции, сделав так, чтобы он указывал на адрес функции "win" (это и будет успешным
Реверсинжиниринг PWN-тасков или эксплуатируем бинарные уязвимости (Часть 4 / Stack3)
26 июля 202426 июл 2024
3
1 мин