2015-04-26 34 views
2

我一直在研究使用堆栈溢出编写RET值和SEH覆盖漏洞的教程。堆栈溢出漏洞利用:RET与SEH覆盖

据我所知,当我覆盖SEH值时,RET值也被覆盖,同时SEH漏洞利用也很难,因为你还需要抛出一个异常来使漏洞运行。

如果是这样,如果我始终可以使用RET值,SEH覆盖漏洞的用途是什么? SEH重写覆盖RET的优点和缺点是什么?

+1

我不会认为你总是可以覆盖两者。可能有一个错误只允许覆盖其中的一个。 –

+1

@AndrewMedico我没有说我总是可以覆盖两者,我说过,一旦你成功覆盖SEH,很可能你也会覆盖RET,因为在大多数情况下,它位于堆栈上方。 –

回答

3

这取决于什么是漏洞,利用条件是什么。

如果您可以覆盖RET并构建一个完整的漏洞利用比你正确和覆盖SEH将是不必要的。

但是,情况并非总是如此..在某些情况下,RET覆盖保护将会出现,如堆栈金丝雀。

在这种情况下,使用RET覆盖进行攻击将比覆盖SEH处理程序并生成异常更加困难(如果不是不可能的话)。

关于覆盖SEH,可以这么说,如果SafeSeh处于ON状态并且堆栈金丝雀处于OFF状态,那么使用RET覆盖比使用SEH更容易。

一般来说,我会说确定使用哪种利用技术的主要事实取决于现有的缓解措施和易用性。

它总是有好的另一个攻击矢量,可以使用,如果所有其他选项失败。