Translated ['binary-exploitation/rop-return-oriented-programing/ret2csu.

This commit is contained in:
Translator 2024-09-25 16:50:28 +00:00
parent 290cec7d87
commit 60f241372c

View file

@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
**ret2csu**, bir programın kontrolünü almaya çalışırken, genellikle programın davranışını manipüle etmek için kullandığınız **gadgets**'ları bulamadığınızda kullanılan bir hacking tekniğidir.
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak hareket edebilecek bazı gizli mücevherler bulunmaktadır.
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli mücevherler bulunmaktadır.
### \_\_libc\_csu\_init İçindeki Sihirli Gadgets
@ -40,15 +40,15 @@ ret;
Bu gadget, yığın üzerindeki değerleri bu register'lara alarak onları kontrol etmemizi sağlar.
2. İkinci dizilim, ayarladığımız değerleri kullanarak birkaç şey yapar:
* **Belirli değerleri diğer register'lara taşıma**, bunları fonksiyonlarda parametre olarak kullanmamız için hazır hale getirme.
* **r15 ve rbx'deki değerleri toplayarak** belirlenen bir konuma çağrı yapma, ardından rbx'i 8 ile çarpma.
* **Belirli değerleri diğer register'lara taşıyarak**, bunları fonksiyonlarda parametre olarak kullanmaya hazır hale getirir.
* **r15 ve rbx'deki değerleri toplayarak** ve ardından rbx'i 8 ile çarparak belirlenen bir konuma çağrı yapar.
```armasm
mov rdx, r15;
mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Belki oraya yazmak için herhangi bir adres bilmiyorsunuz ve **bir `ret` talimatına** ihtiyacınız var. İkinci gadget'ın da **bir `ret` ile biteceğini** unutmayın, ancak ona ulaşmak için bazı **koşulları** yerine getirmeniz gerekecek:
3. Belki oraya yazacak herhangi bir adres bilmiyorsunuz ve **bir `ret` talimatına** ihtiyacınız var. İkinci gadget'ın da **bir `ret` ile biteceğini** unutmayın, ancak ona ulaşmak için bazı **koşulları** yerine getirmeniz gerekecek:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -74,7 +74,7 @@ gef➤ search-pattern 0x400560
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
```
* `rbp` ve `rbx` aynı değere sahip olmalıdır, atlamayı önlemek için
* Dikkate almanız gereken bazı atlanan pops vardır
* Dikkate almanız gereken bazı atlanan pops var
## RDI ve RSI
@ -96,8 +96,8 @@ Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi
İşte burada **ret2csu** devreye giriyor:
1. **Kayıtları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın üzerindeki değerleri alıp rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e yerleştirin.
2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'yi kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` içine yerleştirebilirsiniz.
1. **Kayıtları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın üzerindeki değerleri rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop edin.
2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bu adresi `[r15 + rbx*8]` içine yerleştirebilirsiniz.
Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son istismar:
```python
@ -129,7 +129,7 @@ Not edin ki önceki exploit bir **`RCE`** gerçekleştirmek için değil, sadece
### Çağrıyı atlayarak ret'e ulaşma
Aşağıdaki exploit [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) çıkarılmıştır; burada **ret2csu** kullanılıyor ancak çağrıyı kullanmak yerine **karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşarak** çalışmaktadır:
Aşağıdaki exploit [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) çıkarılmıştır; burada **ret2csu** kullanılıyor ancak çağrıyı kullanmak yerine, **karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşarak** işlem yapmaktadır:
```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/