Ret2plt
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
该技术的目标是 从 PLT 中泄露一个函数的地址 以绕过 ASLR。这是因为如果,例如,你泄露了 libc
中 puts
函数的地址,你就可以 计算 libc
的基址 并计算偏移量以访问其他函数,如 system
。
这可以通过 pwntools
负载完成,例如 (来自这里):
注意如何 puts
(使用来自 PLT 的地址)被调用时使用了位于 GOT(全局偏移表)中的 puts
地址。这是因为在 puts
打印 puts
的 GOT 条目时,这个 条目将包含 puts
在内存中的确切地址。
还要注意如何在利用中使用了 main
的地址,以便当 puts
结束其执行时,二进制文件会再次调用 main
而不是退出(因此泄露的地址将继续有效)。
注意,为了使这项工作,二进制文件不能使用 PIE 编译,或者你必须找到一个泄露以绕过 PIE,以便知道 PLT、GOT 和 main 的地址。否则,你需要先绕过 PIE。
你可以在 这里找到这个绕过的完整示例。这是该 示例 的最终利用:
64位,启用ASLR但没有PIE,第一步是填充溢出直到canary的字节0x00,然后调用puts并泄露它。使用canary创建一个ROP gadget来调用puts以泄露GOT中puts的地址,然后调用system('/bin/sh')
的ROP gadget。
64位,启用ASLR,没有canary,主函数中的堆栈溢出来自子函数。ROP gadget调用puts以泄露GOT中puts的地址,然后调用一个gadget。
学习与实践AWS黑客技术:HackTricks培训AWS红队专家(ARTE) 学习与实践GCP黑客技术:HackTricks培训GCP红队专家(GRTE)