WWW2Exec - GOT/PLT
Reading time: 8 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
GOT: 全局偏移表
全局偏移表 (GOT) 是一种用于动态链接二进制文件的机制,用于管理外部函数的地址。由于这些地址在运行时才会被知道(由于动态链接),GOT 提供了一种方法来在解析后动态更新这些外部符号的地址。
GOT 中的每个条目对应于二进制文件可能调用的外部库中的一个符号。当函数第一次被调用时,其实际地址由动态链接器解析并存储在 GOT 中。对同一函数的后续调用使用存储在 GOT 中的地址,从而避免了再次解析地址的开销。
PLT: 过程链接表
过程链接表 (PLT) 与 GOT 密切合作,作为处理对外部函数调用的跳板。当二进制文件第一次调用外部函数时,控制权会传递给与该函数关联的 PLT 中的一个条目。这个 PLT 条目负责调用动态链接器来解析函数的地址,如果该地址尚未被解析。地址解析后,它会存储在GOT中。
因此, 一旦外部函数或变量的地址被解析,GOT 条目就会被直接使用。PLT 条目用于通过动态链接器促进这些地址的初始解析。
获取执行
检查 GOT
使用以下命令获取 GOT 表的地址:objdump -s -j .got ./exec
观察在 GEF 中加载可执行文件后,您可以看到在GOT中的函数:gef➤ x/20x 0xADDR_GOT
使用 GEF,您可以开始一个调试会话并执行**got
**以查看 GOT 表:
GOT2Exec
在二进制文件中,GOT 包含函数的地址或指向将加载函数地址的PLT部分。这个任意写入的目标是覆盖一个将要被执行的函数的 GOT 条目,例如用**system
函数的PLT**地址。
理想情况下,您将覆盖一个将被调用且参数由您控制的函数的 GOT(这样您就可以控制传递给系统函数的参数)。
如果**system
** 未被二进制文件使用,则系统函数在 PLT 中不会有条目。在这种情况下,您需要首先泄漏 system
函数的地址,然后覆盖 GOT 以指向该地址。
您可以使用**objdump -j .plt -d ./vuln_binary
**查看 PLT 地址。
libc GOT 条目
libc 的 GOT 通常编译为部分 RELRO,使其成为一个不错的目标,假设可以找出其地址(ASLR)。
libc 的常见函数将调用其他内部函数,其 GOT 可以被覆盖以获得代码执行。
在这里找到更多关于此技术的信息。
Free2system
在堆利用 CTF 中,通常可以控制块的内容,甚至在某些时候覆盖 GOT 表。一个简单的技巧是将 free
GOT 地址覆盖为指向 system
,并在一个块中写入 "/bin/sh"
。这样,当这个块被释放时,它将执行 system("/bin/sh")
。
Strlen2system
另一个常见的技术是将**strlen
** GOT 地址覆盖为指向**system
**,因此如果这个函数使用用户输入被调用,可以传递字符串 "/bin/sh"
并获得一个 shell。
此外,如果 puts
使用用户输入,则可以将 strlen
GOT 地址覆盖为指向 system
,并传递字符串 "/bin/sh"
以获得一个 shell,因为**puts
将使用用户输入调用 strlen
**。
One Gadget
从堆滥用 GOT
从堆漏洞获得 RCE 的一种常见方法是滥用 fastbin,以便可以将 GOT 表的一部分添加到 fast bin 中,因此每当分配该块时,就可以覆盖一个函数的指针,通常是 free
。
然后,将 free
指向 system
,并释放一个写入了 /bin/sh\x00
的块将执行一个 shell。
可以在这里找到一个示例。
保护
完全 RELRO 保护旨在通过在二进制文件启动时解析所有函数的地址并在之后使GOT 表只读来防止这种技术:
参考
- https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。