缓冲区溢出链接



是否可以通过将堆栈链接在一起来实现缓冲区溢出(假设没有像金丝雀、aslr、不可执行堆栈等现代堆栈防御(?我试着在下面画一张图来说明我的意思:

(已编辑;低地址(


缓冲区A+ebp(8字节(


返回地址A


随机存储器(假设为40字节(


缓冲区B+ebp(40字节(


返回地址B


(高地址(

我可以制作如下的有效载荷吗
'A'*8+缓冲区开始的十六进制值B+'\x90'*50+外壳代码(假设20字节(
想法是我返回到包含nop底座和外壳代码的堆栈部分。

如果我可以执行上面的有效负载,那么作为后续操作,如果我放入随机存储器而不是缓冲区B中呢?诺普雪橇会把我带到我的弹壳代码吗?非常感谢。

这绝对是可能的,对于我去年学习的操作系统课程,我们甚至不得不将此作为一项作业。这就是你提到的堆栈防御存在的全部原因,所以你通常不能这样做。当你放入随机内存时,如果这部分是可执行的、可写的等等,那么你确实可以在这个过程中滑动并运行任意的shell代码。然而,即使二进制文件不使用金丝雀等保护措施,内核也有另一个诀窍:地址空间随机化。通常很难从你试图利用的过程中弄清楚重要函数加载在哪里,重要数据在哪里

对于课程,这是我们的设置:


int main(int argc, char ** argv) {
char buf[256];
strcpy(buf, argv[1]);
return 0;
}
void unused_function() {
printf("exploit!");
}

目标当然是调用unused_function。地址空间随机化被关闭,堆栈保护也被关闭。

最新更新