Почему я получаю сообщение «Невозможно найти границу текущей функции», когда я перезаписываю ret-адрес уязвимой программы?

Я хочу использовать переполнение буфера на основе стека в образовательных целях.

Существует типичная функция, вызываемая с параметром из main, который вводится программой в локальный буфер, в котором сохраняется параметр. Учитывая ввод, такой как nops + shellcode + address_shellcode , я воспользуюсь им.

После отладки с помощью gdb я нашел адрес кода оболочки, поскольку он будет передаваться как параметр, и сразу после strcpy я проверил стек и $ ebp + 8 адрес возврата был успешно перезаписан адресом кода оболочки. Итак, у меня есть то, что я хочу. Но когда я перешел к выполнению, я получил:

->shellcode_address in ?? ()

, а затем

Cannot find bound of current function

Адрес возврата имеет то значение, которое я хочу. Есть идеи, что происходит?

Также, когда я выполняю его, у меня возникает ошибка сегментации, и я скомпилировал его с помощью -g -fno-stack-protector . Почему?

5
задан Mogsdad 14 April 2016 в 18:19
поделиться