可是,这个地址0xbffffffa怎么可能固定呢?我的意思是,作者表达自己的方式表明这是任何机器上任何 Linux 发行版的普遍事实,但绝对不是这种情况,那么究竟是什么意思呢?他怎么知道shellcode的地址?
最佳答案
无论如何都不是这方面的专家,但我的理解是,在 Linux 中,每个进程都有自己的虚拟地址空间,内核内存映射到 0xC0000000 以上的地址,堆栈从 0xC0000000 向下增长,堆向上增长从 0x00000000 开始。
如果是这样的话,这就是说环境将是堆栈中的第一个东西——0x2BFFFFFA 就在 0xC0000000 以下几个字节——并且你可以预测它的地址,因为只有固定数量的东西在此之前。
我认为这仅适用于未打开地址空间布局随机化 (ASLR) 的情况,尽管据我所知,我认为 ASLR 不会完全阻止此类利用。
关于linux - 作者怎么能百分百确定环境变量的地址呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54065087/