首页
社区
课程
招聘
[求助]Exploit编写系列教程第6篇中的一个问题!
发表于: 2012-2-21 09:46 4907

[求助]Exploit编写系列教程第6篇中的一个问题!

2012-2-21 09:46
4907
最近重读《Exploit编写系列教程》,有一个问题百思不得其解,望各位高手能给解释一下。
第六篇,“绕过SafeSeh:利用加载模块之外的地址”,这一部分,作者说可以通过在加载模块中查找Call dword ptr[edp+nn]/jmp dword ptr[epb+nn]指令地址,代替pop pop ret指令。并且后边的例子里,也给出了通过将call dword ptr[ebp+30]的地址作为seh hander成功实现漏洞了利用,在例子中,调用Call dword ptr[ebp+30]后,eip正好指向了nseh的位置,请问,有什么理论基础支持这一点么?还是碰巧啊?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
2
30那个是偏移量,不是固定的,总之就是找个reg + offset,让它指向nseh,条件有时得自个创造,但并不是每次都能找到这样一个指令
2012-2-21 10:24
0
雪    币: 106
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
LZ不妨从跟踪一下DispatchException,最终调用到seh handler的过程。

seh handler 函数原型如下
xxx EXCEPTION_ROUTINE (
    __inout struct _EXCEPTION_RECORD *ExceptionRecord,
    __in PVOID EstablisherFrame,
    __inout struct _CONTEXT *ContextRecord,
    __in PVOID DispatcherContext
    );

[ebp+n]实为指向的参数,ebp+30刚好为nseh。所以才需要找jmp/call [ebp+30]的指令
2012-2-21 11:33
0
游客
登录 | 注册 方可回帖
返回
//