# Relro
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)! * Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
## Relro **RELRO** oznacza **Relocation Read-Only** i jest funkcją zabezpieczeń stosowaną w plikach binarnych w celu zmniejszenia ryzyka związanego z nadpisywaniem **GOT (Global Offset Table)**. Rozbijmy ten koncept na dwa odrębne typy dla jasności: **Częściowy RELRO** i **Pełny RELRO**. ### **Częściowy RELRO** **Częściowy RELRO** stosuje prostsze podejście do poprawy bezpieczeństwa bez znacznego wpływu na wydajność binariów. Poprzez **umieszczenie GOT powyżej zmiennych programu w pamięci, Częściowy RELRO ma na celu zapobieganie dotarciu i uszkodzeniu GOT przez przepełnienie bufora**. To **nie zapobiega nadużywaniu GOT** z podatności na **dowolne zapisy**. ### **Pełny RELRO** **Pełny RELRO** podnosi ochronę poprzez **całkowite oznaczenie GOT i sekcji .fini\_array jako tylko do odczytu.** Gdy binarny się uruchamia, wszystkie adresy funkcji są rozwiązywane i ładowane do GOT, a następnie GOT jest oznaczane jako tylko do odczytu, skutecznie uniemożliwiając jakiekolwiek modyfikacje podczas działania. Jednakże, w przypadku Pełnego RELRO, pojawia się kompromis pod względem wydajności i czasu uruchamiania. Ponieważ należy rozwiązać wszystkie symbole dynamiczne podczas uruchamiania przed oznaczeniem GOT jako tylko do odczytu, **binaria z włączonym Pełnym RELRO mogą doświadczyć dłuższych czasów ładowania**. Dodatkowe obciążenie podczas uruchamiania to powód, dla którego Pełny RELRO nie jest domyślnie włączony we wszystkich binariach. Można sprawdzić, czy Pełny RELRO jest **włączony** w binariach za pomocą: ```bash readelf -l /proc/ID_PROC/exe | grep BIND_NOW ``` ## Bypass Jeśli pełne RELRO jest włączone, jedynym sposobem na jego ominięcie jest znalezienie innego sposobu, który nie wymaga zapisu do tabeli GOT, aby uzyskać dowolne wykonanie. Należy zauważyć, że **GOT LIBC jest zazwyczaj częściowo zabezpieczone RELRO**, więc może być zmodyfikowane za pomocą dowolnego zapisu. Więcej informacji w [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**