Посмотрим на конкретном примере, как работает взлом программы через так называемое "переполнение буфера". Возьмём простейшую программу на Си, которая запрашивает у пользователя пароль и выполняет те или иные действия в зависимости от того, правильный ли пароль был введён: Компилируем и проверяем, что программа работает корректно: Итак, наш crackme выдаёт сообщение "Access allowed" только в случае, если был указан суперсекретный пароль Qwerty123. Но что будет, если введённая строка окажется слишком длинной? Вот те раз! Программа вылетела с ошибкой "stack smashing detected". А что самое интересное, сравнение происходило не со строкой Qwerty123, а с чередой единиц. Дело в том, что scanf() записывает в память введённую строку целиком. Если буфер под неё окажется короче самой строки, будут переписаны соседние ячейки памяти. Этот эффект и называется "переполнением буфера". Опытным путём установим минимальное количество символов, которое нужно ввести для получения непредсказуемого поведения.
Простейший пример атаки через переполнение буфера
4 июня 20224 июн 2022
153
1 мин