我一直在研究使用堆栈溢出编写 RET 值和 SEH 覆盖漏洞利用的教程。
据我了解,当我覆盖 SEH 值时,RET 值也会被覆盖,而且进行 SEH 漏洞利用要困难得多,因为您还需要抛出异常才能使漏洞利用运行。
如果是这样,如果我总是可以使用 RET 值,那么 SEH 覆盖利用有什么用?SEH 覆盖优于 RET 覆盖的优缺点是什么?
我一直在研究使用堆栈溢出编写 RET 值和 SEH 覆盖漏洞利用的教程。
据我了解,当我覆盖 SEH 值时,RET 值也会被覆盖,而且进行 SEH 漏洞利用要困难得多,因为您还需要抛出异常才能使漏洞利用运行。
如果是这样,如果我总是可以使用 RET 值,那么 SEH 覆盖利用有什么用?SEH 覆盖优于 RET 覆盖的优缺点是什么?
这取决于漏洞是什么以及利用条件是什么。
如果您可以覆盖 RET 并构建一个完整的漏洞利用,那么您是正确的,并且覆盖 SEH 是不必要的。
但情况并非总是如此。在某些情况下,会出现 RET 覆盖保护,例如堆栈金丝雀。
在这种情况下,利用 RET 覆盖将比覆盖 SEH 处理程序并生成异常要困难得多(如果不是不可能的话)。
覆盖 SEH 也是如此,如果 SafeSeh 为 ON 且堆栈金丝雀为 OFF,则使用 RET 覆盖比 SEH 更容易利用。
一般来说,我会说决定使用哪种漏洞利用技术的主要事实取决于现有的缓解措施和漏洞利用的难易程度。
如果所有其他选项都失败,拥有另一个可以使用的攻击向量总是好的。