Лекция: Искажение адреса возврата из функции

Так как вызову функции сопутствует занесение адреса возврата в стек, то при его подмене атакующим управление передается по заданному им адресу. Здесь используется переполнение буфера локальных переменных функции, которые также создаются в стеке. Простым примером служит следующий фрагмент программы на языке С++.

 

int namelen ()

{

char name[20];

gets(name);

return strlen(name);

}

 

Из примера видно, что при вводе имени размером более 20 символов частью строки будет замещен адрес возврата из функции. Далее, при выполнении инструкции возврата из подпрограммы, управление будет передано по адресу, который образуют соответ-ствующие позиции введенной строки и в обычной ситуации будет получено сообщение об ошибке операционной системы (состояние стека представлено на рисунке 1.5).

Рис. 1.5. Состояние стека при реализации передачи управления

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

 

Данная атака на переполнение буфера получила название «атака срыва стека» (stack smashing attack).

еще рефераты
Еще работы по информатике