hacktricks/cryptography/padding-oracle-priv.md

122 lines
9.3 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>
2022-05-01 16:32:23 +00:00
# CBC - Cipher Block Chaining
2024-02-10 15:36:32 +00:00
Im CBC-Modus wird der **vorherige verschlüsselte Block als IV** verwendet, um mit dem nächsten Block zu XOR:
2024-02-08 21:36:35 +00:00
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
2024-02-10 15:36:32 +00:00
Um CBC zu entschlüsseln, werden die **gegensätzlichen** **Operationen** durchgeführt:
2024-02-08 21:36:35 +00:00
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
2024-02-10 15:36:32 +00:00
Beachten Sie, dass ein **Verschlüsselungs**-**Schlüssel** und ein **IV** verwendet werden müssen.
2024-02-10 15:36:32 +00:00
# Nachrichten-Padding
2024-02-10 15:36:32 +00:00
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.
2024-02-10 15:36:32 +00:00
Schauen wir uns weitere Beispiele mit **2 Blöcken der Länge 8 Bytes** an:
2024-02-10 15:36:32 +00:00
| 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 |
2021-10-10 22:24:28 +00:00
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| 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** |
2021-09-22 14:27:03 +00:00
2024-02-10 15:36:32 +00:00
Beachten Sie, wie im letzten Beispiel der **letzte Block voll war, sodass ein weiterer Block nur mit Padding generiert wurde**.
2022-05-01 16:32:23 +00:00
# Padding Oracle
2024-02-10 15:36:32 +00:00
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.
2024-02-10 15:36:32 +00:00
Wenn Sie dieses Verhalten erkennen, können Sie die **verschlüsselten Daten entschlüsseln** und sogar **beliebigen Klartext verschlüsseln**.
2024-02-10 15:36:32 +00:00
## Wie man ausnutzt
2024-02-10 15:36:32 +00:00
Sie könnten [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) verwenden, um diese Art von Schwachstelle auszunutzen oder einfach...
2021-10-10 22:24:28 +00:00
```
sudo apt-get install padbuster
```
2024-02-10 15:36:32 +00:00
Um zu testen, ob das Cookie einer Website anfällig ist, könnten Sie Folgendes versuchen:
```bash
2021-10-10 22:24:28 +00:00
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
```
2024-02-10 15:36:32 +00:00
**Kodierung 0** bedeutet, dass **base64** verwendet wird (aber andere sind verfügbar, überprüfen Sie das Hilfemenü).
2024-02-10 15:36:32 +00:00
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:
```bash
2021-10-10 22:24:28 +00:00
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
```
2024-02-10 15:36:32 +00:00
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.
```bash
2021-10-10 22:24:28 +00:00
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
```
2024-02-10 15:36:32 +00:00
## Die Theorie
2024-02-10 15:36:32 +00:00
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.
2022-02-02 15:35:20 +00:00
![](<../.gitbook/assets/image (629) (1) (1).png>)
2024-02-10 15:36:32 +00:00
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:
2021-09-22 14:27:03 +00:00
* `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6`
2021-10-28 10:53:20 +00:00
* `C13 = I13 ^ E5`
* `C12 = I12 ^ E4`
* ...
2024-02-10 15:36:32 +00:00
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`
2024-02-10 15:36:32 +00:00
Daher lässt sich `I15` berechnen, indem man `E'7` findet: `I15 = 0x01 ^ E'7`
2024-02-10 15:36:32 +00:00
Damit können wir `C15` berechnen: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
2024-02-10 15:36:32 +00:00
Nachdem wir `C15` kennen, ist es nun möglich, `C14` zu berechnen, aber diesmal wird das Padding `\x02\x02` per Brute-Force ermittelt.
2024-02-10 15:36:32 +00:00
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`
2024-02-10 15:36:32 +00:00
**Folgen Sie dieser Kette, bis Sie den gesamten verschlüsselten Text entschlüsselt haben.**
2024-02-10 15:36:32 +00:00
## Erkennung der Schwachstelle
2024-02-10 15:36:32 +00:00
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**.
2024-02-10 15:36:32 +00:00
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.
2021-10-10 22:24:28 +00:00
2024-02-10 15:36:32 +00:00
## Referenzen
2021-10-28 10:53:20 +00:00
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
2022-04-28 16:01:33 +00:00
2022-05-01 16:32:23 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder folgen Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>