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