Translated ['binary-exploitation/common-binary-protections-and-bypasses/

This commit is contained in:
Translator 2024-08-12 13:17:19 +00:00
parent 80498063e1
commit 9c1c38de21

View file

@ -1,27 +1,59 @@
# Relro # Relro
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Relro ## Relro
**RELRO**代表**重定位只读**,是用于二进制文件的安全特性,用于减轻与**GOT全局偏移表**覆盖相关的风险。让我们将这个概念分解为两种不同类型以便更清晰地理解:**部分RELRO**和**完全RELRO**。 **RELRO** 代表 **Relocation Read-Only**,它是一种用于二进制文件的安全特性,用于减轻与 **GOT (Global Offset Table)** 重写相关的风险。**RELRO** 保护有两种类型1**部分 RELRO** 和2**完全 RELRO**。它们都重新排列了 ELF 文件中的 **GOT****BSS**,但结果和影响不同。具体来说,它们将 **GOT** 部分放在 **BSS** 之前。也就是说,**GOT** 的地址低于 **BSS**,因此通过溢出 **BSS** 中的变量来重写 **GOT** 条目是不可能的(记住,写入内存是从低地址向高地址进行的)
### **部分RELRO** 让我们将这个概念分解为两个不同的类型以便于理解。
**部分RELRO**采用了一种简单的方法来增强安全性,而不会显著影响二进制文件的性能。通过**将GOT放置在程序变量的内存之上部分RELRO旨在防止缓冲区溢出达到并破坏GOT**。 ### **部分 RELRO**
这**并不能防止GOT**被滥用**来自任意写入**漏洞。 **部分 RELRO** 采取了一种更简单的方法来增强安全性,而不会显著影响二进制文件的性能。部分 RELRO 使 **.got 变为只读GOT 部分的非 PLT 部分)**。请注意,部分(如 .got.plt仍然是可写的因此仍然容易受到攻击。这 **并不防止 GOT****任意写入** 漏洞滥用
### **完全RELRO** 注意默认情况下GCC 编译的二进制文件具有部分 RELRO。
**完全RELRO**通过**使GOT和.fini_array**部分完全**只读**来加强保护。一旦二进制文件启动所有函数地址都会被解析并加载到GOT中然后GOT被标记为只读有效地防止在运行时对其进行任何修改。 ### **完全 RELRO**
然而完全RELRO的折衷之处在于性能和启动时间。因为它需要在标记GOT为只读之前在启动时解析所有动态符号**启用完全RELRO的二进制文件可能会经历更长的加载时间**。这种额外的启动开销是为什么完全RELRO不会在所有二进制文件中默认启用的原因。 **完全 RELRO** 通过 **使整个 GOT包括 .got 和 .got.plt和 .fini\_array** 部分完全 **只读** 来增强保护。一旦二进制文件启动,所有函数地址都会在 GOT 中解析并加载然后GOT 被标记为只读,有效地防止在运行时对其进行任何修改
可以通过以下方式查看二进制文件中是否启用了完全RELRO 然而,完全 RELRO 的权衡在于性能和启动时间。因为它需要在启动时解析所有动态符号,然后再将 GOT 标记为只读,**启用完全 RELRO 的二进制文件可能会经历更长的加载时间**。这种额外的启动开销是完全 RELRO 在所有二进制文件中默认未启用的原因。
可以通过以下方式查看二进制文件是否 **启用** 完全 RELRO
```bash ```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW readelf -l /proc/ID_PROC/exe | grep BIND_NOW
``` ```
## 绕过 ## 绕过
如果启用了Full RELRO唯一的绕过方法是找到另一种不需要写入GOT表就能获取任意执行的方式 如果启用了完整的 RELRO绕过它的唯一方法是找到另一种不需要在 GOT 表中写入以获取任意执行的方法
请注意**LIBC的GOT通常是Partial RELRO**,因此可以使用任意写入来修改它。更多信息请参阅[Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**。** 请注意,**LIBC 的 GOT 通常是部分 RELRO**,因此可以通过任意写入进行修改。更多信息请参见 [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}