diff --git a/binary-exploitation/common-binary-protections-and-bypasses/relro.md b/binary-exploitation/common-binary-protections-and-bypasses/relro.md index ca8b5bd96..0cdff0eb4 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/relro.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/relro.md @@ -1,42 +1,59 @@ # Relro {% hint style="success" %} -AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-HackTricks'i Destekleyin +Support HackTricks -* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* 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.
{% endhint %} ## Relro -**RELRO**, **Relocation Read-Only**'nin kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazma risklerini azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramı açıklığa kavuşturmak için iki farklı türü olan **Partial RELRO** ve **Full RELRO**'yu inceleyelim. +**RELRO**, **Yeniden Yerleştirme Salt Okunur** anlamına gelir ve **GOT (Küresel Ofset Tablosu)** üzerine yazma ile ilişkili riskleri azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. İki tür **RELRO** koruması vardır: (1) **Kısmi RELRO** ve (2) **Tam RELRO**. Her ikisi de **GOT** ve **BSS**'yi ELF dosyalarından yeniden sıralar, ancak farklı sonuçlar ve etkilerle. Özellikle, **GOT** bölümünü **BSS**'den *önce* yerleştirir. Yani, **GOT**, **BSS**'den daha düşük adreslerde bulunur, bu nedenle **BSS**'deki değişkenleri taşırarak **GOT** girişlerini yazmak imkansız hale gelir (belleğe yazma işlemi daha düşük adreslerden daha yüksek adreslere doğru gerçekleşir). -### **Partial RELRO** +Kavramı netlik için iki ayrı türüne ayıralım. -**Partial RELRO**, ikili dosyanın performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. **GOT'yi programın değişkenlerinin bellekte üzerine yerleştirerek, Partial RELRO, tampon taşmalarının GOT'a ulaşmasını ve onu bozmasını engellemeyi amaçlar**. +### **Kısmi RELRO** -Bu, **GOT'un** keyfi yazma **zafiyetlerinden** kötüye kullanılmasını **engellemez**. +**Kısmi RELRO**, güvenliği artırmak için daha basit bir yaklaşım benimser ve ikilinin performansını önemli ölçüde etkilemez. Kısmi RELRO, **.got'u salt okunur hale getirir (GOT bölümünün PLT dışı kısmı)**. Kalan bölümün (örneğin, .got.plt) hala yazılabilir olduğunu ve dolayısıyla saldırılara maruz kalabileceğini unutmayın. Bu, **GOT**'un **rastgele yazma** zafiyetleri tarafından kötüye kullanılmasını engellemez. -### **Full RELRO** +Not: Varsayılan olarak, GCC ikilileri Kısmi RELRO ile derler. -**Full RELRO**, **GOT ve .fini\_array** bölümünü tamamen **salt okunur** hale getirerek korumayı artırır. İkili dosya başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, böylece çalışma zamanında herhangi bir değişikliğe izin verilmez. +### **Tam RELRO** -Ancak, Full RELRO ile performans ve başlatma süresi arasında bir takas yapılır. GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembolleri çözmesi gerektiğinden, **Full RELRO etkinleştirilmiş ikili dosyalar daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç ​​maliyeti nedeniyle Full RELRO varsayılan olarak tüm ikili dosyalarda etkinleştirilmez. +**Tam RELRO**, **tüm GOT'u (hem .got hem de .got.plt) ve .fini\_array** bölümünü tamamen **salt okunur hale getirerek** korumayı artırır. İkili dosya başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, bu da çalışma zamanında herhangi bir değişiklik yapılmasını etkili bir şekilde engeller. -Bir ikili dosyada Full RELRO'nun **etkinleştirilip** etkinleştirilmediğini görmek mümkündür: +Ancak, Tam RELRO ile ilgili bir takas, performans ve başlangıç süresidir. Çünkü GOT'u salt okunur olarak işaretlemeden önce tüm dinamik sembolleri başlangıçta çözmesi gerektiğinden, **Tam RELRO etkin olan ikililer daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç yükü, Tam RELRO'nun tüm ikililerde varsayılan olarak etkin olmamasının nedenidir. + +Tam RELRO'nun bir ikili dosyada **etkin** olup olmadığını görmek mümkündür: ```bash readelf -l /proc/ID_PROC/exe | grep BIND_NOW ``` -## Atlatma +## Bypass -Tam RELRO etkinleştirildiğinde, bunu atlatmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır. +Eğer Full RELRO etkinse, bunu aşmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır. -**LIBC'nin GOT tablosu genellikle Kısmi RELRO olduğundan**, keyfi yazma ile değiştirilebilir. Daha fazla bilgi için [LIBC GOT girişlerini hedefleme](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.** +**LIBC'nin GOT'u genellikle Partial RELRO'dur**, bu nedenle keyfi bir yazma ile değiştirilebilir. Daha fazla bilgi için [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" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.** +* **Hacking ipuçlarını paylaşmak için [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.** + +
+{% endhint %}