1. Переполнение буфера в стеке
• Происходит, когда программа выполняет запись в адрес памяти в стеке вызовов программы за пределами предполагаемой структуры данных - буфера фиксированной длины.
• Характеристики стекового программирования
1. «Стек» - это область памяти, в которой размещаются автоматические переменные.
2. Параметры функции распределяются в стеке и не инициализируются системой автоматически, поэтому они имеют мусор, пока не будут инициализированы.
3. Как только функция завершила свой цикл, ссылка на переменную в стеке удаляется. (т.е. если функция вызывается несколько раз, ее локальные переменные и параметры воссоздаются и уничтожаются при каждом вызове и выходе из функции.)
• Злоумышленник использует переполнения буфера на основе стека для различных манипуляций с программой, перезаписывая
1. Локальная переменная, которая находится рядом с буфером в памяти в стеке, чтобы изменить поведение программы, которая может помочь злоумышленнику.
2. Обратный адрес в кадре стека. Как только функция вернется, выполнение возобновится по адресу возврата, указанному злоумышленником, обычно это заполненный пользователем буфер.
3. Указатель на функцию или обработчик исключений, который впоследствии выполняется.
• Факторы преодоления подвигов
1. Нулевые байты в адресах
2. Изменчивость в расположении шелл-кода
3. Различия между средами. Код оболочки - это небольшой фрагмент кода, используемый при эксплуатации уязвимости программного обеспечения.
2. Переполнение буфера в куче
• Происходит в области данных кучи.
• Переполнение происходит, когда приложение копирует в буфер больше данных, чем предназначено для этого буфера.
• Уязвим к эксплуатации, если копирует данные в буфер без предварительной проверки того, что источник будет соответствовать цели.
• Характеристики программирования на основе стека и кучи:
• «Куча» - это «свободное хранилище», то есть пространство памяти, когда выделяются динамические объекты.
• Куча - это пространство памяти, динамически распределяемое функциями new (), malloc () и calloc ().
• Динамически создаваемые переменные (т.е. объявленные переменные) создаются в куче перед выполнением и сохраняются в памяти до завершения жизненного цикла объекта.
• Эксплуатация выполнена
• Повреждение данных для переопределения внутренних структур, таких как указатели на связанный список.
• Обмен указателями для отмены функции программы