hacktricks/crypto-and-stego/electronic-code-book-ecb.md
2024-04-06 18:30:57 +00:00

7.5 KiB

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

ECB

(ECB) Electronic Code Book - symmetrisches Verschlüsselungsverfahren, bei dem jeder Block des Klartexts durch den Block des Geheimtexts ersetzt wird. Es ist das einfachste Verschlüsselungsverfahren. 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).

Die Verwendung von ECB hat mehrere Sicherheitsimplikationen:

  • Blöcke aus verschlüsselter Nachricht können entfernt werden
  • Blöcke aus verschlüsselter 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. Sie vermuten, 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.

\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

Dies liegt daran, dass der Benutzername und das Passwort dieser Cookies mehrmals den Buchstaben "a" enthalten haben (zum Beispiel). Die unterschiedlichen Blöcke sind Blöcke, die mindestens ein unterschiedliches Zeichen enthalten (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. Dazu 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 imitieren, erstellen Sie einen neuen Benutzer namens aaaaaaaaadmin, erhalten Sie den Cookie und decodieren Sie ihn:

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

Wir können das zuvor erstellte Muster \x23U\xE45K\xCB\x21\xC8 mit dem Benutzernamen sehen, der nur a enthielt.
Dann können Sie den ersten Block von 8B entfernen und Sie erhalten einen gültigen Cookie für den Benutzernamen admin:

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

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, besteht darin:

  • Generieren Sie einen Benutzernamen, der len(<username>) + len(<delimiter>) % len(block) entspricht. Mit einer Blockgröße von 8B können Sie einen Benutzernamen namens username generieren, wobei das Trennzeichen | den Chunk <username><delimiter> erzeugt, der 2 Blöcke von 8Bs erzeugt.
  • Generieren Sie dann ein Passwort, das eine genaue Anzahl von Blöcken enthält, die den Benutzernamen, den wir imitieren möchten, und Leerzeichen enthalten, z. B.: admin

Das Cookie dieses Benutzers besteht aus 3 Blöcken: den ersten 2 Blöcken des Benutzernamens + Trennzeichen und dem dritten Block des Passworts (das den Benutzernamen fälscht): username |admin

Ersetzen Sie dann einfach den ersten Block durch den letzten und Sie werden den Benutzer admin imitieren: admin |username

Referenzen

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: