hacktricks/src/binary-exploitation/array-indexing.md

19 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Dizi İndeksleme
{{#include ../banners/hacktricks-training.md}}
## Temel Bilgiler
Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli verilerin üzerine yazılmasının mümkün olduğu tüm zayıflıkları içerir. Sömürü mekanizması tamamen zayıflığın koşullarına bağlı olduğundan, belirli bir metodoloji olmadan çok geniş bir kategoridir.
Ancak burada bazı güzel **örnekler** bulabilirsiniz:
- [https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html)
- **Adresler** için bir dizi ve o verilerin **boyutları** için bir dizi olmak üzere **2 çakışan dizi** vardır. Birinden diğerine üzerine yazmak mümkündür, bu da boyut olarak gösterilen keyfi bir adres yazmayı sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından bunu `system` adresi ile üzerine yazmayı ve `/bin/sh` ile bir bellekten free çağırmayı sağlar.
- [https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html)
- 64 bit, nx yok. Her şeyin çift sayı olarak kullanılacağı ve en küçüğünden en büyüğüne sıralanacağı bir tür tampon taşması elde etmek için bir boyutu üzerine yazın, bu nedenle bu gereksinimi karşılayan bir shellcode oluşturmak gerekir, canary'nin yerinden hareket ettirilmemesi gerektiğini dikkate alarak ve sonunda RIP'i ret'e işaret eden bir adresle üzerine yazarak, en büyük adresi yığın başlangıcına işaret eden yeni bir adresle değiştirmek (program tarafından sızdırılan) böylece ret'i oraya atlamak için kullanmak mümkündür.
- [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
- 64 bit, relro yok, canary, nx, pie yok. Yığın üzerindeki bir dizide bir off-by-one vardır, bu da bir işaretçiyi kontrol etmeyi sağlar ve WWW'yi garanti eder (dizinin tüm sayıların toplamını overwritten adresine yazar). Yığın kontrol altındadır, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığında `main` adresi eklenir (tekrar `main`'e döner). Adresi sızdırmak için puts kullanarak GOT'daki adresi sızdırmak için bir ROP zinciri kullanılır (`exit` çağrılacak, bu nedenle yığında bu zinciri çalıştıracaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır.
- [https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html)
- 32 bit, relro yok, canary yok, nx, pie yok. Yığın üzerindeki libc ve heap adreslerini sızdırmak için kötü bir indekslemeyi kötüye kullanın. `system('/bin/sh')` çağırarak bir ret2lib yapmak için tampon taşmasını kötüye kullanın (bir kontrolü aşmak için heap adresine ihtiyaç vardır).