Пример программы, уязвимой к переполнению буфера
После изучения основ переполнения буфера пришло время рассмотреть пример программы, извлекающей из него пользу, – программы переполнения буфера. В интересах простоты изучения программа должна быть понятной, а каждый шаг ее работы подробно исследован. Программа написана для платформ Windows NT и Linux.
Программа, уязвимая к переполнению буфера
Главная цель – привести в этой секции пример программы, уязвимой к переполнению буфера. Рассмотренная в этой секции программа очень похожа на последний пример, но вместо постоянной строки входных данных она использует ввод данных пользователя. Это позволило загружать в регистр EIP нужные данные.
Исходный текст программы, уязвимой к переполнению буфера
На последующих рисунках, начиная с рис. 8.17, представлена программа, предназначенная для считывания входных данных из файла в локальную переменную, размещенную в области стека. В результате присваивания этой переменной входных данных происходит переполнение буфера. Управляя входными данными программы, появляется идеальная возможность изучить возможности использования переполнения буфера. В программе вызывается специально написанная для примера функция
Рис. 8.17. Пример программы, уязвимой к переполнению буфера
Дизассемблерование
На рисунке 8.18 представлен дизассемблерный вид функции