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