hacktricks/binary-exploitation/common-binary-protections-and-bypasses/relro.md

43 lines
3.2 KiB
Markdown
Raw Normal View History

# Relro
{% hint style="success" %}
Leer en oefen AWS Hacken: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Leer en oefen GCP Hacken: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Ondersteun HackTricks</summary>
* Controleer de [**abonnementsplannen**](https://github.com/sponsors/carlospolop)!
* **Sluit aan bij de** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of de [**telegramgroep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacktrucs door PR's in te dienen bij de** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
</details>
{% endhint %}
## Relro
**RELRO** staan vir **Relocation Read-Only**, en dit is 'n sekuriteitskenmerk wat in bineêre lêers gebruik word om die risiko's wat verband hou met **GOT (Global Offset Table)** oorskrywings te verminder. Laat ons die konsep opbreek in sy twee onderskeie tipes vir duidelikheid: **Gedeeltelike RELRO** en **Volledige RELRO**.
### **Gedeeltelike RELRO**
**Gedeeltelike RELRO** neem 'n eenvoudiger benadering om die sekuriteit te verbeter sonder om die bineêre lêer se prestasie aansienlik te beïnvloed. Deur **die GOT bo die program se veranderlikes in die geheue te posisioneer, mik Gedeeltelike RELRO daarop om te voorkom dat buffer-oorvloeiings die GOT bereik en dit beskadig**.&#x20;
Dit **voorkom nie dat die GOT** misbruik **kan word nie** vanaf arbitrêre skryf kwesbaarhede.
### **Volledige RELRO**
**Volledige RELRO** verhoog die beskerming deur **die GOT en .fini\_array** afdeling heeltemal **alleen-lees te maak.** Sodra die bineêre lêer begin, word al die funksie-adresse opgelos en in die GOT gelaai, daarna word die GOT as alleen-lees gemerk, wat enige wysigings daaraan tydens uitvoering voorkom.
Die afweging met Volledige RELRO is egter in terme van prestasie en aanvangstyd. Omdat dit alle dinamiese simbole by aanvang moet oplos voordat die GOT as alleen-lees gemerk word, **kan bineêre lêers met Volledige RELRO wat geaktiveer is, langer laaitye ervaar**. Hierdie addisionele aanvangsoorskot is waarom Volledige RELRO nie standaard in alle bineêre lêers geaktiveer word nie.
Dit is moontlik om te sien of Volledige RELRO **geaktiveer** is in 'n bineêre lêer met:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## Omgang
Indien Volledige RELRO geaktiveer is, is die enigste manier om dit te omseil om 'n ander manier te vind wat nie vereis dat daar geskryf word in die GOT-tabel om willekeurige uitvoering te kry nie.
Let daarop dat **LIBC se GOT is gewoonlik Gedeeltelike RELRO**, dus dit kan verander word met 'n willekeurige skryf. Meer inligting in [Mikpunt libc GOT inskrywings](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**