У меня есть исполняемый файл, для которого у меня нет символов отладки или исходного кода. Он в основном запрашивает у вас пароль и дает вам 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')
В основном регистр получаетперезаписано с неправильным значением, поскольку косые черты экранированы .... Почему это и как я могу это исправить?