mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['binary-exploitation/common-binary-protections-and-bypasses/
This commit is contained in:
parent
80498063e1
commit
9c1c38de21
1 changed files with 42 additions and 10 deletions
|
@ -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 %}
|
||||||
|
|
Loading…
Reference in a new issue