我正在研究各种缓冲区溢出技术,我遇到了一种非常感兴趣的技术是面向返回的编程(ROP),以及使用称为小工具的一小群指令。
问题是:有一些小工具很受欢迎,并且在许多应用中得到了广泛的应用,例如POP/POP/RET序列。是否有任何研究或证据证明这样一个小工具的出现或它的等价物是足够高的,总是会有一个在大多数双星?我正在寻找一个特定的公共库或流行的编译技术来产生这些序列。
编辑:简而言之,POP/POP/RET和等效项是否总是二进制的?
我在x86上下文中询问,但是如果在其他平台上还有其他的线索,请分享。
发布于 2013-02-28 14:03:15
创建ROP链是一个困难的、创造性的、辛苦而又令人兴奋的过程。一般来说,当我们使用ROP时,我们试图绕过DEP。毕竟,如果我们控制了EIP,并且可以写入和执行堆栈,那么为什么不直接跳到我们的外壳代码呢?
考虑到这一点,重要的是要记住,通常情况下,整个有效载荷并不是作为ROP链编写的。完全用ROP小工具生成反向外壳,当然是可能的,但很可能会测试任何利用漏洞的作者的理智。
ROP链的功能仅仅是使DEP失效。我们使用ROP关闭DEP (向持有堆栈的内存页面添加执行权限),然后跳到传统的外壳代码有效负载。
在Windows上,这通常是进行VirtualProtect()系统调用的一种情况,加载了正确的参数以允许堆栈的执行。已经证明,在大多数情况下,仅kernel32.dll就包含适当的小工具来进行这样的调用。在程序代码中识别潜在有用的小工具的工具可以使这个过程更加容易。有关此过程的详细示例,请参阅此页。
因此,一个特定的序列(如POP POP RET )是否存在,并不完全相关。在连接主要库的任何程序(它们都这样做)中,将有足够多的小工具来构建一个简单的DEP停用ROP链。所有这一切都需要一点横向思考-这就像试图建立一个拼图,当每一块来自不同的盒子。
https://security.stackexchange.com/questions/31694
复制相似问题