我正在尝试写一个返回到libc的漏洞,但是我不知道我应该把我的system()调用的参数放在堆栈的什么地方。
易受攻击的函数是
void func(char *str)
{
char buffer[12];
strcpy(buffer,str);
}此函数的堆栈将如下所示:
-----------
str
-----------
return address
-----------
previous frame pointer
-----------
buffer
-----------我知道我必须用system()调用的地址覆盖返回地址,但是我应该把它的参数的地址放在哪里?为什么?
谢谢。
发布于 2011-10-15 04:00:48
指向该参数的指针应位于返回地址的正上方。也就是说,在覆盖之后,您的堆栈应该如下所示:
-----------
shellcode: /bin/whatever ...
...
...
...
\0
-----------
&shellcode <-- str is here
-----------
&system <-- return address is here
-----------
previous frame pointer <--- don't corrupt this
-----------
padding <-- buffer请注意,这意味着当到达strcpy时,您必须知道%esp是什么(以避免损坏前一个帧指针)。此外,所有指针都不能包含零字节。
https://stackoverflow.com/questions/7772847
复制相似问题