hacktricks/cryptography/electronic-code-book-ecb.md

5.8 KiB

{% hint style="success" %} Impara e pratica l'hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'hacking 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 cifrato. È 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 poi cifrare (decifrare) ogni blocco di testo in chiaro usando l'unico chiave.

L'utilizzo di ECB ha molteplici implicazioni sulla sicurezza:

  • I blocchi dal messaggio cifrato possono essere rimossi
  • I blocchi dal messaggio cifrato 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 le informazioni di entrambi gli utenti sono uguali 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" (per 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 fino a trovare 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 precedentemente con lo username che conteneva solo a.
Quindi, puoi rimuovere il primo blocco di 8B e otterrai un cookie valido per lo username 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 falsificando lo username): username |admin

Quindi, basta sostituire il primo blocco con l'ultimo e si impersonerà l'utente admin: admin |username

Riferimenti