《0day安全》——SEH终极防护:SEHOP

好久没学习了,考试,旅游,比赛,懒惰,工作,哪有时间啊,哎,不忘初心,继续前(xue)行(xi)

这比SafeSEH更严格
但这个在win7和vista默认是关闭,winserver 2008就默认启用

win7和vista可以去下载补丁,或者修改注册表对应的项去

我在我机子找不到那个,自己新建应该也可以

blob.png

SEHOP核心就是检查SEH链的完整性,在程序转入异常处理时会检测SEH链的最后一个异常处理函数是否为系统固定的终极异常处理函数,是就说明SEH链没被破坏,执行当前异常处理函数,否则说明SEH被破坏,可能发生了SEH覆盖攻击,程序将不会执行当前的异常处理函数。

那么作者说还有3条路可走:

  1. 不去攻击SEH,攻击返回地址或者虚函数((⊙v⊙)嗯)

  2. 利用未启用SEHOP的模块

  3. 伪造SEH链

攻击返回地址就看看有你有开启GS,有DEP还要绕一下

虚函数的话还要看具体的程序

下面看看作者的

利用未启用SEHOP的模块

直接编译作者的代码在我的win7下打开就有了

blob.png

我们去跟踪一下吧

好久没看汇编了,有点生疏,看看strcpy的代码

blob.png

根据上次我们SafeSEH的经验,我们先用220个90看看

blob.png

可以看到后面4个字节就可以覆盖处理程序了

同时也可以看到我们那个dll没开启任何seh保护

blob.png

伪造SEH链表

我们伪造SEH链表,看着加简单,但是也是很困难的,首先FFFFFFFF的最后一项标识符不难,还有就是FinalExceptionHandler指向的地址,这个就是重点,开了ASLR那就成功率低了,还有就是SafeSEH

我们就在上次利用没开启SafeSEH的模块的基础上进行实验查看学习

可以看到在最后伪造了这条记录

blob.png

尝试运行一下,确实可以运行成功

blob.png

跟踪一下,确实伪造成功了

blob.png

blob.png

之后就pop两个垃圾指令,不懂怎么的异常处理,栈有点变化

blob.png

,但执行权还是回到了栈上

blob.png
好啦

其实最好还有一个问题增加机器码\x8B\x09,没增加就跳不过下面的跳转,好像就是死循环了

blob.png

打赏作者
喜欢本博客,打赏让博客永久运行,多少你说了算

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注