Electronic Code Book (ECB)
ECB
(ECB) Electronic Code Book - schema di crittografia simmetrica che sostituisce ogni blocco del testo in chiaro con il blocco di testo crittografato. È lo schema di crittografia più semplice. L'idea principale è dividere il testo in chiaro in blocchi di N bit (dipende dalla dimensione del blocco dei dati di input, algoritmo di crittografia) e quindi crittografare (decrittografare) ogni blocco di testo in chiaro usando l'unico chiave.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fe%2Fe6%2FECB_decryption.svg%2F601px-ECB_decryption.svg.png&width=768&dpr=4&quality=100&sign=29c9bd26&sv=1)
L'utilizzo di ECB ha molteplici implicazioni sulla sicurezza:
I blocchi del messaggio crittografato possono essere rimossi
I blocchi del messaggio crittografato possono essere spostati
Rilevamento della vulnerabilità
Immagina di accedere a un'applicazione diverse volte e di ricevere sempre lo stesso cookie. Questo perché il cookie dell'applicazione è <username>|<password>
.
Successivamente, crei due nuovi utenti, entrambi con la stessa password lunga e quasi lo stesso username.
Scopri che i blocchi di 8B in cui l'informazione di entrambi gli utenti è la stessa sono uguali. Quindi, immagini che ciò potrebbe essere dovuto all'uso di ECB.
Come nell'esempio seguente. Osserva come questi 2 cookie decodificati hanno diverse volte il blocco \x23U\xE45K\xCB\x21\xC8
Questo perché il nome utente e la password di quei cookie contenevano più volte la lettera "a" (ad esempio). I blocchi che sono diversi sono blocchi che contenevano almeno 1 carattere diverso (forse il delimitatore "|" o qualche differenza necessaria nel nome utente).
Ora, l'attaccante deve solo scoprire se il formato è <nome utente><delimitatore><password>
o <password><delimitatore><nome utente>
. Per farlo, può semplicemente generare diversi nomi utente con nomi utente e password simili e lunghi finché non trova il formato e la lunghezza del delimitatore:
Lunghezza nome utente: | Lunghezza password: | Lunghezza nome utente+password: | Lunghezza cookie (dopo decodifica): |
---|---|---|---|
2 | 2 | 4 | 8 |
3 | 3 | 6 | 8 |
3 | 4 | 7 | 8 |
4 | 4 | 8 | 16 |
7 | 7 | 14 | 16 |
Sfruttamento della vulnerabilità
Rimozione di interi blocchi
Conoscendo il formato del cookie (<nome utente>|<password>
), per impersonare il nome utente admin
crea un nuovo utente chiamato aaaaaaaaadmin
e ottieni il cookie e decodificalo:
Possiamo vedere il modello \x23U\xE45K\xCB\x21\xC8
creato in precedenza con il nome utente che conteneva solo a
.
Quindi, puoi rimuovere il primo blocco di 8B e otterrai un cookie valido per il nome utente admin
:
Spostamento dei blocchi
In molti database è la stessa cosa cercare WHERE username='admin';
o WHERE username='admin ';
(Nota gli spazi extra)
Quindi, un altro modo per impersonare l'utente admin
sarebbe:
Generare un username tale che:
len(<username>) + len(<delimitatore) % len(blocco)
. Con una dimensione del blocco di8B
puoi generare un username chiamato:username
, con il delimitatore|
il chunk<username><delimitatore>
genererà 2 blocchi di 8B.Successivamente, generare una password che riempirà un numero esatto di blocchi contenenti lo username che vogliamo impersonare e spazi, come:
admin
Il cookie di questo utente sarà composto da 3 blocchi: i primi 2 sono i blocchi dello username + delimitatore e il terzo della password (che sta fingendo lo username): username |admin
Quindi, basta sostituire il primo blocco con l'ultimo e si impersonerà l'utente admin
: admin |username
Riferimenti
Last updated