Electronic Code Book (ECB)
Last updated
Last updated
Impara e pratica l'hacking su AWS: HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)
(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.
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
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 |
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
:
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 di 8B
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