Получение адреса памяти функции в linux x86

#linux #exploit #buffer-overflow

Вопрос:

Я видел много эксплойтов, которые записывают адрес памяти функций/кода в EIP, и мне было интересно, есть ли способ (возможно, с помощью gdb или чего-то еще), который я мог бы использовать для определения адреса памяти некоторого шеллкода, который я использую в тесте переполнения буфера, и использовать библиотеку структуры python, чтобы упаковать его в указатель возврата.

Прямо сейчас я изучаю стек с помощью gdb и использую NOPS в своем коде, чтобы определить адрес функции, но на самом деле это просто игра в угадайку. Кто-нибудь знает, что я могу сделать?

Ответ №1:

В GDB вы можете изучить функцию и получить ее адрес из имени символа, используя: x myFun

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

Когда я пытаюсь использовать двоичный файл с помощью ret2shellcode, я обычно пытаюсь заполнить буфер своим собственным вводом и установить точку останова на этом входе, затем я пытаюсь определить его местоположение и размер в стеке, будет ли он соответствовать моему шеллкоду или нет, в зависимости от размера вашего буфера. Иногда вы можете разместить шелл-код до EIP, иногда вы можете разместить его после. Все зависит от вашего двоичного файла, и это предполагает использование базового кода ret2shell.

Комментарии:

1. Спасибо, я немного поэкспериментирую и посмотрю, что сработает…