Electronic Code Book (ECB)
ECB
(ECB) Electronic Code Book - symmetrisches Verschlüsselungsschema, das jeden Block des Klartexts durch den Block des Geheimtexts ersetzt. Es ist das einfachste Verschlüsselungsschema. Die Hauptidee besteht darin, den Klartext in Blöcke von N Bits (abhängig von der Größe des Eingabedatenblocks, des Verschlüsselungsalgorithmus) aufzuteilen und dann jeden Block des Klartexts mit dem einzigen Schlüssel zu verschlüsseln (entschlüsseln).
![](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)
Die Verwendung von ECB hat mehrere Sicherheitsimplikationen:
Blöcke aus der verschlüsselten Nachricht können entfernt werden
Blöcke aus der verschlüsselten Nachricht können verschoben werden
Erkennung der Schwachstelle
Stellen Sie sich vor, Sie melden sich mehrmals bei einer Anwendung an und erhalten immer denselben Cookie. Dies liegt daran, dass der Cookie der Anwendung <Benutzername>|<Passwort>
ist.
Dann generieren Sie zwei neue Benutzer, beide mit dem gleichen langen Passwort und fast dem gleichen Benutzernamen.
Sie stellen fest, dass die Blöcke von 8B, in denen die Informationen beider Benutzer gleich sind, gleich sind. Dann stellen Sie sich vor, dass dies daran liegen könnte, dass ECB verwendet wird.
Wie im folgenden Beispiel. Beachten Sie, wie diese 2 decodierten Cookies mehrmals den Block \x23U\xE45K\xCB\x21\xC8
enthalten.
Das liegt daran, dass der Benutzername und das Passwort dieser Cookies mehrmals den Buchstaben "a" enthielten (zum Beispiel). Die Blöcke, die unterschiedlich sind, sind Blöcke, die mindestens 1 unterschiedliches Zeichen enthielten (vielleicht das Trennzeichen "|" oder einen notwendigen Unterschied im Benutzernamen).
Nun muss der Angreifer nur noch herausfinden, ob das Format <Benutzername><Trennzeichen><Passwort>
oder <Passwort><Trennzeichen><Benutzername>
ist. Um das zu tun, kann er einfach mehrere Benutzernamen mit ähnlichen und langen Benutzernamen und Passwörtern generieren, bis er das Format und die Länge des Trennzeichens findet:
Länge des Benutzernamens: | Länge des Passworts: | Länge von Benutzername+Passwort: | Länge des Cookies (nach dem Decodieren): |
---|---|---|---|
2 | 2 | 4 | 8 |
3 | 3 | 6 | 8 |
3 | 4 | 7 | 8 |
4 | 4 | 8 | 16 |
7 | 7 | 14 | 16 |
Ausnutzung der Schwachstelle
Entfernen ganzer Blöcke
Nachdem das Format des Cookies bekannt ist (<Benutzername>|<Passwort>
), um den Benutzernamen admin
zu übernehmen, erstellen Sie einen neuen Benutzer namens aaaaaaaaadmin
und erhalten Sie den Cookie und decodieren Sie ihn:
Wir können das Muster \x23U\xE45K\xCB\x21\xC8
, das zuvor mit dem Benutzernamen erstellt wurde, der nur a
enthielt, sehen.
Dann können Sie den ersten Block von 8B entfernen und Sie erhalten ein gültiges Cookie für den Benutzernamen admin
:
Verschieben von Blöcken
In vielen Datenbanken ist es gleich, nach WHERE username='admin';
oder nach WHERE username='admin ';
zu suchen (Beachten Sie die zusätzlichen Leerzeichen)
Eine weitere Möglichkeit, den Benutzer admin
zu imitieren, wäre also:
Generieren Sie einen Benutzernamen, der folgendes erfüllt:
len(<Benutzername>) + len(<Trennzeichen) % len(Block)
. Mit einer Blockgröße von8B
können Sie einen Benutzernamen namensBenutzername
generieren, wobei das Trennzeichen|
den Chunk<Benutzername><Trennzeichen>
2 Blöcke von 8Bs generieren wird.Generieren Sie dann ein Passwort, das eine genaue Anzahl von Blöcken ausfüllt, die den Benutzernamen und Leerzeichen enthalten, wie z.B.:
admin
Das Cookie dieses Benutzers wird aus 3 Blöcken bestehen: die ersten 2 Blöcke sind die Blöcke des Benutzernamens + Trennzeichen und der dritte Block ist das Passwort (das den Benutzernamen fälscht): Benutzername |admin
Dann ersetzen Sie einfach den ersten Block durch den letzten und werden den Benutzer admin
imitieren: admin |Benutzername
Referenzen
Last updated