您的位置:首页 > Web前端

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息