
Scanner de sécurité WordPress asynchrone avec contournement de WAF via un navigateur sans tête. Énumère les plugins, thèmes, utilisateurs et installations multisites avec empreinte furtive et intégration des vulnérabilités WPScan.
█ █░ ██▓███ ▒██ ██▒ ██▀███ ▄▄▄ ▓██ ██▓
▓█░ █ ░█░▓██░ ██▒ ▒▒ █ █ ▒░▓██ ▒ ██▒▒████▄ ▒██ ██▒
▒█░ █ ░█ ▓██░ ██▓▒ ░░ █ ░▓██ ░▄█ ▒▒██ ▀█▄ ▒██ ██░
░█░ █ ░█ ▒██▄█▓▒ ▒ ░ █ █ ▒ ▒██▀▀█▄ ░██▄▄▄▄██ ░ ▐██▓░
░░██▒██▓ ▒██▒ ░ ░ ▒██▒ ▒██▒░██▓ ▒██▒ ▓█ ▓██▒ ░ ██▒▓░
░ ▓░▒ ▒ ▒▓▒░ ░ ░ ▒▒ ░ ░▓ ░░ ▒▓ ░▒▓░ ▒▒ ▓▒█░ ██▒▒▒
▒ ░ ░ ░▒ ░ ░░ ░▒ ░ ░▒ ░ ▒░ ▒ ▒▒ ░▓██ ░▒░
░ ░ ░░ ░ ░ ░░ ░ ░ ▒ ▒ ▒ ░░
░ ░ ░ ░ ░ ░░ ░
░ ░
WPX — Scanner X-Ray pour WordPress | Contournement WAF
WPX (WordPress X-Ray) est un scanner de sécurité qui utilise Camoufox pour résoudre les défis Cloudflare et WAF. Il reflète ces sessions afin d'effectuer une découverte rapide et asynchrone des plugins et thèmes, une énumération des utilisateurs et une détection multisite.
Remarque : WPX télécharge les métadonnées de scan nécessaires (empreintes, règles de détection) depuis data.wpscan.org.
asyncio et curl_cffi pour une énumération rapide.wpscan.Le moyen le plus simple d'exécuter WPX — sans Python ni dépendances.
docker run ghcr.io/greg-randall/wpx -u https://example.com
docker run -v $(pwd):/output ghcr.io/greg-randall/wpx -u https://example.com -o /output/results.txt
Sans volume, WPX télécharge à nouveau les métadonnées à chaque exécution. Montez un volume nommé pour éviter cela :
docker run -v wpx-data:/app/.wpx_data ghcr.io/greg-randall/wpx -u https://example.com
Actualisez manuellement les métadonnées si nécessaire :
docker run -v wpx-data:/app/.wpx_data ghcr.io/greg-randall/wpx --update
git clone https://github.com/greg-randall/wpx.git
cd wpx
pip install .
python3 -m camoufox fetch
python3 wpx.py -u https://example.com
python3 wpx.py -u https://example.com --api-key VOTRE_CLE_API
Scannez un nombre spécifique de plugins les mieux classés (par exemple, les 500 premiers) :
python3 wpx.py -u https://example.com --plugins-limit 500
Scannez tous les plugins jamais créés. WPX peut parcourir l'ensemble de la bibliothèque historique d'environ 110 000 plugins (dont environ 55 000 actuellement actifs) pour trouver chaque trace de logiciel sur la cible. Attention : Cela effectue un nombre massif de requêtes et peut prendre plusieurs heures selon le nombre de threads et la réactivité de la cible.
python3 wpx.py -u https://example.com --full-scan
L'énumération des utilisateurs s'exécute automatiquement. Pour limiter la plage de sondage des ID d'auteurs ou la désactiver complètement :
python3 wpx.py -u https://example.com --users-limit 20
python3 wpx.py -u https://example.com --enum-users-disable
Exécutez un scan silencieusement et enregistrez les résultats dans un fichier sans codes de couleur ANSI :
python3 wpx.py -u https://example.com --quiet --output results.txt
Pour mettre à jour les listes de plugins et les classer par popularité :
python3 data/wpx_fetch_plugins.py --sort-by score
Produit data/plugins_active.txt (par défaut les 5000 premiers) et data/plugins_dead.txt (par défaut les 2500 premiers).
Pour modifier les limites :
python3 data/wpx_fetch_plugins.py --active-limit 10000 --dead-limit 5000
Le répertoire data/ contient les ensembles de données de plugins traités et les outils de maintenance :
data/plugins_active.txt : Slugs de plugins actifs les mieux classés par score de popularité (moyenne géométrique des installations × téléchargements).data/plugins_dead.txt : Slugs de plugins fermés/supprimés les mieux classés par nombre d'installations historiques (provenant des exécutions précédentes du catalogue ou des instantanés d'Archive.org).data/plugins_catalog.json : Métadonnées mises en cache pour les plugins actifs.data/plugins_dead.jsonl : Cache append-only des métadonnées des plugins morts incluant les derniers nombres d'installations connus. Les nouvelles entrées remplacent les anciennes lors du chargement (dernier écrit gagne).data/archive.org-cache/ : Instantanés HTML bruts de la Wayback Machine, utilisés pour récupérer les nombres d'installations historiques des plugins fermés avant la première exécution du catalogue.data/wpx_fetch_plugins.py : Récupérateur qui combine l'API WordPress.org, le dépôt SVN et Archive.org pour construire et enrichir les listes de plugins.wpx.py)data/wpx_fetch_plugins.py)Cet outil est destiné uniquement aux tests de sécurité autorisés. Les développeurs ne sont pas responsables d'une mauvaise utilisation ou de dommages.
| Option | Description |
|---|
-u, --url | URL cible WordPress (obligatoire). |
--api-key | Clé API de la base de données des vulnérabilités WPScan. |
-t, --threads | Threads simultanés pour le scan (par défaut : 20). |
--plugins-limit | Limite le nombre de plugins à scanner (ex. 500, 5000). |
--full-scan | Scanne tous les slugs de plugins disponibles (jusqu'à 50k+). |
--update | Force la mise à jour des fichiers de métadonnées WPScan. |
--no-browser | Ignorer le contournement WAF par Camoufox et se connecter directement. |
--enum-users-disable | Ignorer l'énumération des utilisateurs. |
--users-limit N | Nombre d'ID d'auteurs à sonder via ?author=N (par défaut : 10). |
--stealth [N] | Ajoute des délais aléatoires entre les requêtes. Minimum 1s, plafond 2×N secondes (par défaut lorsque l'option est activée : 1.5 → 1–3s). Limite également les threads à 3. |
--idle-timeout N | Abandonne si aucune réponse du serveur n'est reçue pendant N secondes (par défaut : 60, 0 = désactivé). |
-q, --quiet | Supprime la bannière, l'état et la progression — affiche uniquement les résultats. |
-o, --output FICHIER | Écrit la sortie dans FICHIER (texte brut, sans codes ANSI). |
| Option | Description |
|---|
--sort-by | Comment classer les plugins actifs : score (par défaut), active_installs, downloaded. |
--active-limit N | Nombre de slugs actifs à écrire dans plugins_active.txt (par défaut : 5000, 0 = tous). |
--dead-limit N | Nombre de slugs morts à écrire dans plugins_dead.txt (par défaut : 2500, 0 = tous). |
--force | Tout récupérer à nouveau même si le catalogue existe déjà. |
--fetch-limit N | Arrêter après avoir récupéré N plugins actifs depuis l'API (0 = tous). |
--max-age HEURES | Ignorer la récupération via l'API si le catalogue est plus récent que N heures (par défaut : 24). |