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