Разница между переполнением буфера и возврата к атаке LIBC

Я хочу понять точную разницу между этими двумя типами атаки. От того, что я прочитал:

Буферный переполнение: он перезаписывает адрес RET в стеке, чтобы указать на другой раздел кода, в который вставлен вредоносный код. Настолько эффективно - здесь нам нужно изменить исходный код программы, чтобы фактически выполнить атаку.

Вернуться к libc - здесь, вместо изменений исходного кода, используются вызовы функций времени запуска, приведенные библиотекой C (чтобы открыть оболочку). Здесь параметры, используемые для вызова функции, также передаются в буфере перезаписи, заканчиваясь после части Stack.

Это вышеупомянутое точное описание?

и еще один, связанный с ними вопросом - возможно ли возможность иметь атаку переполнения буфера, не модифицируя исходный код исходной программы? Вероятно, если мы напишем новую программу и позвольте изменять определенные разделы памяти (которая является новым адресом RET в поврежденном стеке исходной программы). Опять же, я думаю, что это может быть невозможно из-за защиты памяти, предлагаемой между процессами в ядре.

10
задан Ethan Heilman 20 March 2012 в 19:39
поделиться