我试图理解 ROP 并努力解决以下两个问题:
我经常读到 ROP 绕过 ASLR 和 DEP。虽然我很清楚 ROP 是避免 DEP 的完美方法,但我看不出它是如何绕过 ASLR 的。是因为代码部分不是随机的吗?
我也在阅读很多关于这些 pop/pop/ret 小工具的信息,但我不明白为什么需要它们。任何以 ret 结尾的小工具还不够好吗?
我试图理解 ROP 并努力解决以下两个问题:
我经常读到 ROP 绕过 ASLR 和 DEP。虽然我很清楚 ROP 是避免 DEP 的完美方法,但我看不出它是如何绕过 ASLR 的。是因为代码部分不是随机的吗?
我也在阅读很多关于这些 pop/pop/ret 小工具的信息,但我不明白为什么需要它们。任何以 ret 结尾的小工具还不够好吗?
ROP 只是 DEP 的一个旁路——ASLR 实际上是针对 ROP 的保护。代码部分是随机的,这就是为什么你不能(通常)对 ASLR 使用 ROP - 要使用 ROP 绕过它,你需要一个信息泄漏来披露地址空间是如何更改的。
至于 pop/pop/ret 小工具,它们是在使用 SEH 执行代码的上下文中使用的 - 一种绕过除 DEP 和 ASLR 之外的一些分析/保护方法的方法。
以下是 SEH 上下文中对 POP、POP、RET 的解释:https ://dkalemis.wordpress.com/2010/10/27/the-need-for-a-pop-pop-ret-instruction-sequence/ 。至于 ROP,我所知道的最好的资源是 Corelan 的教程:https ://www.corelan.be/index.php/2010/06/16/exploit-writing-tutorial-part-10-chaining-dep-with- rop-the-rubikstm-cube