Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
poodle-PoC — :poodle: Poodle (Padding Oracle On Downgraded Legacy Encryption) Angriff CVE-2014-3566 :poodle: | Kitploit
Tools/GitHubGitHub/mpgn/poodle-poc
Verschlüsselungs-/EntschlüsselungstoolsSchwachstellenanalyseExploitationWebsicherheitKryptographiePenetrationstestsLernen & Bildung
GitHubmpgn/poodle-poc

poodle-PoC

🐩 Poodle (Padding Oracle On Downgraded Legacy Encryption) Angriff CVE-2014-3566 🐩

Repository anzeigen
2657214vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Poodle PoC 🐩 🐩 🐩

Ein Proof of Concept des Poodle-Angriffs (Padding Oracle On Downgraded Legacy Encryption) :

ein Man-in-the-Middle-Exploit, der das Zurückfallen von Internet- und Sicherheitssoftware-Clients auf SSL 3.0 ausnutzt

Der Poodle-Angriff ermöglicht es Ihnen, verschlüsselte Daten abzurufen, die ein Client an einen Server sendet, wenn die verwendete Transport Layer Security SSLv3 ist. Er ermöglicht es Ihnen nicht, den privaten Schlüssel abzurufen, der zum Verschlüsseln der Anfrage verwendet wurde.

imgonline-com-ua-twotoone-luefsrwi2n8iqy

1. 🐩 Konzept des Angriffs 🐩

SSLv3 und CBC-Verschlüsselungsmodus

SSLv3 ist ein Protokoll zum Ver- und Entschlüsseln und Sichern Ihrer Daten. In unserem Fall verwendet es die CBC-Verschlüsselungsmodus-Verkettung . Der Klartext wird abhängig vom Verschlüsselungsalgorithmus (AES, DES, 3DES) in Blöcke aufgeteilt, und die Länge ist ein Vielfaches von 8 oder 16. Wenn der Klartext die Länge nicht ausfüllt, wird am Ende ein Padding hinzugefügt, um den fehlenden Raum zu vervollständigen. Ich empfehle Ihnen dringend, diese Bilder der Verschlüsselung und Entschlüsselung zu öffnen, um diese README zu lesen.

Grundsätzlich ist das nur ein einfaches XOR. Sie können sich auch dieses Video ansehen (nicht von mir) https://www.youtube.com/watch?v=0D7OwYp6ZEc.

Eine über HTTPS mit SSLv3 gesendete Anfrage wird mit AES/DES im CBC-Modus verschlüsselt. Die Besonderheit von SSLv3 gegenüber TLS1.x ist das Padding. Bei SSLv3 wird das Padding mit Zufallsbytes gefüllt, außer dem letzten Byte, das der Länge des Paddings entspricht.

Beispiel:

T|E|X|T|0xab|0x10|0x02 wobei 0xab|0x10|0x02 das Padding ist.
T|E|X|T|E|0x5c|0x01 wobei 0x5c|0x01 das Padding ist.

Außerdem kann der letzte Block mit einem vollständigen Padding-Block gefüllt sein, das heißt, der letzte Block kann voller Zufallsbytes sein, außer dem letzten Byte.

T|E|X|T|E|0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 wobei |0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 das Padding ist und nur das 0x07 dem Angreifer bekannt ist. Wenn ein Angreifer also in der Lage ist, den Padding-Block zu beeinflussen, kann er wissen, dass das letzte Byte des letzten Blocks gleich der Länge eines Blocks ist.

Das Padding beeinflussen

Ein Angreifer muss das Opfer dazu bringen können, Anfragen zu senden (z. B. mithilfe von JavaScript durch Ausnutzen einer XSS). Dann kann er den Pfad und die Daten jeder Anfrage kontrollieren:

Beispiel: Hinzufügen eines "A"-Bytes zum Pfad der Anfrage

