当前位置:  开发笔记 > 前端 > 正文

堆溢出攻击

如何解决《堆溢出攻击》经验,为你挑选了1个好方法。

如何进行堆溢出攻击?

在stackoverflow攻击的情况下,攻击者用他的地址替换函数返回地址.

这是如何在堆溢出攻击中完成的?此外,是否可以从堆运行代码?



1> Michael..:

请注意,这因平台而异,我的示例过于简单.它基本上归结为具有可能溢出的链表的堆管理器,并且您可以使用链接列表指针来覆盖进程内存的随机部分.

想象一下,我有一个天真的堆实现,其控制块是这样的:

struct HeapBlockHeader
{
    HeapBlockHeader* next;
    HeapBlockHeader* prev;
    int size;

    // Actual heap buffer follows this structure.
};

当堆被释放时,该控制块通过修改next/prev指针返回到释放块列表.如果我溢出堆缓冲区,我可以使用我控制的数据覆盖下一个控制块中的指针.假设我覆盖这些链接以指向代码的指针(可能只是在我覆盖的缓冲区中)和指向堆栈上函数的返回地址.当堆管理器尝试将块链接回释放列表时,它实际上将使用指向我控制的代码的指针覆盖堆栈上的返回地址.

本文对堆溢出攻击有一个很好的概述:http: //www.h-online.com/security/features/A-Heap-of-Risk-747161.html

本文介绍了Vista的堆管理器为防止此类攻击所采取的一些强化措施:http: //www.blackhat.com/presentations/bh-usa-06/BH-US-06-Marinescu.pdf

编辑:有可能从堆运行代码,是的,这是可能的.现在,许多平台默认使堆内存不可执行,这增加了运行任意代码的障碍.但是,您仍然可以执行"跳转到libc"样式攻击 - 将返回地址覆盖为可执行的已知函数.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有