hacktricks/crypto-and-stego/electronic-code-book-ecb.md

5.8 KiB

{% hint style="success" %} 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)

Sostieni HackTricks
{% endhint %}

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.

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

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

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:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

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:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

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 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

Riferimenti