В чем опасность?
Большинство недостатков в безопасности происходят из-за неправильной конфигурации или лени. Это правило справедливо для строк форматирования.
Часто необходимо в программе использовать строки, оканчивающиеся нулевым байтом . Где в программе - для нас не важно. Рассматриваемая уязвимость опять позволяет производить запись прямо в память. Данные для атаки могут поступать с stdin (стандартный ввод) , файлов и т.д. Достаточно одной инструкции:
printf("%s", str);
Однако программист может решить сохранить время и шесть байт, написав только:
printf(str);
С "экономией" на уме, этот программист открывает потенциальную дыру в своей работе. Он удовлетворился передачей в качестве аргумента одной строки, которую он хотел просто отобразить без изменений. Однако эта строка будет разбираться для поиска директив форматирования (%d , %g ...). Если подобный символ форматирования найден, соответствующий ему аргумент ищется в стеке.
Мы начнем с введения в семейство функций printf() . Мы ожидаем, как минимум, что каждый знает их... но не во всех подробностях, поэтому мы поговорим о наименее известных сторонах этих подпрограмм. Затем мы увидим, как получить необходимую информацию, чтобы воспользоваться типичной ошибкой. И в конце, мы покажем, как это все собирается в один пример.
Назад |
Содержание |
Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|