-1
我试图粉碎堆栈,并尝试从下面的链接读取shell: http://insecure.org/stf/smashstack.html 我发送arglen neg并成功粉碎了堆栈并且代码给出了段错误。但是我不能计算我应该放置SHELL代码的RET地址。因此,在距离之后的缓冲区中,我将放置SHELL代码。从缓冲区指针计算堆栈中的返回地址
int foo(char* arg, short arglen)
{
char buffer[8];
short maxlen = 8;
int len;
if (arglen < maxlen)
{
len = strlen(arg);
printf("arglen =%d, buf size =%d\n", arglen, len);
strncpy(buffer, arg, len);
}else
printf("foo finished. Everything is normal.\n");
return 0;
}
在strncpy()函数的info frame
O /上述代码p是把断点:
(gdb) info frame
Stack level 0, frame at 0xffffc740:
eip = 0x804854a in foo (target.c:17); saved eip = 0x804864f
called by frame at 0xff80cd13
source language c.
Arglist at 0xffffc738, args: arg=0xffffc750 "1\300Ph//shh/bin\211\343PS\211ᙰ\v̀", arglen=-32549
Locals at 0xffffc738, Previous frame's sp is 0xffffc740
Saved registers:
ebp at 0xffffc738, eip at 0xffffc73c
(gdb)
如何从buffer
地址计算的返回地址?
[编辑]
12345%n\x90\x90\x90\x90...\x90\x90SHELLCODE
喜欢我希望把我的缓冲存储器
在我的问题中有什么问题?如果可能的话,我可以帮助清理 – 2015-02-08 12:27:32
您的代码很可能无法工作,除非您重建Linux内核时没有x86处理器ca 2001(英特尔稍后)中引入的“不执行堆栈”保护。 – 2015-02-08 14:15:42