从Hacking理解返回地址计算:剥削的艺术?

问题描述 投票:0回答:0

程序显示在类似线程这里

让我们假设我的操作系统没有实施

ASLR
或来自
buffer overflow
的其他保护。

长话短说,作者正在从父进程生成子进程并将父进程创建的

buffer
传递给子进程以覆盖子进程上的
return address
stack
以生成
shell 
.到目前为止一切顺利。

我很难理解的是

return address
是在父进程中计算的,即

ret = (unsigned int) &i - offset; // Set return address

这个

return address
stack
parent process
的地址,但是
child process
有自己的
stack
address space
。作者如何得出结论,上面计算的
ret
将是子堆栈框架上
nop-sleds
/
shell
的大致位置,因为这两个堆栈不同且不相关(?)

为了实验,我尝试暂时关闭

ASLR
,使用
gdb
单独调试这些程序,发现当我在
breakpoint
函数上设置
main
时,
$ESP
总是指向父级
0xffffd02c
-process 和
0xffffd04c
用于子进程。

c stack-overflow buffer-overflow exploit
© www.soinside.com 2019 - 2024. All rights reserved.