如何解决缓冲区溢出链接
是否可以通过将堆栈链接在一起来进行缓冲区溢出(假设没有现代堆栈防御,如金丝雀、aslr、不可执行堆栈等)?我试着在下面画一张图来说明我的意思:
(已编辑;低地址)
缓冲区 A + ebp(8 字节)
返回地址 A
随机内存(假设 40 字节)
缓冲区 B + ebp(40 字节)
返回地址 B
(高地址)
我可以制作如下的有效载荷吗?
'A' * 8 + 缓冲区 B 开头的十六进制值 + '\x90' * 50 + shellcode(假设 20 个字节)
这个想法是我返回到包含 nop sled 和 shellcode 的堆栈的一部分。
如果我可以执行上面的有效负载,那么作为后续,如果我放入随机内存而不是缓冲区 B 会怎样? nop 雪橇会带我到我的 shellcode 吗?谢谢!!!
解决方法
这绝对是可能的,对于我去年学习的操作系统课程,我们甚至不得不将其作为作业来完成。这就是你提到的堆栈防御存在的全部原因,所以你通常不能这样做。当你进入随机内存时,如果这部分是可执行的、可写的等等,那么你确实可以在这个过程中滑动和运行任意的 shellcode。然而,即使二进制文件不使用金丝雀等这些保护措施,内核也有另一个技巧:地址空间随机化。通常很难从您尝试利用的过程中找出重要函数的加载位置以及重要数据的位置。
对于课程,这是我们的设置:
int main(int argc,char ** argv) {
char buf[256];
strcpy(buf,argv[1]);
return 0;
}
void unused_function() {
printf("exploit!");
}
目标当然是调用 unused_function
。已关闭地址空间随机化和堆栈保护。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。