root@kitploit:~
GET / HTTP/1.1\r\nSECRET COOKIE\r\n\r\n
GET /AAA HTTP/1.1\r\nSECRET COOKIE\r\n\r\nDATA

Mit dieser Technik kann er das Padding beeinflussen.

HMAC

SSLv3 verwendet außerdem HMAC, um die Integrität und Authentifizierung des Klartexts zu prüfen.

Der keyed-hash message authentication code (HMAC) ist ein spezifischer Typ eines Message Authentication Code (MAC), der eine kryptografische Hash-Funktion (daher das 'H') in Kombination mit einem geheimen kryptografischen Schlüssel verwendet

Dadurch kann ein Angreifer die Anfrage nicht abfangen, verändern und dann zurücksenden. Wenn der Server ein Problem feststellt, sendet er einen HMAC-Fehler.

MAC-then-encrypt

Das Protokoll SSLv3 verwendet die folgende Routine: Es empfängt die Daten vom Client, entschlüsselt die Daten und prüft die Integrität mit dem HMAC.

MAC-then-Encrypt: Bietet keinerlei Integrität für den Chiffretext, da wir bis zur Entschlüsselung der Nachricht keine Möglichkeit haben zu wissen, ob sie tatsächlich authentisch oder gefälscht ist. Klartext-Integrität. Wenn das Verschlüsselungsschema malleable ist, könnte es möglich sein, die Nachricht so zu verändern, dass sie gültig erscheint und einen gültigen MAC besitzt. Dies ist natürlich ein theoretischer Punkt, da das MAC-Geheimnis praktisch gesehen Schutz bieten sollte. Auch hier kann der MAC keine Informationen über den Klartext liefern, da dieser verschlüsselt ist.

https://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac

Das bedeutet, dass wir den Chiffretext verändern können, ohne dass der Server es merkt. Das ist großartig, wirklich :)

2. 🔑 Kryptografie 🔑

Zuerst muss der letzte Block vollständig mit Padding gefüllt sein. Wie wir zuvor gesehen haben, nutzt der Angreifer den Pfad der Anfrage und prüft die Länge der Anfrage.

  • Er speichert die Länge des ursprünglichen Chiffretexts.
  • Er fügt ein Byte im Pfad hinzu und prüft die Länge.
    • Wenn sich die Länge nicht ändert, fügt er ein weiteres Byte hinzu usw.
    • Andernfalls: Die Länge der verschlüsselten Anfrage ändert sich; er weiß, dass der letzte Block vollständig mit Padding gefüllt ist.

Da der letzte Block mit Ausnahme des letzten Bytes voller Zufallsbytes ist, kann er diesen letzten Block Cn durch den Block Ci ersetzen, den er entschlüsseln möchte. Die veränderte Anfrage wird an den Server gesendet.

Der Server :

  • entfernt das Padding anhand der Länge des letzten Bytes
  • erhält den HMAC aus der Anfrage = HMAC
  • erhält den Klartext
  • vergleicht hmac(Klartext) und HMAC
    • wenn gleich => gutes Padding
    • sonst => schlechtes Padding

Durch das Ersetzen des letzten Blocks ändert der Angreifer auch das letzte Byte des letzten Blocks (die Länge des Paddings). Es gibt eine Wahrscheinlichkeit von 1/256, dass das letzte Byte im Padding-Block mit dem ursprünglichen übereinstimmt. In diesem Fall gibt es keinen Padding-Fehler, und der Angreifer kann diese XOR-Operation nutzen, um das letzte Byte des Blocks Ci mit der folgenden Operation abzurufen:

Pn = Dk(Cn) ⊕ Cn-1
Pn = Dk(Ci) ⊕ Cn-1
Pn = Dk(Ci) ⊕ Cn-1
xxxxxxx7 = Dk(Ci) ⊕ Cn-1
Dk(Ci) = xxxxxxx7 ⊕ Cn-1
Pi ⊕ Ci-1 = xxxxxxx7 ⊕ Cn-1
Pi = Ci-1 ⊕ xxxxxxx7 ⊕ Cn-1

