Я нахожусь на Ubuntu Linux 16.04 / Intel с отключенным ASLR.
Используется следующая программа.
#include <stdio.h>
#include <string.h>
void func(char *name)
{
char buf[100];
strcpy(buf, name);
printf("Welcome %s\n", buf);
}
int main(int argc, char *argv[])
{
func(argv[1]);
return 0;
}
Она построена с помощью.
$ gcc buf.c -o buf -fno-stack-protector -mpreferred-stack-boundary=2
Я могу успешно переполнить буфер и перезаписать адрес возврата при использовании 7-битных символов (?), Как показано ниже.
gdb-peda$ run $(python3 -c 'print("\x41" * 108)')
Тем не менее, он не работает правильно, когда я пытаюсь вставить 8-битный символ (?).
gdb-peda$ run $(python3 -c 'print("\xc0" * 108)')
Кажется, есть какая-то кодировка UTF-8 в пути, поэтому \xc0
становится \xc3\x80
.
Я пытался запустить
gdb-peda$ run $(python3 -c 'print(("\xc0".encode("latin1") * 108))')
Это что-то напутало .. В любом случае, обратный адрес не был успешно перезаписан.
Застрял, и любые указатели будут очень признательны.