Des millions de sites web sont propulsés par WordPress et occupent la première place, avec 62 % des parts de marché dans le monde des CMS.
Un récent rapport d‘Acunetix sur la vulnérabilité des applications web montre qu’environ 30 % des sites WordPress sont vulnérables.
Il existe de nombreux scanners de sécurité en ligne pour analyser votre site web. Toutefois, si vous recherchez un logiciel à installer et à analyser à partir de votre serveur, WPScan est votre ami. Il est utile si votre site web se trouve sur un réseau privé ou un intranet où l’Internet n’est pas disponible. Ou si vous souhaitez tester plusieurs sites à plusieurs moments.
WPScan est un logiciel gratuit qui vous aide à identifier les problèmes de sécurité sur votre site WordPress. Il fait plusieurs choses comme :
- Vérifier si le site utilise une version vulnérable de WP
- Vérifier si un thème et un plugin sont à jour ou connus pour être vulnérables
- Vérifier Timthumbs
- Vérifier la sauvegarde de la configuration, les exportations de la base de données
- Attaque par force brute
et bien plus encore…
Il y a plusieurs façons d’utiliser WPScan.
- En l’installant sur des serveurs Linux
- En utilisant Docker
- En utilisant une distribution Linux préinstallée comme Kali Linux, BackBox, Pentoo, BlackArch, etc.
- Version en ligne
Utilisation sur CentOS
Les éléments suivants ont été testés sur CentOS 7.x.
- Connectez-vous à CentOS avec le compte root
- Mettez à jour le dépôt
yum update -y
- Installez les dernières versions de Ruby et leurs dépendances
yum -y install curl gpg gcc gcc-c make patch autoconf automake bison libffi-devel libtool patch readline-devel sqlite-devel zlib-devel openssl-devel && gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && curl -sSL https://get.rvm.io | bash -s stable --ruby
- Installez Ruby Nokogiri
yum -y install rubygem-nokogiri
- Redémarrez le serveur et installez WPScan à l’aide de la commande
gem
gem install wpscan
L’installation prendra quelques secondes, et une fois terminée, vous devriez voir quelque chose comme ceci.
L'installation de la documentation pour ffi, get_process_mem, mini_portile2, nokogiri, concurrent-ruby, i18n, thread_safe, tzinfo, zeitwerk, activesupport, public_suffix, addressable, opt_parse_validator, ruby-progressbar, ethon, typhoeus, yajl-ruby, sys-proctable, cms_scanner, wpscan est terminée après 32 secondes
20 gemmes installées
WPScan est installé et prêt à être utilisé. Exécutez wpscan
et vous devriez voir le résultat ci-dessous.
[root@lab ~]# wpscan
L'une des options suivantes est requise : url, update, help, hh, version
Veuillez utiliser --help/-h pour obtenir la liste des options disponibles.
[root@lab ~]#
Voici le résultat d’un des tests du site.
[root@lab ~]# wpscan --url https://geekflaresg.com
_______________________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __ ®
/ / / | ___/ ___ / __|/ _` | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_|
Scanner de sécurité WordPress par l'équipe WPScan
Version 3.7.6
Sponsorisé par Automattic - https://automattic.com/
@_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________
[URL : https://geekflaresg.com/
[ ] Démarré : Wed Jan 8 21:14:16 2020
Découverte(s) intéressante(s) :
[ ] https://geekflaresg.com/
| Les entrées intéressantes sont les suivantes :
| - Serveur : nginx
| - X-Cache-Enabled : True
| - Host-Header : 5d77dd967d63c3104bced1db0cace49c
| - X-Proxy-Cache : MISS
| Found By : Headers (Passive Detection)
| Confiance de l'utilisateur : 100%
[ ] https://geekflaresg.com/robots.txt
| Entrées intéressantes :
| - /wp-admin/
| - /wp-admin/admin-ajax.php
| Trouvé par : Robots Txt (Détection agressive)
| Confiance : 100%
[ ] https://geekflaresg.com/xmlrpc.php
| Trouvé par : Accès direct (Détection agressive)
| Confiance : 100%
| Références :
| - http://codex.wordpress.org/XML-RPC_Pingback_API
| https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner
| https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos
| https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access
[ ] https://geekflaresg.com/readme.html
| Trouvé par : Accès direct (détection agressive)
| Confiance : 100%
[https://geekflaresg.com/wp-cron.php
| Trouvé par : Accès direct (Détection agressive)
| Confiance : 60%
| Références :
| - https://www.iplocation.net/defend-wordpress-from-ddos
| - https://github.com/wpscanteam/wpscan/issues/1299
[WordPress version 5.3.2 identifiée (la plus récente, publiée le 2019-12-18).
| Trouvé par : Rss Generator (Détection passive)
| - https://geekflaresg.com/feed/, https://wordpress.org/?v=5.3.2
| - https://geekflaresg.com/comments/feed/, https://wordpress.org/?v=5.3.2
[Thème WordPress utilisé : twentyseventeen
| Emplacement : https://geekflaresg.com/wp-content/themes/twentyseventeen/
| Dernière mise à jour : 2019-05-07T00:00:00.000Z
| Readme : https://geekflaresg.com/wp-content/themes/twentyseventeen/README.txt
| La version est obsolète, la dernière version est la 2.2
| URL du style : https://geekflaresg.com/wp-content/themes/twentyseventeen/style.css
| Nom du style : Twenty Seventeen
| URI du style : https://wordpress.org/themes/twentyseventeen/
| Description : Twenty Seventeen donne vie à votre site avec des vidéos d'en-tête et des images vedettes immersives. Avec une fo...
| Auteur : the WordPress team
| URI de l'auteur : https://wordpress.org/
|
| Trouvé par : Urls dans la page d'accueil (détection passive)
| Confirmé par : Urls dans la page 404 (détection passive)
|
| Version : 2.1 (80% de confiance)
| Trouvé par : Style (détection passive)
| - https://geekflaresg.com/wp-content/themes/twentyseventeen/style.css, Correspondance : 'Version : 2.1'
[Enumération de tous les plugins (via des méthodes passives)
[i] Aucun plugin trouvé.
[Enumération des sauvegardes de configuration (via les méthodes passives et agressives)
Vérification des sauvegardes de configuration - Heure : 00:00:01 <===================================================================================================> (21 / 21) 100.00% Heure : 00:00:01
[Aucune sauvegarde de configuration n'a été trouvée.
[Aucun Token API WPVulnDB n'a été donné, en conséquence les données de vulnérabilité n'ont pas été produites.
[Vous pouvez obtenir un jeton API gratuit avec 50 requêtes quotidiennes en vous enregistrant sur https://wpvulndb.com/users/sign_up
[Fini : Wed Jan 8 21:14:28 2020
[Requêtes effectuées : 51
[Requêtes mises en cache : 7
[Données envoyées : 9.52 KB
[Données reçues : 369.97 KB
[Mémoire utilisée : 202.898 MB
[Temps écoulé : 00:00:12
[root@lab ~]#
Note: si vous avez besoin de données de vulnérabilité en sortie, vous devez utiliser leur API.
Si vous souhaitez tester des mesures spécifiques, consultez l’aide en exécutant wpscan avec la syntaxe --help
.
[root@lab ~]# wpscan --hh
_______________________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __ ®
/ / / | ___/ ___ / __|/ _` | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_|
Scanner de sécurité WordPress par l'équipe WPScan
Version 3.7.6
Sponsorisé par Automattic - https://automattic.com/
@_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________
Utilisation : wpscan [options]
--url URL L'URL du blog à analyser
Protocoles autorisés : http, https
Protocole par défaut si aucun n'est fourni : http
Cette option est obligatoire sauf si update ou help ou hh ou version est/sont fourni(e)(s)
-h, --help Afficher l'aide simple et quitter
--hh Affiche l'aide complète et quitte
--version Affiche la version et quitte
--ignore-main-redirect Ignore la redirection principale (s'il y en a une) et analyse l'url cible
-v, --verbose Mode verbeux
--[no-]banner Afficher ou non la bannière
Valeur par défaut : true
--max-scan-duration SECONDS Abandonner l'analyse si elle dépasse la durée fournie en secondes
-o, --output FILE Sortie vers FILE
-f, --format FORMAT Sortie des résultats dans le format fourni
Choix possibles : cli-no-colour, cli-no-color, cli, json
--detection-mode MODE Défaut : mixed
Choix possibles : mixed, passive, aggressive
--scope DOMAINS (sous-)domaines séparés par des virgules à prendre en compte dans le champ d'application.
Les caractères génériques sont autorisés dans la liste des domaines valides, par exemple *.target.tld
Séparateur à utiliser entre les valeurs : ','
--user-agent, --ua VALUE
--headers HEADERS En-têtes supplémentaires à ajouter aux requêtes
Séparateur à utiliser entre les en-têtes : ' ; '
Exemples : 'X-Forwarded-For : 127.0.0.1", "X-Forwarded-For : 127.0.0.1 ; Another : aaa'
--vhost VALUE L'hôte virtuel (en-tête Host) à utiliser dans les requêtes
--random-user-agent, --rua Utilise un user-agent aléatoire pour chaque scan
--user-agents-list FILE-PATH Liste des agents à utiliser avec --random-user-agent
Valeur par défaut : /usr/local/rvm/gems/ruby-2.6.3/gems/cms_scanner-0.8.1/app/user_agents.txt
--http-auth login:password
-t, --max-threads VALUE Le nombre maximum de threads à utiliser
Valeur par défaut : 5
--throttle MilliSeconds Millisecondes à attendre avant d'effectuer une autre requête web. Si cette option est utilisée, le nombre maximum de threads sera fixé à 1.
--request-timeout SECONDS Délai d'attente de la requête en secondes
Valeur par défaut : 60
--connect-timeout SECONDS Délai de connexion en secondes
Valeur par défaut : 30
--disable-tls-checks Désactive la vérification des certificats SSL/TLS, et le passage à TLS1.0 (nécessite cURL 7.66 pour ce dernier)
--proxy protocol://IP:port Les protocoles pris en charge dépendent du <a href="https://geekflare.com/fr/proxy-with-curl-and-wget/">cURL</a> installé
--proxy-auth login:password
--cookie-string COOKIE Chaîne de cookies à utiliser dans les requêtes, format : cookie1=valeur1[ ; cookie2=valeur2]
--cookie-jar FILE-PATH Fichier pour lire et écrire les cookies
Par défaut : /tmp/wpscan/cookie_jar.txt
--cache-ttl TIME_TO_LIVE Durée de vie du cache en secondes
Valeur par défaut : 600
--clear-cache Vider le cache avant l'analyse
--cache-dir PATH Valeur par défaut : /tmp/wpscan/cache
--server SERVER Force le chargement du module serveur fourni
Choix possibles : apache, iis, nginx
--force Ne pas vérifier si la cible est en cours d'exécution WordPress
--[no-]update Mettre à jour ou non la base de données
--api-token TOKEN Le token de l'API WPVulnDB pour afficher les données de vulnérabilité
--wp-content-dir DIR Le répertoire wp-content s'il est personnalisé ou non détecté, tel que "wp-content"
--wp-plugins-dir DIR Le répertoire des plugins s'il est personnalisé ou non détecté, tel que "wp-content/plugins"
--interesting-findings-detection MODE Utilisez le mode fourni pour la détection des résultats intéressants.
Choix possibles : mixte, passif, agressif
--wp-version-all Vérifier tous les emplacements de version
--wp-version-detection MODE Utilisez le mode fourni pour la détection de la version de WordPress, au lieu du mode global (--detection-mode).
Choix possibles : mixte, passif, agressif
--main-theme-detection MODE Utilisez le mode fourni pour la détection du thème principal, au lieu du mode global (--detection-mode).
Choix possibles : mixte, passif, agressif
-e, --enumerate [OPTS] Processus d'énumération
Choix possibles :
vp Plugins vulnérables
ap Tous les plugins
p Plugins populaires
vt Thèmes vulnérables
at Tous les thèmes
t Thèmes populaires
tt Timthumbs
cb Sauvegardes de configuration
dbe Exportations de la base de données
u Plage d'ID d'utilisateur. ex : u1-5
Séparateur de plage à utiliser : '-'
Valeur si aucun argument n'est fourni : 1-10
m Plage d'ID de média, par exemple m1-15
Remarque : le paramètre permanent doit être réglé sur "Plain" pour que ces identifiants soient détectés
Séparateur de plage à utiliser : '-'
Valeur si aucun argument n'est fourni : 1-100
Séparateur à utiliser entre les valeurs : ','
Valeur par défaut : Tous les plugins, Config Backups
Valeur si aucun argument n'est fourni : vp,vt,tt,cb,dbe,u,m
Choix incompatibles (un seul de chaque groupe peut être utilisé) :
- vp, ap, p
- vt, at, t
--exclude-content-based REGEXP_OR_STRING Exclure toutes les réponses correspondant à la Regexp (insensible à la casse) pendant certaines parties de l'énumération.
Les en-têtes et le corps du message sont vérifiés. Les délimiteurs de l'expression rationnelle ne sont pas nécessaires.
--plugins-list LIST Liste des plugins à énumérer
Exemples : 'a1', 'a1,a2,a3', '/tmp/a.txt'
--plugins-detection MODE Utilisez le mode fourni pour énumérer les plugins, au lieu du mode global (--detection-mode).
Valeur par défaut : passive
Choix possibles : mixed, passive, aggressive
--plugins-version-all Vérifie tous les emplacements de version des plugins en fonction du mode choisi (--detection-mode, --plugins-detection et --plugins-version-detection)
--plugins-version-detection MODE Utilisez le mode fourni pour vérifier les versions des plugins à la place des modes --detection-mode ou --plugins-detection.
Valeur par défaut : mixed
Choix possibles : mixed, passive, aggressive
--plugins-threshold THRESHOLD Lève une erreur lorsque le nombre de plugins détectés via des emplacements connus atteint le seuil. Mettez 0 pour ignorer le seuil.
Valeur par défaut : 100
--themes-list LIST Liste des thèmes à énumérer
Exemples : 'a1', 'a1,a2,a3', '/tmp/a.txt'
--themes-detection MODE Utilisez le mode fourni pour énumérer les thèmes, au lieu du mode global (--detection-mode).
Choix possibles : mixte, passif, agressif
--themes-version-all Vérifiez tous les emplacements de version des thèmes en fonction du mode choisi (--detection-mode, --themes-detection et --themes-version-detection)
--themes-version-detection MODE Utilisez le mode fourni pour vérifier les versions des thèmes à la place des modes --detection-mode ou --themes-detection.
Choix possibles : mixed, passive, aggressive
--themes-threshold THRESHOLD Lève une erreur lorsque le nombre de thèmes détectés via des emplacements connus atteint le seuil. Mettez la valeur 0 pour ignorer le seuil.
Valeur par défaut : 20
--timthumbs-list FILE-PATH Liste des emplacements de timthumbs à utiliser
Valeur par défaut : /root/.wpscan /root/.wpscan/db/timthumbs-v3.txt
--timthumbs-detection MODE Utilisez le mode fourni pour énumérer les Timthumbs, au lieu du mode global (--detection-mode).
Choix possibles : mixte, passif, agressif
--config-backups-list FILE-PATH Liste des noms de fichiers des sauvegardes de configuration à utiliser
Par défaut : /root/.wpscan/db/config_backups.txt
--config-backups-detection MODE Utilisez le mode fourni pour énumérer les sauvegardes de configuration, au lieu du mode global (--detection-mode).
Choix possibles : mixed, passive, aggressive
--db-exports-list FILE-PATH Liste des chemins d'accès aux exportations de bases de données à utiliser
Par défaut : /root/.wpscan/db/db_exports.txt
--db-exports-detection MODE Utilisez le mode fourni pour énumérer les exportations de la base de données, au lieu du mode global (--detection-mode).
Choix possibles : mixte, passif, agressif
--medias-detection MODE Utilisez le mode fourni pour énumérer les médias, au lieu du mode global (--detection-mode).
Choix possibles : mixed, passive, aggressive
--users-list LIST Liste des utilisateurs à vérifier lors de l'énumération des utilisateurs à partir des messages d'erreur de connexion
Exemples : 'a1', 'a1,a2,a3', '/tmp/a.txt'
--users-detection MODE Utilisez le mode fourni pour énumérer les utilisateurs, au lieu du mode global (--detection-mode).
Choix possibles : mixte, passif, agressif
-P, --passwords FILE-PATH Liste des mots de passe à utiliser lors de l'attaque par mot de passe.
Si l'option --username/s n'est pas fournie, l'énumération des utilisateurs sera exécutée.
-U, --usernames LIST Liste des noms d'utilisateur à utiliser lors de l'attaque par mot de passe.
Exemples : 'a1', 'a1,a2,a3', '/tmp/a.txt'
--multicall-max-passwords MAX_PWD Nombre maximal de mots de passe à envoyer par requête avec l'appel multiple XMLRPC
Valeur par défaut : 500
--password-attack ATTACK Force l'utilisation de l'attaque fournie plutôt que d'en déterminer une automatiquement.
Choix possibles : wp-login, xmlrpc, xmlrpc-multicall
--stealthy Alias pour --random-user-agent --detection-mode passive --plugins-version-detection passive
[root@lab ~]#
Utiliser WPScan sur Kali Linux
L’avantage d’utiliser Kali Linux est que vous n’avez rien à installer. WPScan est pré-installé.
Voyons comment faire fonctionner le scanner.
- Connectez-vous à Kali Linux avec le compte root et ouvrez le terminal
- Lancez l’analyse en utilisant la commande
wpscan
wpscan --url https://mysite.com
Utilisation de Docker
Vous êtes un fan de Docker ?
Pourquoi pas, il est facile de le faire démarrer. Assurez-vous d’avoir installé Docker.
- Tirez l’image Docker de WPScan
docker pull wpscanteam/wpscan
- Une fois l’image tirée, exécutez-la comme ci-dessous.
docker run -it --rm wpscanteam/wpscan --url https://example.com
Facile ?
Scanner en ligne propulsé par WPScan
Vous pouvez utiliser les outils suivants alimentés par WPScan.
Geekflare
GeekflareWordPress Security Scanner vous permet de savoir rapidement si un site WordPress donné a une version de base, un thème, un plugin, etc. vulnérable.
En plus des métriques WPScan, il vérifie également les éléments suivants.
- La console d’administration est-elle exposée ?
- Si elle est considérée comme sûre par Google
- Accessible via HTTPS
- Si les bibliothèques JavaScript frontales sont vulnérables
Vous n’avez pas besoin d’ouvrir un compte ; vous pouvez exécuter le test à la demande GRATUITEMENT.
Outils de test
Un outil de Pentest-Tools vous permet de tester le site WP à la demande et de produire un rapport.
Quelle est la prochaine étape ?
Bien joué ! Si votre site n’est pas vulnérable. En revanche, s’il l’est, travaillez sur les éléments à risque. Si vous ne savez pas comment les atténuer, demandez l‘aide d’un professionnel.