(xxxxxxx7 oder xxxxxxx15 und x Zufallsbyte)

Das letzte Byte des Blocks kann abgerufen werden: Pi[7] = Ci-1[7] ⊕ xxxxxxx7 ⊕ Cn-1[7] Im Falle eines Padding-Fehlers muss der Angreifer die SSL-Sitzung schließen, um einen weiteren Handshake durchzuführen (neuer AES-Schlüssel), neuen Chiffretext erhalten und dann den letzten Block ersetzen usw. (in der Regel sind +300 Handshakes erforderlich)

Sobald ein Byte abgerufen ist, erhält er alle anderen Bytes des Blocks, indem er ein Byte im Pfad hinzufügt und ein Byte in den Daten entfernt:

Anfrage zum Abrufen der Bytes E,I,K,O
GET /a SECRET_COOKIE dataazerty PADDING_7
GET /aa SECRET_COOKIE dataazert PADDING_7
GET /aaa SECRET_COOKIE dataazer PADDING_7
GET /aaaa SECRET_COOKIE dataaze PADDING_7

Über TLS1.0

Obwohl die TLS-Spezifikationen von den Servern verlangen, das Padding zu prüfen, validieren einige Implementierungen es nicht ordnungsgemäß, was einige Server selbst dann verwundbar für POODLE macht, wenn sie SSL 3.0 deaktivieren.

TLS ist normalerweise sicher gegen Poodle, aber einige Implementierungen prüfen das Padding nicht; es ist, als würde man SSLv3 verwenden. Deshalb sind einige TLS-Versionen verwundbar.

3. 💥 Den Angriff starten 💥

Es gibt drei Dateien in diesem Repository:

  • poodle-poc.py -> Ein Proof of Concept, das keinerlei Voraussetzungen benötigt
  • parallelization-poodle.py -> Ein weiteres Proof of Concept, jedoch unter Verwendung von Parallelisierung (wirklich schnell)
  • poodle-exploit.py -> Ein Exploit für reale Szenarien
1. Die Datei poodle-poc.py

Dieses PoC untersucht die Kryptografie hinter dem Angriff. Diese Datei ermöglicht es uns, einfach zu verstehen, wie der Angriff funktioniert.

root@kitploit:~
python3 poodle-poc.py
2. Die Datei poodle-poc.py

Die Datei parallelization-poodle.py ist ein Projekt und eine Idee :) Schauen Sie unter https://github.com/mpgn/poodle-PoC/issues/1 nach.

root@kitploit:~
python3 parallelization-poodle.py

asciicast

3. Die Datei poodle-exploit.py

Dies ist der eigentliche Exploit. Wirklich nützlich, wenn Sie während eines Pentests für einen Kunden, der alte Server und Browser verwendet, einen Proof of Concept für den Poodle-Angriff erstellen möchten. Geben Sie einfach die IP Ihres bösartigen Proxys mit dem richtigen Port in die Browser-Konfiguration ein; der Proxy erledigt den Rest.

Voraussetzungen:

  • Stellen Sie sicher, dass Client und Browser ausschließlich mit dem Protokoll SSLv3 kommunizieren können; erzwingen Sie beispielsweise nur SSLv3 in Firefox mit security.tls.version.min: 0. Alternativ können Sie, wenn der Client auch TLS verwendet, das Downgrade erzwingen.
  • Stellen Sie sicher, dass der Server verwundbar ist; verwenden Sie das Tool testssl.sh image
  • Stellen Sie sicher, dass Sie JavaScript auf der Client-Seite injizieren können (XSS)
  • Stellen Sie sicher, dass Sie die Verbindung zwischen Client und Server abfangen können

💀 Wenn Sie diese Voraussetzungen erfüllen, können Sie den Angriff starten 💀:

