返回信息流fuzz后ollydbg可见ESI可以被覆盖
这里有个问题,用什么地址来覆盖SEH Handler呢?JMP ESI 还是 POP ESI, RET
看到有些文章说SP2以后的XP有SEH 保护,不能用操作SEH handler来控制跳转地址,这个说法靠谱么?
求大牛解答……
这是一条镜像帖。来源:北邮人论坛 / security / #29465同步于 2010/8/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
求问覆盖SEH Handler时跳转的问题
Racso
2010/8/18镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
在xp sp2 和 windows 2003 中,微软引入了S.E.H验证机制
(1)当系统向栈桢中安装 S.E.H 的时候,还会在栈以外的地方记录 S.E.H 副本.
(2)当异常发生后,系统首先检查栈桢中的 S.E.H 与栈外的 S.E.H 副本是否一致.
(3)如果两个 S.E.H 不匹配,则认为当前的 S.E.H 已经不可信,不去调用其所指的异常处理函数.
但是如果程序在编译的时候没有选择使用SafeSEH,那么当异常发生时,系统只会判断异常处理函数的地址是不是在栈中,如果覆盖S.E.H的地址指向的是一个堆区,那么即便是验证失败了,依然会跳过去执行的。所以S.E.H验证机制也是可以绕过的
这应该是通过覆盖SEH Handler和next SEH来进行溢出,SEH Handler的地址应该是:pop xxx pop xxx ret,而next SEH应该是跳转代码,绕过系统对seh的保护是:在SafeSEH为off的可执行模块(dll)中找符合pop,pop,ret的地址~
【 在 Racso 的大作中提到: 】
: fuzz后ollydbg可见ESI可以被覆盖
: 这里有个问题,用什么地址来覆盖SEH Handler呢?JMP ESI 还是 POP ESI, RET
: 看到有些文章说SP2以后的XP有SEH 保护,不能用操作SEH handler来控制跳转地址,这个说法靠谱么?
: ...................
原来是这样?
估计这回真的是要没饭吃了
【 在 tangdi (千里一人) 的大作中提到: 】
: 这应该是通过覆盖SEH Handler和next SEH来进行溢出,SEH Handler的地址应该是:pop xxx pop xxx ret,而next SEH应该是跳转代码,绕过系统对seh的保护是:在SafeSEH为off的可执行模块(dll)中找符合pop,pop,ret的地址~