- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C4一1一2 缓冲区溢出漏洞一一堆溢出
* * * * * * * * * * * * * * * * 软件安全 C4 典型软件漏洞机理分析 * 提纲 4.1 缓冲区溢出漏洞 缓冲区与内存分布 栈溢出 堆溢出 格式化串漏洞 4.2 Web应用程序漏洞 Web应用安全概述 SQL注入漏洞 * 4.1.3 堆溢出 上一节介绍了栈溢出的原理及利用方法。但近年来,另一种基于缓冲区溢出的攻击逐渐成为主流。这种新兴的攻击手法的目标从栈转移到了Windows的堆管理器。尽管基于堆的攻击要比栈攻击困难很多,但是相对于栈上的攻击更加难以防范,所以基于堆的攻击仍然持续增长。 程序在内存中的映像 …… 文本(代码)段 数据段 堆栈段 内存低地址 内存高地址 内存递增方向 初始化数据段 非初始化数据段(BSS) 堆(Heap) 栈(stack) 堆的增长方向 栈的增长方向 内核数据代码 00x7FFFFFFF PEBTEB 系统DLL 代码段 * 4.1.3.1 堆的基本知识 堆与栈的区别 栈变量包含函数内部的普通变量、数组等。使用时不需额外的申请操作,由系统维护。 堆是在程序运行时动态分配的内存。 堆需要使用专有的函数进行申请。(如C语言中的malloc函数和C++中的new函数等) 一般用一个堆指针来使用申请得到的内存。 使用完毕后需要将堆指针传给堆释放函数回收这片内存,否则会造成内存泄露。 * 4.1.3.1 堆与栈的区别 * 4.1.3.1 堆的结构 堆块与堆表 堆块:堆区的内存按不同大小组织成块,以堆块为单位进行标识。 一个堆块包括两个部分:块首和块身。 块首是一个堆块头部的几个字节,用来标识这个堆块自身的信息(大小、空闲或占用等)。 块身是紧跟在块首后面的部分,也是最终分配给用户使用的数据区。 * 4.1.3.1 堆的结构 堆块与堆表 堆表:位于堆区的起始位置,用于索引堆区中所有堆块的重要信息(包括位置、大小、空闲与否等)。 堆表的数据结构决定了整个堆区的组织方式,是快速检索空闲块、保证堆分配效率的关键。 堆表可能会采用平衡二叉树等高级数据结构用于优化查找效率(往往不止一种数据结构)。 * 4.1.3.1 堆的结构 堆块 空闲态:堆块被链入空链表中,由系统管理。 占有态:堆块会返回一个由程序员定义的句柄,由程序员管理。 * 4.1.3.1 堆的结构 空闲堆块比占有堆块多出了两个4字节的指针,这两个指针用于链接系统中的其他空闲堆块。 * 4.1.3.1 堆的结构 堆表 在Windows中,占用态的堆块被使用它的程序索引;而堆表只检索所有空闲块的堆块。 最重要的堆表有两种: 空闲双向链表freelist(简称空表) 快速单向链表lookaside(简称快表) * 4.1.3.1 堆的结构 空表 空闲堆块的块首中包含一对重要的指针,这对指针用于将空闲堆块组织成双向链表。 根据大小不同,空表总共被分成128条 * 4.1.3.1 堆的结构 空表 堆表区中有一个128项的数组,称作空表索引(每项包含两个指针,标识一条空表) 空闲堆块的大小=索引项×8(字节) * 4.1.3.1 堆的结构 快表 Windows用来加速堆块分配而采用的一种堆表。 也有128条,组织结构与空表类似,只是其中的堆块按照单链表组织。 由于在堆溢出中一般不利用快表,故不作详述。 * 4.1.3.2 堆溢出的利用 基本原理与DWORD SHOOT 堆管理系统的三类操作 堆块分配(将堆块从空表中“卸下”) 堆块释放(把堆块 “链入”空表) 堆块合并(将若干块先从空表中“卸下”,修改块首信息,把更新后的块“链入”空表) 这三类操作归根到底都是对空表链的修改 * 4.1.3.2 堆溢出的利用 堆溢出利用的精髓 用精心构造的数据去溢出覆盖下一个堆块的块首,使其改写块首中的前向指针(flink)和后向指针(blink),然后在分配、释放、合并等操作发生时伺机获得一次向内存任意地址写入任意数据的机会(Arbitrary Dword Reset,又称Dword Shoot)。通过这个机会,可以控制设计的目标(任意地址),选择适当的目标数据,从而劫持进程,运行shellcode。 * 4.1.3.2 堆溢出的利用 举例:如何通过节点的拆卸产生Dword Shoot 拆卸节点node时发生如下操作: node-blink-flink=node-flink; node-flink-blink=node-blink; 当精心构造的数据淹没前向指针和后向指针时,如果在flink放入4字节的任意恶意数据内容,在blink放入目标地址,当执行以上操作时,导致目标地址的内容被修改为该4字节的恶意数据。 * 4.1.3.2 堆溢出的利用 举例:如何
您可能关注的文档
- BIM一风景园林.ppt
- BI价值.ppt
- big一yes is more 作品解析.ppt
- Bobath治疗方法医学.ppt
- body 身体各个部位.ppt
- Book 4 Module 1一2词汇练习.ppt
- book1一一6课后词汇.doc
- BIM技术在施工企业应用.ppt
- Book6 Unit1 6一1.ppt
- book5一Unit5一一writing.ppt
- 2024-2030年中国偏光片行业经营效益风险及发展前景预测研究报告.docx
- 2024-2030年中国健康产业基地行业运营状况与发展趋势研究报告.docx
- 2024-2030年中国假牙线行业市场发展趋势与前景展望战略分析报告.docx
- 2024-2030年中国休闲包行业消费模式预测与发展策略建议研究报告.docx
- 2024-2030年中国健身服行业市场发展趋势与前景展望战略分析报告.docx
- 2024-2030年中国仓储行业市场发展分析及发展前景与投资策略研究报告.docx
- 2024-2030年中国低温省煤器行业市场现状分析及竞争格局与投资发展研究报告.docx
- 2024-2030年中国停车信息系统行业市场发展趋势与前景展望战略分析报告.docx
- 2024-2030年中国修枝车行业市场发展趋势与前景展望战略研究报告.docx
- 2024-2030年中国信息化IT应用行业必威体育精装版度报告.docx
文档评论(0)