Relro

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

Relro

RELRO代表Relocation Read-Only,是二进制文件中使用的安全功能,用于减轻与GOT(Global Offset Table)覆写相关的风险。让我们将这个概念分解为两种不同类型以便更清晰地理解:Partial RELRO和Full RELRO

Partial RELRO

Partial RELRO采用了一种更简单的方法来增强安全性,而不会显著影响二进制文件的性能。通过将GOT放置在程序变量的内存之上,Partial RELRO旨在防止缓冲区溢出达到并破坏GOT

不能防止GOT被滥用来自任意写入漏洞。

Full RELRO

Full RELRO通过使GOT和.fini_array部分完全只读来加强保护。一旦二进制文件启动,所有函数地址都会被解析并加载到GOT中,然后,GOT被标记为只读,有效地防止在运行时对其进行任何修改。

然而,Full RELRO的折衷之处在于性能和启动时间。因为它需要在标记GOT为只读之前在启动时解析所有动态符号,启用Full RELRO的二进制文件可能会经历更长的加载时间。这种额外的启动开销是为什么并非所有二进制文件默认启用Full RELRO的原因。

可以通过以下方式查看二进制文件中是否启用了Full RELRO:

readelf -l /proc/ID_PROC/exe | grep BIND_NOW

绕过

如果启用了Full RELRO,唯一的绕过方法是找到另一种不需要写入GOT表就能获得任意执行的方式。

请注意LIBC的GOT通常是Partial RELRO,因此可以使用任意写入来修改它。更多信息请参阅Targetting libc GOT entries

最后更新于