- 第一部分: Introduction to Exploit Development
- 第二部分:Saved Return Pointer Overflows
- 第三部分:Structured Exception Handler (SEH)
- 第四部分:Egg Hunters
- 第五部分:Unicode 0x00410041
- 第六部分:WIN32 shellcode 编写
- 第七部分:返回导向编程(ROP)
- 第八部分:堆喷射第一节【覆写 EIP】
- 第九部分:堆喷射[第二章:UAF]
- 第十部分:内核利用程序之栈溢出
- 第十一部分:内核利用程序之任意位置任意写
- 第十二部分:内核利用程序之空指针引用
- 第十三部分:内核利用程序之未初始化栈变量
- 第十四部分:内核利用程序之整数溢出
- 第十五部分:内核利用程序之 UAF
- 第十六部分:内核利用程序之池溢出
- 第十七部分:内核利用程序之任意位置任意写
- 第十八篇:内核利用程序之 RS2 Bitmap 巫术
- 第十九篇:内核利用程序之 Razer
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
异常处理介绍
像第一部分说的那样,我不会解释 SEH 全部细节,但我会给你足够的信息了解它. 我非常建议你做更深层次的研究. SEH 是 Windows 系统的一项机制,它使用链表结构记录一系列数据. 当一个异常触发,操作系统会遍历这个链表. 异常处理程序可以评估能否处理这个异常,不能的话就传给链表的下一个处理函数. 处理异常必须满足两个要去:(1) 一个指向当前异常处理函数的指针(SEH) (2) 指向下一个异常处理结构的指针(Nseh). 因为 Windows 堆栈是向下生长的,所以我们看到异常处理结构是颠倒的[nSEH…[SEH]. 当一个异常出现,最近一个 nSEH 的地址会保存在 esp+8 地址处。
你可能会想这和漏洞利用有什么关系. 如果我们能够控制一大块缓冲区并且覆写其中一个异常处理函数,异常发生时候 Windows 会把寄存器清 0, 因此不能直接跳到 Shellcode. 幸运的是这个保护机制有缺陷,我们只需要用 pop pop retn 指令地址覆盖掉 SEH. 记住 esp+8 处保存着 nSEH 的地址, pop pop retn 执行后程序最终会跳到 nSEH 处执行. 我们可以控制 nSEH 这四个字节的空间,通过在这四个字节空间写入指令跳转到 Shellcode.
这听起来有点复杂,实际上 SEH 利用十分简单,下面的例子将会演示 SEH 利用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论