Почему адрес, с которого начинается стек, достаточно предсказуем, чтобы обеспечить возможность повторного использования, но кажется непредсказуемым? - PullRequest
1 голос
/ 20 марта 2012

Недавно я учил себя писать эксплойты и шелл-код , и многие из руководств / книг утверждают, что мы можем догадаться, где находится стек начинается и, таким образом, с небольшой работой угадать, с какого адреса в стеке начинается наш шелл-код.

  • Почему адрес начала стека предсказуем? Разве стек не должен начинаться с какого-то случайного адреса в памяти?
  • Если начальный адрес стека - это просто фиксированное смещение в виртуальном адресном пространстве, то почему он отличается от машины к машине?
  • Каков предел погрешности между различными платформами и адресом начала стека?

Related: "стек начинается с одного и того же адреса для каждой программы" , Проблемы адресации от взлома: искусство эксплуатации , Почему адрес стека растет в сторону уменьшение адресов памяти?

РЕДАКТИРОВАТЬ Для моих тестов Рандомизация расположения адресного пространства (ASLR) выключена.

1 Ответ

1 голос
/ 20 марта 2012

На мой взгляд, определение начального адреса стека предсказуемым не так важно, как возможность изменить вершину стека.Когда метод вызывается, в стеке сохраняются различные регистры, включая программный счетчик, который указывает на место, где код возобновит выполнение после возврата метода.Кроме того, пространство стека зарезервировано для хранения локальных переменных метода.(В конце концов, их нужно где-то хранить!). В некоторых случаях эти переменные можно использовать для перезаписи вершины стека и изменения места, где код возобновляет выполнение (например).Некоторой разборки и проверки памяти с помощью отладчика, как правило, достаточно, чтобы определить, где переменные оказываются в стеке относительно счетчика программы.Затем, это «простой» вопрос перезаписи места возврата в стеке, чтобы заставить его возвращаться куда-либо еще, когда метод вернется.

Это не отвечает вашим вторым двум пунктам, и я думаю, что только сортировкаОтветы ваши первые, но это только начало.

...