Каким образом можно реализовать эксплойт переполнения буфера?

Возник интересный вопрос. Прочитал обучалку по эксплойтам. Дело в том, что книга старая и все манипуляции там проводятся с 32-х битной архитектурой. Используется примерно такая структура эксплойта:
NOP-цепь - Полезная нагрузка(шелл-код) - повторяющийся адрес возврата.
Собственно в 32-х битной архитектуре в тех областях памяти, в которые загружается программа нет нулевых байтов в адресе(например 0x9f5b667d), код эксплойта спокойно можно передать программе через аргументы программы. Когда-же используется 64-битная архитектура, то в адресах появляется 2 нулевых байта и при вводе их в аргументы программе bash игнорирует их. Отсюда получается проблема того, что в адрес возврата записывается не то что нужно. Пример: нужный адрес возврата: 0x0000ffffff5a673a, а в область стека, которая хранит адрес возврата записывается следующее: 0xffffff5a673affff.
Получается нельзя использовать повторяющийся адрес возврата, а необходимо точно рассчитать расстояние от начала буфера до области адреса возврата, но это не всегда возможно, т.к не всегда при создании эксплойта можно использовать дебаггер. Есть ли тут какие-то альтернативы?

[root@arch exploits]# ./buffer_overflow.bin $(perl -e 'print "\x5a\x6b\x38\x98\xff\xff\x00\x00"')
-bash: предупреждение: подстановка команды: во входных данных проигнорирован нулевой байт
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 1
@menkar3
Попробуйте предварительно записать шеллкод в файл и передать семплу на вход содержимое файла. Мне кажется это самый простой способ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы