2010-04-04 3 views
1

Теперь я выполняю проверку атаки переполнения буфера на моем собственном компьютере (Ubuntu 9.10, gcc-4.4.1) на основе статьи http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html. Но я не достиг цели. Каждый раз, когда вызывается segfault, сопровождается некоторой информацией об ошибке.Неявная функция __strcpy_chk() call

Я скомпилировал исходный код и хочу получить дополнительную информацию с помощью objdump. Функция __strcpy_chk вызывается в сводном коде сборки, и сказано, что «Функция __strcpy_chk() не находится в исходном стандарте, она только в двоичном стандарте». Использует ли этот механизм компилятор для защиты стека времени выполнения? Чтобы закончить мой тест, как я могу обойти защиту?

С уважением.

+0

У вас включен ASLR? Вы компилируете флаги -fno-stack-protector? Вы компилируете флаги -execstack -Z? –

+0

Нет, я компилирую код без каких-либо флагов и ASLR включен. –

ответ

3

Функция пытается проверить, что вы случайно не сбиваете вещи с ошибкой (т. Е. Перезаписываете обратный адрес функции), и это часть реализации strcpy, а не ее спецификация. Это лишь частичный патч для проблем с strcpy, но он действительно защищает вас от проблем, о которых говорит эта веб-страница, и только с небольшими затратами.

Если вы хотите этого избежать, напишите свою собственную версию strcpy. Наивная реализация, о которой вы сначала подумаете, должна иметь проблему и будет хорошо использоваться для демонстрации.

Смежные вопросы