9.3 KiB
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegramm-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
CBC - Cipher Block Chaining
Im CBC-Modus wird der vorherige verschlüsselte Block als IV verwendet, um mit dem nächsten Block zu XOR:
Um CBC zu entschlüsseln, werden die gegensätzlichen Operationen durchgeführt:
Beachten Sie, dass ein Verschlüsselungs-Schlüssel und ein IV verwendet werden müssen.
Nachrichten-Padding
Da die Verschlüsselung in festen Blockgrößen durchgeführt wird, ist in der Regel ein Padding im letzten Block erforderlich, um seine Länge zu vervollständigen.
In der Regel wird PKCS7 verwendet, das ein Padding generiert, das die Anzahl der benötigten Bytes wiederholt, um den Block zu vervollständigen. Wenn zum Beispiel dem letzten Block 3 Bytes fehlen, wird das Padding \x03\x03\x03
sein.
Schauen wir uns weitere Beispiele mit 2 Blöcken der Länge 8 Bytes an:
Byte #0 | Byte #1 | Byte #2 | Byte #3 | Byte #4 | Byte #5 | Byte #6 | Byte #7 | Byte #0 | Byte #1 | Byte #2 | Byte #3 | Byte #4 | Byte #5 | Byte #6 | Byte #7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | 0x02 | 0x02 |
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 0x03 | 0x03 | 0x03 |
P | A | S | S | W | O | R | D | 1 | 2 | 3 | 0x05 | 0x05 | 0x05 | 0x05 | 0x05 |
P | A | S | S | W | O | R | D | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 | 0x08 |
Beachten Sie, wie im letzten Beispiel der letzte Block voll war, sodass ein weiterer Block nur mit Padding generiert wurde.
Padding Oracle
Wenn eine Anwendung verschlüsselte Daten entschlüsselt, entschlüsselt sie zuerst die Daten; dann entfernt sie das Padding. Während der Bereinigung des Paddings, wenn ein ungültiges Padding ein erkennbares Verhalten auslöst, haben Sie eine Padding-Oracle-Schwachstelle. Das erkennbare Verhalten kann ein Fehler, ein Fehlen von Ergebnissen oder eine langsamere Antwort sein.
Wenn Sie dieses Verhalten erkennen, können Sie die verschlüsselten Daten entschlüsseln und sogar beliebigen Klartext verschlüsseln.
Wie man ausnutzt
Sie könnten https://github.com/AonCyberLabs/PadBuster verwenden, um diese Art von Schwachstelle auszunutzen oder einfach...
sudo apt-get install padbuster
Um zu testen, ob das Cookie einer Website anfällig ist, könnten Sie Folgendes versuchen:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Kodierung 0 bedeutet, dass base64 verwendet wird (aber andere sind verfügbar, überprüfen Sie das Hilfemenü).
Sie könnten auch diese Schwachstelle ausnutzen, um neue Daten zu verschlüsseln. Zum Beispiel, stellen Sie sich vor, der Inhalt des Cookies lautet "user=MyUsername", dann könnten Sie es zu "_user=administrator_" ändern und Privilegien in der Anwendung eskalieren. Sie könnten dies auch mit paduster
tun, indem Sie den Parameter -plaintext** angeben:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
Wenn die Website anfällig ist, wird padbuster
automatisch versuchen, den Zeitpunkt des Padding-Fehlers zu finden. Sie können jedoch auch die Fehlermeldung mit dem -error-Parameter angeben.
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
Die Theorie
Zusammenfassend kann man beginnen, die verschlüsselten Daten zu entschlüsseln, indem man die richtigen Werte errät, die verwendet werden können, um alle verschiedenen Paddings zu erstellen. Dann beginnt der Padding-Oracle-Angriff damit, Bytes vom Ende bis zum Anfang zu entschlüsseln, indem geraten wird, welcher Wert der richtige ist, der ein Padding von 1, 2, 3 usw. erzeugt.
Stellen Sie sich vor, Sie haben einen verschlüsselten Text, der aus 2 Blöcken besteht, die aus den Bytes von E0 bis E15 gebildet werden. Um den letzten Block (E8 bis E15) zu entschlüsseln, durchläuft der gesamte Block die "Blockchiffre-Entschlüsselung" und erzeugt die Zwischenbytes I0 bis I15. Schließlich wird jedes Zwischenbyte mit den vorherigen verschlüsselten Bytes (E0 bis E7) XOR-verknüpft. Also:
C15 = D(E15) ^ E7 = I15 ^ E7
C14 = I14 ^ E6
C13 = I13 ^ E5
C12 = I12 ^ E4
- ...
Nun ist es möglich, E7
zu ändern, bis C15
0x01
ist, was auch ein korrektes Padding ist. In diesem Fall gilt also: \x01 = I15 ^ E'7
Daher lässt sich I15
berechnen, indem man E'7
findet: I15 = 0x01 ^ E'7
Damit können wir C15
berechnen: C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7
Nachdem wir C15
kennen, ist es nun möglich, C14
zu berechnen, aber diesmal wird das Padding \x02\x02
per Brute-Force ermittelt.
Dieser Brute-Force ist genauso komplex wie der vorherige, da es möglich ist, das E''15
zu berechnen, dessen Wert 0x02 ist: E''7 = \x02 ^ I15
, also muss nur das E'14
gefunden werden, das ein C14
gleich 0x02
erzeugt. Dann werden die gleichen Schritte durchgeführt, um C14 zu entschlüsseln: C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6
Folgen Sie dieser Kette, bis Sie den gesamten verschlüsselten Text entschlüsselt haben.
Erkennung der Schwachstelle
Registrieren Sie ein Konto und melden Sie sich mit diesem Konto an.
Wenn Sie sich mehrmals anmelden und jedes Mal das gleiche Cookie erhalten, gibt es wahrscheinlich etwas falsch in der Anwendung. Das zurückgesendete Cookie sollte jedes Mal, wenn Sie sich anmelden, eindeutig sein. Wenn das Cookie immer das gleiche ist, wird es wahrscheinlich immer gültig sein und es gibt keine Möglichkeit, es ungültig zu machen.
Wenn Sie nun versuchen, das Cookie zu ändern, erhalten Sie einen Fehler von der Anwendung.
Aber wenn Sie das Padding per Brute-Force (z.B. mit PadBuster) erzwingen, können Sie ein anderes Cookie erhalten, das für einen anderen Benutzer gültig ist. Dieses Szenario ist höchstwahrscheinlich anfällig für PadBuster.
Referenzen
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.