-
-
[求助]书上的一个小问题
-
发表于:
2014-5-29 15:27
2848
-
昨天被人提起书上的一个问题,我以为懂了,但是却回答不上,
现在请教大家:
0da安全第二版 利用未启用safeseh模块绕过SAFESEH
问题在这里:
书中开始时介绍的SafeSeh 机制说道:
(1)检查异常处理链是否位于当前程序的栈中,如果不在栈中,程序终止异常处理函数的调用
(2)检查hander 是否指向栈中,指向的话,终止
通过后再 调用 RtlIsValidHander() 对异常处理函数的有效性进行验证
那么 后面的实验 利用未启用safeseh模块绕过SAFESEH 都是覆盖了 异常处理链 为\x90\x90\x90\x90了的 虽然它是未启用 SafeSeh 的模块 ,但是已经不满足 (1)了 也就不能执行异常处理函数了,那么为什么还能执行?
利用未启用safeseh模块绕过SAFESEH 是这样介绍的:
发生在未启用 SafeSEH模块中的异常处理函数可以被执行
但是 程序是启用了 SafeSEH 只是 handler 被 未启用 SafeSEH模块的 pop pop ret 然后到 堆栈中运行
我猜测是 作者在介绍 SafeSeh 机制 时没有说清
看来很白痴的问题,只是不知道怎么回答别人 故此问问大家
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!