Использование переполнения стека в C

У нас все получилось. Похоже, расширение ROM было включено. Работает нормально после его отключения. Спасибо @ Маргарет Блум.

8
задан hjavaher 17 April 2015 в 02:46
поделиться

3 ответа

SoapBox уже сделал отличную работу по продвижению Вас в правильном направлении.

Для получения дополнительной информации; http://www.skullsecurity.org/wiki/index.php/Example_4

2
ответ дан 5 December 2019 в 15:27
поделиться

Я, вероятно, не должен делать Вашей домашней работы для Вас. Но в основном:

Необходимо заставить символьный буфер где-нибудь в памяти хранить строку, которую Вы хотите выполнить. Очевидно, можно сделать это тот же способ, которым Вы получаете другие вызванные функции (т.е. Вы помещаете текст на стек также). После того, как у Вас есть это записанное, необходимо записать указатель на него на стеке в месте, что функция shell_code ожидает находить свои аргументы.

Лучший способ понять это без меня делающий всю работу для Вас состоит в том, чтобы записать Ваш стек/содержание памяти на куске бумаги/электронной доски. Запишите, как это посмотрело бы, называли ли Вы обычно shell_code из программы. Затем запишите то, на что стек похож внутри victum_func и фигура, какие вещи измениться, чтобы заставить это быть похожим это посмотрело бы "естественно" (конечно, учет того факта, что некоторые вещи, "не делают уходов" как обратный адрес).

Это - вся благотворительность, которую Вы собираетесь получать от меня сегодня!:-P

8
ответ дан 5 December 2019 в 15:27
поделиться

Необходимо управлять стековым фреймом вызывающей стороны (main()), и расположение это таким способом, который возврат shell_call() от эпилога переполненного victim_func() последний мог найти прочный стек, поскольку это было названо основным.

При этом, вероятно, необходимо исказить указатель кадра в стековом фрейме жертвы, которая будет восстановлена в %ebp посредством leave.

1
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: