4.4 Windows下堆溢出.pptx

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
吴少华 电子信息学院;1.堆溢出初探;1. 堆溢出初探;在Windows下,用户要求分配堆时,可以通过一系列函数来完成。可以使用Win32的堆调用API函数,或者C/C++运行期库的函数等。;2 RtlAllcoateHeap的失误;2.1 有堆溢出问题的程序;在mybuf数组很小的时候,程序没有任何问题,我们稍微改变下程序,只是加长mybuf的长度,变为240个A,重新生成RELEASE版的程序,在命令行下运行它。;定位溢出点 for(i=0; i240; i++) { mybuf[i] = 100 + i % 10; };计算溢出点 (0x79-0x64)×10+(0x66-0x64)=21×10+2=212 验证一下,指定mybuf第212开始的四个字节是‘BBBB’,其余全部为‘A’。如果我们的计算正确,那么应该是0x42(B的十六进制)覆盖到溢出点。 for(i=0; i240; i++) { mybuf[i] = A; } mybuf[212] = B; mybuf[213] = B; mybuf[214] = B; mybuf[215] = B; ;堆溢出的shellcode有如下特殊要求: (1)如果溢出的是默认堆,则不能使用网络相关的函数,比如开端口、反连等ShellCode都不能使用; (2)可以想办法在ShellCode中恢复默认堆,然后再使用网络相关ShellCode,但有时恢复堆后仍不能用网络编程的函数; (3)新建一个堆,不用默认堆; (4)干脆就不用网络相关的ShellCode,只用添加用户一类的ShellCode。 编写一个打开DOS窗口的SHELLCODE ;2.4 跳转到ShellCode;溢出后的结构如下图所示;出错时程序就会终止,如果还要执行下一操作 mov [eax+4], ecx ,就等于 mov [AAAA+4],BBBB ,即 mov [0,0了,就是把0入到0地址中,通常也是会出错的。;2.5 覆盖默认异常处理;但是这里的where需要是一个确切的地址值,fs:[0]对于单线程是比较固定的,但对于多线程却是不定的。 fs:[0]地址会变,但系统的默认异常处理函数却不会变!我们就使用它。 默认异常处理 当链表中所有的异常处理函数都无法处理异常时,系统就会使用默认异常处理指针来处理异常情况。 默认异常处理指针通过如下函数来设置: SetUnhandledExceptionFilter(??LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter) 默认异常处理指针通过如下函数来调用: LONG UnhandledExceptionFilter(STRUCT _EXCEPTION_POINTERS *ExceptionInfo); 它负责显示一个错误对话框,来指出出错的原因,这就是我们一般的程序出错时显示错误对话框的原因。;用IDA打开kernel32分析,在Functions中选中‘SetUnhandledExceptionFilter’就会跳到如下图的代码。意思是把异常处理程序地址放入0x77EB63B4中,即Win2000 SP3默认异常的处理指针是0x77EC044c。;注意,这里有个小问题, mov[ecx],eax 后,跟着还有一句 mov [eax+4], ecx ,这样不但把shellcode地址写进默认异常处理地址中,也会把默认异常处理地址写进[shellcode地址+4]的内存单元当中,把Shellcode中的指令破坏了。 要解决这个问题,我们可以用 JMP 6 这样的指令来代替nop,这样就能跳过后面被破坏的字节。 程序中先是208字节覆盖掉‘buf1’的空间和空堆的管理结构; 然后是4字节ShellCode的地址,最后是4字节异常处理地址。如下图。 ;char mybuf[240] = \xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\x06\xeb\x06\xeb\x06 \xeb\x06\xeb\x06\xeb\

文档评论(0)

糖糖 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档