Ret2plt
基本信息
这种技术的目标是从PLT中泄漏函数的地址,以便绕过ASLR。这是因为,例如,如果你泄漏了libc中puts
函数的地址,你就可以计算出libc
的基址,并计算出访问其他函数如**system
**的偏移量。
这可以通过pwntools
的有效载荷来实现,例如(从这里):
注意如何使用 PLT 中 puts
的地址调用,该地址是位于 GOT(全局偏移表)中的 puts
地址。这是因为当 puts
打印 puts
的 GOT 条目时,该条目将包含内存中 puts
的确切地址。
还要注意在利用中使用了 main
的地址,因此当 puts
结束执行时,二进制文件会再次调用 main
而不是退出(因此泄漏的地址将继续有效)。
请注意,为了使此方法有效,二进制文件不能使用 PIE 编译,或者您必须找到一个泄漏以绕过 PIE,以便了解 PLT、GOT 和 main 的地址。否则,您需要首先绕过 PIE。
您可以在此处找到此绕过的完整示例。这是该示例中的最终利用:
其他示例和参考资料
64位,启用ASLR但没有PIE,第一步是填充溢出直到canary的字节0x00,然后调用puts泄漏它。使用canary创建ROP小工具来调用puts以从GOT中泄漏puts的地址,然后调用一个ROP小工具来调用
system('/bin/sh')
。64位,启用ASLR,没有canary,在一个子函数中从main中发生堆栈溢出。ROP小工具调用puts以泄漏GOT中puts的地址,然后调用一个one gadget。
Last updated