- 发布于
RELRO
- 作者
- Name
- CuB3y0nd
- GitHub
- @CuB3y0nd
RELRO(Relocation Read-Only,重定位表只读)也是一种保护机制,可以有效防止 GOT 表被覆写。
RELRO 有两种类型,原理都很简单。
0x01 Partial RELRO
Partial RELRO 只是简单的把 GOT 表放到了程序变量的上面,通过调整 GOT 表在内存中的位置来防止低地址向高地址的溢出攻击,这样可以防止通过缓冲区溢出等方式覆写 GOT 表。
但是这种保护并不能防止利用格式化字符串漏洞直接覆写 GOT 表的攻击。
0x02 Full RELRO
Full RELRO 将整个 GOT 表设置为只读。这样的话,即使是格式化字符串漏洞也无法直接修改它。由于它需要一次性解析所有函数地址,这可能会大大增加程序的加载时间,所以它不是一般可执行文件的默认设置。