Возврат к libc вызывает ошибку сегментации - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь создать переполнение буфера, используя возврат к libc.

Вот код атакующего: http://codepad.org/TtoLjAHc.Он создает полезную нагрузку и сохраняет ее в файле с именем badfile.

Вот уязвимый код: http://codepad.org/DZ7AQy4D. Он читает из badfile и должен порождать оболочку.и защита стека выключены.

Код злоумышленника работает.Но уязвимый код вызывает ошибку.

Может кто-нибудь объяснить, где я ошибаюсь?

Соответствующие разделы кода эксплуататора:

memset(buffer, "\x90", 52);
memcpy(buffer,"BUF=",4);
memcpy(buffer+36, systemAddr,4);
memcpy(buffer+40,exitAddr,4);
memcpy(buffer+44, shAddr,4);
memcpy(buffer+48, nullPad, 4);

Эта переменная, буфертеперь записывается в файл с именем badfile, который читается уязвимой программой с помощью fread ().Соответствующий раздел уязвимой программы:

char buffer[12];
length = fread (buffer, sizeof (char), 52, badfile);

1 Ответ

0 голосов
/ 09 февраля 2012

Вы выделили 12 октетов памяти для buffer, но вы пытаетесь записать 52 октета. Поэтому вы выходите из массива, вызывая ошибку сегментации.

Попробуйте:

*char buffer[12];
length = fread (buffer, sizeof (char), **12**, badfile);*

и должно работать нормально.

...