mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.
This commit is contained in:
parent
eb77a2b3de
commit
d3591b92eb
3 changed files with 184 additions and 13 deletions
|
@ -731,6 +731,7 @@
|
||||||
* [Use After Free](binary-exploitation/heap/use-after-free/README.md)
|
* [Use After Free](binary-exploitation/heap/use-after-free/README.md)
|
||||||
* [First Fit](binary-exploitation/heap/use-after-free/first-fit.md)
|
* [First Fit](binary-exploitation/heap/use-after-free/first-fit.md)
|
||||||
* [Double Free](binary-exploitation/heap/double-free.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)
|
* [Unlink Attack](binary-exploitation/heap/unlink-attack.md)
|
||||||
* [Fast Bin Attack](binary-exploitation/heap/fast-bin-attack.md)
|
* [Fast Bin Attack](binary-exploitation/heap/fast-bin-attack.md)
|
||||||
* [Unsorted Bin Attack](binary-exploitation/heap/unsorted-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 Orange](binary-exploitation/heap/house-of-orange.md)
|
||||||
* [House of Rabbit](binary-exploitation/heap/house-of-rabbit.md)
|
* [House of Rabbit](binary-exploitation/heap/house-of-rabbit.md)
|
||||||
* [House of Roman](binary-exploitation/heap/house-of-roman.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)
|
* [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)
|
* [ASLR](binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md)
|
||||||
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -20,7 +20,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
**Globalna tabela offseta (GOT)** je mehanizam koji se koristi u dinamički povezanim binarnim fajlovima za upravljanje **adresama spoljnih funkcija**. Pošto ove **adrese nisu poznate do vremena izvršavanja** (zbog dinamičkog povezivanja), GOT pruža način da se **dinamički ažuriraju adrese ovih spoljnih simbola** nakon što budu rešene.
|
**Globalna tabela offseta (GOT)** je mehanizam koji se koristi u dinamički povezanim binarnim fajlovima za upravljanje **adresama spoljnih funkcija**. Pošto ove **adrese nisu poznate do vremena izvršavanja** (zbog dinamičkog povezivanja), GOT pruža način da se **dinamički ažuriraju adrese ovih spoljnih simbola** nakon što budu rešene.
|
||||||
|
|
||||||
Svaki unos u GOT-u odgovara simbolu u spoljnim bibliotekama koje binarni fajl može pozvati. Kada se **funkcija prvi put pozove, njena stvarna adresa se rešava dinamičkim povezivačem i čuva se u GOT-u**. Naknadni pozivi iste funkcije koriste adresu sačuvanu u GOT-u, čime se izbegava trošak ponovnog rešavanja adrese.
|
Svaki unos u GOT odgovara simbolu u spoljnim bibliotekama koje binarni fajl može pozvati. Kada se **funkcija prvi put pozove, njena stvarna adresa se rešava dinamičkim povezivačem i čuva u GOT-u**. Naknadni pozivi iste funkcije koriste adresu sačuvanu u GOT-u, čime se izbegava trošak ponovnog rešavanja adrese.
|
||||||
|
|
||||||
### **PLT: Tabela vezivanja postupka**
|
### **PLT: Tabela vezivanja postupka**
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ Svaki unos u GOT-u odgovara simbolu u spoljnim bibliotekama koje binarni fajl mo
|
||||||
|
|
||||||
### Provera GOT-a
|
### Provera GOT-a
|
||||||
|
|
||||||
Dobijte adresu tabele GOT sa: **`objdump -s -j .got ./exec`**
|
Dobijte adresu tabele GOT pomoću: **`objdump -s -j .got ./exec`**
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (121).png>)
|
![](<../../.gitbook/assets/image (121).png>)
|
||||||
|
|
||||||
|
@ -40,42 +40,52 @@ Primetite kako nakon **učitavanja** **izvršnog** fajla u GEF-u možete **videt
|
||||||
|
|
||||||
![](<../../.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>)
|
![](<../../.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>)
|
||||||
|
|
||||||
Koristeći GEF možete **zapoceti** sesiju **debugovanja** i izvršiti **`got`** da biste videli got tabelu:
|
Korišćenjem GEF-a možete **zapoceti** **debugging** sesiju i izvršiti **`got`** da biste videli got tabelu:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (496).png>)
|
![](<../../.gitbook/assets/image (496).png>)
|
||||||
|
|
||||||
### GOT2Exec
|
### GOT2Exec
|
||||||
|
|
||||||
U binarnom fajlu GOT ima **adrese funkcija ili** odeljak **PLT** koji će učitati adresu funkcije. Cilj ovog proizvoljnog pisanja je da se **prepiše unos u GOT-u** funkcije koja će biti izvršena kasnije **sa** **adresom** PLT-a **`system`** **funkcije** na primer.
|
U binarnom fajlu GOT ima **adrese funkcija ili** odeljak **PLT-a** koji će učitati adresu funkcije. Cilj ovog proizvoljnog pisanja je da se **prepiše unos u GOT-u** funkcije koja će biti izvršena kasnije **sa** **adresom** PLT-a **funkcije** na primer **`system`**.
|
||||||
|
|
||||||
Idealno, prepišete **GOT** neke **funkcije** koja će biti **pozvana sa parametrima koje kontrolišete** (tako da ćete moći da kontrolišete parametre poslate funkciji sistema).
|
Idealno, prepišete **GOT** neke **funkcije** koja će biti **pozvana sa parametrima koje kontrolišete** (tako da ćete moći da kontrolišete parametre poslate funkciji sistema).
|
||||||
|
|
||||||
Ako **`system`** **nije korišćen** u skripti, funkcija sistema **neće** imati unos u PLT-u. U ovom scenariju, moraćete **prvo procureti adresu** funkcije `system` a zatim prebrisati GOT da pokazuje na ovu adresu.
|
Ako **`system`** **nije korišćen** od strane skripte, funkcija sistema **neće** imati unos u PLT-u. U ovom scenariju, moraćete **prvo procureti adresu** funkcije `system` a zatim prebrisati GOT da pokazuje na ovu adresu.
|
||||||
|
|
||||||
Možete videti adrese PLT-a sa **`objdump -j .plt -d ./vuln_binary`**
|
Možete videti adrese PLT-a sa **`objdump -j .plt -d ./vuln_binary`**
|
||||||
|
|
||||||
## Unosi GOT-a libc-a
|
## Unosi GOT-a libc-a
|
||||||
|
|
||||||
**GOT libc-a** je obično kompajliran sa **delimičnim RELRO-om**, što ga čini dobrom metom za ovo pod uslovom da je moguće saznati njegovu adresu ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
|
**GOT libc-a** obično je kompajliran sa **delimičnim RELRO-om**, što ga čini dobrom metom za ovo pod uslovom da je moguće saznati njegovu adresu ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
|
||||||
|
|
||||||
Uobičajene funkcije libc-a će pozivati **druge interne funkcije** čiji GOT može biti prepisan kako bi se dobilo izvršenje koda.
|
Uobičajene funkcije libc-a će pozvati **druge interne funkcije** čiji GOT može biti prebrisan kako bi se dobilo izvršenje koda.
|
||||||
|
|
||||||
Pronađite [**više informacija o ovoj tehnici ovde**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
Pronađite [**više informacija o ovoj tehnici ovde**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
||||||
|
|
||||||
|
## **Free2system**
|
||||||
|
|
||||||
|
U CTF-ovima za eksploataciju hipa često je moguće kontrolisati sadržaj blokova i u nekom trenutku čak prebrisati GOT tabelu. Jednostavan trik za dobijanje RCE ako nisu dostupni jednogadgeti je prebrisati adresu `free` u GOT-u da pokazuje na `system` i upisati unutar bloka `"/bin/sh"`. Na ovaj način kada se ovaj blok oslobodi, izvršiće se `system("/bin/sh")`.
|
||||||
|
|
||||||
## **Jedan Gadget**
|
## **Jedan Gadget**
|
||||||
|
|
||||||
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
|
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
|
||||||
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## **Zloupotreba GOT-a iz hipa**
|
||||||
|
|
||||||
|
Uobičajeni način dobijanja RCE iz ranjivosti hipa je zloupotreba fastbina kako bi se deo GOT tabele dodao u brzi bin, tako da kada se taj blok alocira, biće moguće **prepisati pokazivač funkcije, obično `free`**.\
|
||||||
|
Zatim, usmeravanje `free` na `system` i oslobađanje bloka u kojem je napisano `/bin/sh\x00` izvršiće shell.
|
||||||
|
|
||||||
|
Moguće je pronaći [**primer ovde**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.**
|
||||||
|
|
||||||
## **Zaštite**
|
## **Zaštite**
|
||||||
|
|
||||||
Zaštita **Full RELRO** je namenjena da zaštiti ovu vrstu tehnike tako što će se rešiti sve adrese funkcija kada se binarni fajl pokrene i napraviti **GOT tabelu samo za čitanje** nakon toga:
|
Zaštita **Full RELRO** je namenjena zaštiti od ovakvih tehnika tako što se rešavaju sve adrese funkcija kada se binarni fajl pokrene i čini **GOT tabelu samo za čitanje** nakon toga:
|
||||||
|
|
||||||
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
||||||
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
* [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)
|
* [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)
|
||||||
|
|
161
binary-exploitation/heap/fast-bin-attack.md
Normal file
161
binary-exploitation/heap/fast-bin-attack.md
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
# Brza Binarna Napad
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Osnovne Informacije
|
||||||
|
|
||||||
|
Zbog toga što je brza binarna lista jednostruko povezana, postoji mnogo manje zaštite nego u drugim binovima i samo **modifikovanje adrese u oslobođenom fast binu** isecka je dovoljno da biste mogli **dodeliti kasnije isečak na bilo kojoj memorijskoj adresi**.
|
||||||
|
|
||||||
|
Kao sažetak:
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```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 %}
|
||||||
|
|
||||||
|
Možete pronaći potpuni primer u veoma dobro objašnjenom kodu na [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");
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
## Primeri
|
||||||
|
|
||||||
|
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
|
||||||
|
* Moguće je alocirati delove, osloboditi ih, pročitati njihov sadržaj i popuniti ih (sa ranjivošću prelivanja).
|
||||||
|
* **Konsolidacija dela radi informacionog curenja**: Tehnika se uglavnom zloupotrebljava prelivanjem kako bi se napravila lažna prev\_size vrednost tako da se jedan prethodni deo stavi unutar većeg dela, pa kada se alocira veći deo koji sadrži drugi deo, moguće je ispisati njegove podatke i procuriti adresu do libc-a (main\_arena+88).
|
||||||
|
* **Prepisivanje malloc kuke**: Za ovo, i zloupotrebljavajući prethodnu situaciju preklapanja, bilo je moguće imati 2 dela koja su pokazivala na istu memoriju. Stoga, oslobađajući ih oboje (oslobađajući još jedan deo između da bi se izbegle zaštite), bilo je moguće imati isti deo u fast binu 2 puta. Zatim, bilo je moguće ponovo ga alocirati, prepisati adresu sledećeg dela da pokazuje malo pre malloc\_hook-a (tako da pokazuje na celobrojnu vrednost koju malloc smatra slobodnom veličinom - još jedan zaobilazak), alocirati ga ponovo, a zatim alocirati još jedan deo koji će primiti adresu do malloc kuka.\
|
||||||
|
Na kraju je **jedan alat** napisan tamo.
|
||||||
|
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
|
||||||
|
* Postoji prelivanje hipa i korisnik nakon oslobađanja i duplo oslobađanje jer kada se deo oslobodi moguće ga je ponovo koristiti i ponovo osloboditi pokazivače.
|
||||||
|
* **Libc informaciono curenje**: Jednostavno oslobodite neke delove i dobićete pokazivač do dela glavne arene. Kako možete ponovo koristiti oslobođene pokazivače, samo pročitajte ovu adresu.
|
||||||
|
* **Napad na brze binove**: Svi pokazivači na alokacije čuvaju se unutar niza, pa možemo osloboditi nekoliko brzih bin delova i u poslednjem prebrisati adresu da pokazuje malo pre ovog niza pokazivača. Zatim, alocirajte nekoliko delova iste veličine i prvo ćemo dobiti legitimni deo, a zatim lažni deo koji sadrži niz pokazivača. Sada možemo prebrisati ove pokazivače alokacije da pokazuju na adresu `free` kako bi pokazivali na sistem, a zatim napisati deo 1 `"/bin/sh"` da bismo zatim `oslobodili(deo1)` što će izvršiti `system("/bin/sh")`.
|
||||||
|
|
||||||
|
Možete pronaći napad na brze binove zloupotrebljen kroz napad na nesortirane binove u primerima iz:
|
||||||
|
|
||||||
|
{% content-ref url="unsorted-bin-attack.md" %}
|
||||||
|
[unsorted-bin-attack.md](unsorted-bin-attack.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili **telegram grupi** ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
Loading…
Reference in a new issue