好久没学习了,考试,旅游,比赛,懒惰,工作,哪有时间啊,哎,不忘初心,继续前(xue)行(xi)
这比SafeSEH更严格
但这个在win7和vista默认是关闭,winserver 2008就默认启用
win7和vista可以去下载补丁,或者修改注册表对应的项去
我在我机子找不到那个,自己新建应该也可以
SEHOP核心就是检查SEH链的完整性,在程序转入异常处理时会检测SEH链的最后一个异常处理函数是否为系统固定的终极异常处理函数,是就说明SEH链没被破坏,执行当前异常处理函数,否则说明SEH被破坏,可能发生了SEH覆盖攻击,程序将不会执行当前的异常处理函数。
那么作者说还有3条路可走:
-
不去攻击SEH,攻击返回地址或者虚函数((⊙v⊙)嗯)
-
利用未启用SEHOP的模块
-
伪造SEH链
攻击返回地址就看看有你有开启GS,有DEP还要绕一下
虚函数的话还要看具体的程序
下面看看作者的
利用未启用SEHOP的模块
直接编译作者的代码在我的win7下打开就有了
我们去跟踪一下吧
好久没看汇编了,有点生疏,看看strcpy的代码
根据上次我们SafeSEH的经验,我们先用220个90看看
可以看到后面4个字节就可以覆盖处理程序了
同时也可以看到我们那个dll没开启任何seh保护
伪造SEH链表
我们伪造SEH链表,看着加简单,但是也是很困难的,首先FFFFFFFF的最后一项标识符不难,还有就是FinalExceptionHandler指向的地址,这个就是重点,开了ASLR那就成功率低了,还有就是SafeSEH
我们就在上次利用没开启SafeSEH的模块的基础上进行实验查看学习
可以看到在最后伪造了这条记录
尝试运行一下,确实可以运行成功
跟踪一下,确实伪造成功了
之后就pop两个垃圾指令,不懂怎么的异常处理,栈有点变化
,但执行权还是回到了栈上
好啦
其实最好还有一个问题增加机器码\x8B\x09,没增加就跳不过下面的跳转,好像就是死循环了