| funnywhale |
06.09.2023 00:39 |
Всем привет! Я сделал подробный разбор своего решения, потом посмотрел официальный WriteUp и понял, что намудрил.
Однако, считаю полученное решение интересным, т.к. оно приводит к исполнению произвольного кода, в отличие от официального.
Подробный видеоразбор:
Коротко о условии и решении:
Условие:- Бинарь собран без PIE
- Присутствует канарейка
- Есть функция cosmic ray, интвертирующая один бит в памяти процесса по произвольному переданному адресу
- Есть пользовательский ввод, способный перетереть адрес возврата
Официальное решение:- Инвертировать бит в JZ так, чтобы получилось JNZ и обойти проверку канарейки
- Переполнить стек для вызова нужной функции
Мое решение:- Изменить смещение для jz , чтобы зациклить вызов cosmic ray
- Модифицировать call puts на call win
Преимуществом моего решения является возможность перезаписи любого объема кода для последующего вызова
|