利用Seh绕过GS保护.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用Seh绕过GS保护

二进制漏洞挖掘系列课程-(2)利用 SEH绕过 GS安全机制 Writenby 東 实验环境:Win7 sp1 x64 实验工具:vs2013 ImmunityDebug mona.py 这个专题需要了解两个概念,一个是异常处理机制(seh),还有一个就是Windows GS保护. SEH: (Structured Exception Hadnling)结构化异常处理 (windows)操作系统提供给程序设计者的强有力的处理程序错误或异常的武器 C语言中通常通过_try catch 来实现 int main() { _try{ //可能出现异常崩溃的代码 } _except(EXCEPTION_EXECUTE_HANDLER) { //异常处理程序 } return 0; } 其实Windows 在原始的程序栈前面添加了一个异常处理结构,该结构由一系列的异常处 理链表组成,这条链表的起始点总是放在TIB (Thread Information Block)的第一个成 员中,在x86 计算机中存储在FS:[0]寄存器中。链表的最后总是默认处理程序,这个默认 处理程序的指针总是0xFFFFFFFF GS保护机制: Windows在VS7.0(Visual Studio 2003)及以后版本的VisualStudio 中默认启动了 一个安全编译选项——GS (针对缓冲区溢出时覆盖函数返回地址这一特征) GS保护机制是在函数即将调用的时候向栈桢压入一个DWORD 的随机值,同时也 向.data 段中存放一个Security Cookies, 1. 被压入栈中的随机值位于EBP之前.在.data段中的数据实现栈 Cookies的校验 2. 在函数返回之前,系统将会执行一个额外的安全验证操作,被称作 SecurityCheck 3. Security当校验发现栈Cookies和 .data的副本不吻合则表明发 生溢出 4. 当检测到栈中发生溢出时,系统接管异常,函数不会被正常返回, ret指令也不会被执行 5. 当栈中发生溢出时,Security Cookie将被首先淹没,之后才是 EBP和返回地址 GS保护机制的实现细节是 1 系统以.data段的第一个DWORD 作为Cookie的种子 2 每次程序运行时的Cookie的种子都不一样,随机性很强 3 栈桢初始化完毕后用EBP异或种子,作为当前函数的Cookie,以此区别不同函数,增强 Cookie的随机性 4 在函数返回前,用EBP异或还原出Cookie种子 绕过GS安全保护的方案 1) 通过覆盖SEH链表来阻止系统接管异常处理. 2) 通过改写C++虚表指针来控制程序流程 3) 用一些未开启GS安全保护的函数进行溢出(可能是关键字保护) ||小于四字节的Buf 今天这个课程我们讲通过覆盖SEH链表来进行exploit 还是上节课的例子,我们开始调试在反汇编窗口查看ShowFileInfo 这次为了演示seh我 把print函数放在了ReadFile下面我们这次看到了在ShowFileInfo中Printf函数下面有 一个Security_Check_Cookie 这就是我们的GS缓冲区检测机制的这个函数,工程项目是 realse版本的,在项目属性只开启GS。关闭 优化选项,dep,aslr,safeseh(vs项目属性选择 配置属性-链接器-命令行填写 “/SAFESEH:NO ”) 我们可以试试如果和上次一样覆盖掉返回地址当执行到Security_Check_Cookie 的时候, 他会检查栈Cookies 和.data 的副本,这时候GS就分发系统异常处理请求然后就由系统接 管处理你这个异常 我们可以先用mona插件查看程序当前seh链表 这个地址指向的就是Pointer to next SEHrecord 下面的SE hander是ntdll中的系统接 管处理。 我们现在的思路就是覆盖掉这个SEH异常处理链表SEH handler 还

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档