У нас все получилось. Похоже, расширение ROM было включено. Работает нормально после его отключения. Спасибо @ Маргарет Блум.
SoapBox уже сделал отличную работу по продвижению Вас в правильном направлении.
Для получения дополнительной информации; http://www.skullsecurity.org/wiki/index.php/Example_4
Я, вероятно, не должен делать Вашей домашней работы для Вас. Но в основном:
Необходимо заставить символьный буфер где-нибудь в памяти хранить строку, которую Вы хотите выполнить. Очевидно, можно сделать это тот же способ, которым Вы получаете другие вызванные функции (т.е. Вы помещаете текст на стек также). После того, как у Вас есть это записанное, необходимо записать указатель на него на стеке в месте, что функция shell_code ожидает находить свои аргументы.
Лучший способ понять это без меня делающий всю работу для Вас состоит в том, чтобы записать Ваш стек/содержание памяти на куске бумаги/электронной доски. Запишите, как это посмотрело бы, называли ли Вы обычно shell_code из программы. Затем запишите то, на что стек похож внутри victum_func и фигура, какие вещи измениться, чтобы заставить это быть похожим это посмотрело бы "естественно" (конечно, учет того факта, что некоторые вещи, "не делают уходов" как обратный адрес).
Это - вся благотворительность, которую Вы собираетесь получать от меня сегодня!:-P
Необходимо управлять стековым фреймом вызывающей стороны (main()
), и расположение это таким способом, который возврат shell_call()
от эпилога переполненного victim_func()
последний мог найти прочный стек, поскольку это было названо основным.
При этом, вероятно, необходимо исказить указатель кадра в стековом фрейме жертвы, которая будет восстановлена в %ebp посредством leave
.