Exploit SEH小结
2018-01-24 00:00
134 查看
学习《Exploit编写系列教程时候》第三篇时候,发现几个问题,我之前一直困惑ROP为什么会有用,因为事发地点的ESP距离覆盖掉的SEH这么远;还有我用了一个在SafeSEH模块中的handler,这也导致Exploit失败。
由此看出SEH这里关键点有两处:
当异常发生时,异常分发器会创建自己的栈桢。它会把SEH handler成员压入新创建的栈桢中,而在SEH结构中有一个域是EstablisherFrame,这个成员指向异常注册记录(next SEH)的地址,并且它也被压入栈总了。当一个异常handler被调用时,它总是在ESP+8的位置。 即第一个pop弹出栈顶4字节,第二个pop继续弹出栈中的4字节,ret把此时的ESP(next SEH的地址)放到EIP中
SafeSEH中,调用了RtIsValidHandler(),函数会查找handler所在模块,然后对比handler和所在模块的SEH表,所以handler的所在模块必须找一个未开启SafeSEH的
有关SEH分发和SafeSEH具体参考可见:
https://bbs.pediy.com/thread-189297.htm
https://www.kanxue.com/chm.htm?id=727&pid=node1000163
由此看出SEH这里关键点有两处:
当异常发生时,异常分发器会创建自己的栈桢。它会把SEH handler成员压入新创建的栈桢中,而在SEH结构中有一个域是EstablisherFrame,这个成员指向异常注册记录(next SEH)的地址,并且它也被压入栈总了。当一个异常handler被调用时,它总是在ESP+8的位置。 即第一个pop弹出栈顶4字节,第二个pop继续弹出栈中的4字节,ret把此时的ESP(next SEH的地址)放到EIP中
SafeSEH中,调用了RtIsValidHandler(),函数会查找handler所在模块,然后对比handler和所在模块的SEH表,所以handler的所在模块必须找一个未开启SafeSEH的
有关SEH分发和SafeSEH具体参考可见:
https://bbs.pediy.com/thread-189297.htm
https://www.kanxue.com/chm.htm?id=727&pid=node1000163
相关文章推荐
- Structed Exception Handler 学习总结(一)
- Structed Exception Handler 学习总结(三)
- Structed Exception Handler 学习总结(五)
- Windows异常世界历险记(二)——Win32用户层下SEH机制之对RtlUnwind的逆向分析
- Windows异常世界历险记(一)——Windows系统用户级结构化异常处理机制(SEH)的基础知识和Unwind展开操作
- 解决VS2015模块对于SAFESEH 映像是不安全的
- SafeSEH Exploit——利用未启用SafeSEH的DLL
- SafeSEH Exploit——从堆中“借道”
- SafeSEH原理及绕过技术浅析
- 让程序在崩溃时体面的退出之SEH
- 让程序在崩溃时体面的退出之SEH+Dump文件
- 让程序在崩溃时体面的退出之终极解决方案(SEH+Dump+Unhandled Exception Filter)
- (转) 让程序在崩溃时体面的退出
- 为什么C++的SEH不提供finally
- error: SEH exception with code 0xc0000005 thrown in the test
- Windows核心编程 第23章 结束处理程序
- Windows核心编程 第2 5章 未处理异常和C ++异常(上)
- Windows PE 第十章 加载配置信息
- Windows核心编程学习笔记-------23章
- Windows核心编程学习笔记-------24章