利用堆首绕过微软的safeseh保护机制

2013-12-16 14:04:41 30 3802


设计SafeSEH保护机制的目的,为了防止攻击者通过覆盖堆栈上的异常处理函数句柄,从而控制程序执行流程的攻击。
   在突破safeseh的方法有多种,在此简单介绍一下利用堆突破safeseh的方法。
         微软在设计SafeSeh机制时,只会检测Seh Handler在不在栈里面而没检查在不在堆里面,所以我们可以利用这一点对safeseh进行突破。在利用中方法之前,程序中必须有一个栈溢出的机会,像平常一样把Handler的数据覆盖,不过这次是将Handler的数据覆盖成shellcode在堆中的地址。也就是说需要程序在栈中和堆中同时接收我们的shellcode。
   本实验中采取了《0day安全:软件漏洞分析技术(第二版)》中的shellcode进行,需要在DEP关闭的情况下进行。如下图:

  接下来我们需要构造一个带有缓冲区溢出的函数,如下:

    为了让操作系统能顺利调用异常处理函数,我们需要在函数中构造一个异常语句,本次实验中利用“1/0”的方式构造异常。在操作系统遇到异常时,就会去调用异常出理函数。因为我们利用shellcode把异常处理函数的地址覆盖,所以操作系统就会去调用我们的shellcode。这样我们就可以顺利的控制EIP了(这也是所有黑客攻击的最终目的)。
   在vs2010的release模式下编译后,利用OD加载生成的EXE文件,如图:

接下来我们要对生成的EXE文件的wmain函数进行跟踪并在wmain处下断点(在此要求读者先熟悉OD的基本操作),当程序运行到004010B1处时,如图:

这时我们看到已经成功申请到了一个500字节的堆空间,EAX中为堆空间的首地址(也就是我们用来覆盖Seh Handler的地址),随后我们需要跟进存在缓冲区溢出的test函数,待字符串拷贝完后,查看test函数的栈空间。

接下来直接F9,奇迹出现了:

在调试时,需要注意堆的首地址。在不同机子上,申请的堆的首地址不同,所以读者需要将shellcode末尾的出的地址改成申请的堆的首地址。
                                                                (在此,感谢技术大神:宇兄、然哥、范哥的指导)

关于作者

评论30次

要评论?请先  登录  或  注册
  • TOP1
    2013-12-23 00:55

    算了吧 本来我也想吐槽的 但是看到2楼的 管理02 以及lz后面的红字还有后面的灌水以及没有实战的方法 对着书照着实验我就不想说什么了 你认为你的解释他们会明白吗? 我都觉得 没必要上星期写完,本来我还想放一个 rop链构造的文章 想想算了 反正也没人有兴趣到时 管理又来这么一篇文章╮(╯▽╰)╭等有时间就拿出来当笔记吧 呵呵有些东西的价值 也就只有知道的人才知道 最重要的就是正视自己 找到自己的位置 才能不做没必要的牺牲heapspray 感觉都快要淘汰了╮(╯▽╰)╭ 虽然利用方法相对简单 但是还是很有缺陷的win8+IE10 那个poc 就已经没有用 heapspray 了 顺畅的很 感觉这就是未来了 呵呵binval 好像不错的样子 但是好像没什么更新了果然玩这个的都是孤独的 没事的时候就像lz这样放出来科普科普就很不错了 也不是认真的然后管理再推广推广 最后只能微微一笑了 这样也蛮不错的 如果都能轻松开心的话 没必要去分析这样枯燥的东西你说呢?

  • 10楼
    2013-12-17 12:30

    看的不太懂,买本lz说的0day安全:软件漏洞分析技术(第二版看看去

  • 9楼
    2013-12-17 10:01

    支持,xi望多一些xi统底层方面的文章

  • 8楼
    2013-12-17 09:59

    学xi学xi,Good Good Study, Day Day Up~

  • 7楼
    2013-12-17 09:48

    顶一个本帖子回复于android客户端!

  • 6楼
    2013-12-17 03:35

    虽然知识面没有覆盖到这方面(我这样说其实就是在装逼,真心看不懂),还是顶一个

  • 5楼
    2013-12-17 00:51

    我想知道范哥是谁。

  • 4楼
    2013-12-17 00:25

    这个得顶,挖掘牛

  • 3楼
    2013-12-16 22:28

    支持一下,继续学xi

  • 2楼
    2013-12-16 21:38

    不错,支持一个。

  • 1楼
    2013-12-16 14:24

    比较简洁地说明了一种突破SEH保护的方式,xi望楼主再接再励,下次能以真实实例讲解,赞一个!