mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['binary-exploitation/rop-return-oriented-programing/ret2csu.
This commit is contained in:
parent
290cec7d87
commit
60f241372c
1 changed files with 8 additions and 8 deletions
|
@ -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/
|
||||
|
|
Loading…
Reference in a new issue