Использование переходов непосредственно в регистре RET - PullRequest
0 голосов
/ 14 ноября 2011

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

Я исследовал и обнаружил, что это не таклегко определить адрес памяти такого буфера во время выполнения.

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

В основном это будет выглядеть примерно так:код, это просто, чтобы дать представление о том, что я пытаюсь достичь.

Спасибо

1 Ответ

0 голосов
/ 14 ноября 2011

То, что вы перезаписываете при переполнении стека, это не инструкция RET, это адрес возврата.Таким образом, вы перезаписываете не машинный код, а указатель на машинный код.Действительно, есть техники, позволяющие переходить к интересным фрагментам кода, google для ret-into-libc и программирование, ориентированное на возврат.

На аналогичной ноте известной техникой является техника «батут», где вы делаетеВаш обратный адрес указывает на инструкцию 'JMP ESP', которая возвращается в ваш переполненный буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...