Für diesen Exploit stehen zwei Optionen zur Verfügung:

  1. Richten Sie die IP-Adresse und den Port des Proxys direkt auf der Client-Seite ein und führen Sie den Exploit aus (gehen Sie zu Teil 3).
  2. Richten Sie einen ARP-Spoofing-Angriff ein, um den gesamten Verkehr zwischen Client und Server auf Ihre Maschine umzuleiten.
  • Aktivieren Sie das Forwarding und setzen Sie eine Iptable-Regel, um den Verkehr vom Client zu Ihrem Proxy umzuleiten
root@kitploit:~
$> echo 1 > /proc/sys/net/ipv4/ip_forward
$> iptables -i vmnet1 -t nat -A PREROUTING -p tcp --dport 1337 -j REDIRECT --to-ports 1337
  • Verwenden Sie das Tool arpspoof, ettercap oder bettercap, um einen ARP-Spoofing-Angriff durchzuführen
root@kitploit:~
$> bettercap -iface vmnet1
net.show
set arp.spoof.internal true
arp.spoof on
  1. Führen Sie den Proxy aus
root@kitploit:~
⋊> ~/T/poodle-Poc on master ⨯ python3 poodle-exploit.py -h              13:10:24
usage: poodle-exploit.py [-h] [--start-block START_BLOCK]
                         [--stop-block STOP_BLOCK] [--simpleProxy SIMPLEPROXY]
                         proxy port server rport

Poodle Exploit by @mpgn_x64

positional arguments:
  proxy                 ip of the proxy
  port                  port of the proxy
  server                ip of the remote server
  rport                 port of the remote server

optional arguments:
  -h, --help            show this help message and exit
  --start-block START_BLOCK
                        start the attack at this block
  --stop-block STOP_BLOCK
                        stop the attack at this block
  --simpleProxy SIMPLEPROXY
                        Direct proxy, no ARP spoofing attack

$> python3 poodle-exploit.py 192.168.13.1 4443 192.168.13.133 443 --start-block 46 --stop-block 50

Auswahl eines Blocks: Wenn Sie die Blockoption nicht angeben, werden alle Blöcke entschlüsselt, aber das kann lange dauern. Ich empfehle Ihnen dringend zu 'wissen', wie die Anfrage formatiert sein wird, und das Skript request-splitter.py zu verwenden, um den Block zu kennen, den Sie entschlüsseln möchten (idealerweise den Cookie-Block! :)

Fügen Sie dann den bösartigen JavaScript-Code (poodle.js) mithilfe einer XSS in die verwundbare Website ein. Starten Sie das Python-Skript und geben Sie help, dann search und schließlich active ein. Während dieser Zeit sind nur zwei Interaktionen mit dem JavaScript erforderlich (search- und active-Befehl).

Update 01/04/2018: Die Downgrade-Option wurde dem Exploit hinzugefügt. Wenn der Exploit das TLS-Protokoll erkennt, geben Sie den Befehl downgrade ein, um auf SSLv3.0 zu wechseln.

Wie funktioniert es? Während des Handshakes (nach dem Hello Client) sendet der Exploit ein handshake_failure 15030000020228, dann sollte der Browser erneut einen Hello Client mit SSLv3.0 als Standardprotokoll senden. Getestet mit Chrome Version 15, funktioniert jedoch nicht mit Firefox (ich glaube, er unterstützt keine Protokoll-Neuverhandlung), siehe #4

Komplettes Video der Ausnutzung:

ezgif-3-90a926f34356

Asciinema:

asciicast

Mitwirkende

mpgn

Lizenz

MIT-Lizenz

Referenzen

  • https://en.wikipedia.org/wiki/POODLE
  • https://www.openssl.org/~bodo/ssl-poodle.pdf
Tool herunterladen
VerschlüsselungEntschlüsselung
Ci = Ek(Pi ⊕ Ci-1), and C0 = IVPi = Dk(Ci) ⊕ Ci-1, and C0 = IV