
WRecon est un outil pour la reconnaissance de vulnérabilités et d'informations en boîte noire pour WordPress.
Un outil de reconnaissance WordPress et de scan de vulnérabilités, puissant et basé sur des templates
Fonctionnalités • Installation • Utilisation • Architecture • Templates
WPRecon est un outil moderne de reconnaissance de sécurité WordPress, construit avec Go, qui aide les ingénieurs sécurité à identifier les vulnérabilités, les mauvaises configurations et les fuites d'informations dans les installations WordPress.
Contrairement aux scanners de vulnérabilités traditionnels avec des vérifications codées en dur, WPRecon utilise une architecture de templates pilotée par YAML, permettant :
Identifier les hits positifs dans les réponses :
Extraire des données exploitables depuis les réponses correspondantes :
150+ templates prêts pour la production couvrant :
# Cloner le dépôt
git clone https://github.com/ffx64/wprecon.git
cd wprecon
# Compiler le binaire
go build -o wprecon ./cmd/wprecon/main.go
# Déplacer dans votre PATH (optionnel)
sudo mv wprecon /usr/local/bin/
go install github.com/ffx64/wprecon/cmd/wprecon@latest
docker build -t wprecon .
docker run wprecon scan https://example.com
Scanner un site WordPress avec tous les templates disponibles :
wprecon scan https://example.com
Exécuter uniquement les templates sélectionnés :
wprecon scan https://example.com -t wordpress-detection,plugin-detection,user-enumeration
# Sortie JSON pour l'automatisation
wprecon scan https://example.com --output json
# Tableau joliment formaté (par défaut)
wprecon scan https://example.com --output table
# Utiliser 20 workers concurrents et 100 requêtes/sec
wprecon scan https://example.com --workers 20 --rate-limit 100
wprecon list-templates
wprecon --help
Lors de l'exécution d'un scan, WPRecon produit des résultats détaillés :
Format tableau :
ID | Template | Nom | Sévérité | Cible | Preuve
---------------------|------------------------|--------------------------|----------|---------------------|---------
finding_001 | wordpress-version | Version WordPress trouvée| info | example.com | 6.2.1
finding_002 | plugin-detection | Plugin détecté | faible | example.com | Yoast SEO 16.0
finding_003 | security-headers | En-têtes de sécurité manquants | moyen | example.com | X-Frame-Options
Format JSON :
{
"scan_id": "scan_uuid_001",
"timestamp": "2026-04-10T14:37:00Z",
"target": "https://example.com",
"total_findings": 15,
"findings": [
{
"id": "finding_uuid_001",
"template_id": "wordpress-detection",
"name": "Installation WordPress détectée",
"description": "Installation du CMS WordPress identifiée sur la cible",
"severity": "info",
"cvss_score": 0.0,
"matched_url": "https://example.com/wp-admin/",
"http_method": "GET",
"status_code": 200,
"response_time_ms": 245,
"evidence": {
"version": "6.2.1",
"wp_version_header": "6.2.1"
},
"timestamp": "2026-04-10T14:37:00Z",
"remediation": "Maintenez WordPress à jour vers la dernière version"
}
]
}
wprecon/
├── cmd/wprecon/
│ └── main.go # Point d'entrée CLI
├── internal/
│ ├── app/
│ │ ├── cli.go # Gestionnaires de commandes CLI
│ │ └── api.go # Gestionnaires d'API REST
│ ├── engine/
│ │ ├── scanner.go # Orchestration du scan
│ │ ├── worker_pool.go # Moteur de parallélisation
│ │ ├── context.go # Gestion du contexte de scan
│ │ ├── logger.go # Utilitaires de journalisation
│ │ └── rate_limit.go # Limitation de débit
│ ├── executor/
│ │ ├── http_executor.go # Client HTTP
│ │ ├── request_builder.go # Construction de requêtes
│ │ └── variables.go # Résolution de variables
│ ├── matchers/
│ │ └── matchers.go # Logique de correspondance des réponses
│ ├── extractors/
│ │ └── extractors.go # Extraction de données
│ ├── templates/
│ │ ├── loader.go # Découverte des templates
│ │ └── parser.go # Analyse YAML
│ ├── pipeline/
│ │ └── pipeline.go # Workflow de scan
│ └── domain/
│ ├── template.go # Modèles de données
│ ├── finding.go
│ ├── http.go
│ ├── matcher.go
│ └── extractor.go
├── templates/ # Bibliothèque de templates YAML
│ ├── wordpress/ # Spécifique WordPress
│ ├── cves/ # Détection de CVE
│ ├── exposures/ # Fuite d'informations
│ ├── common/ # Vérifications génériques
│ └── waf/ # Détection WAF
└── go.mod # Dépendances
┌─────────────────────────────────────────────┐
│ Interface utilisateur (CLI/API) │
└─────────────────────────────────────────────┘
│
├─→ Chargeur de templates
├─→ Limiteur de débit
└─→ Gestionnaire de pool de workers
│
▼
┌─────────────────────────────────────────────┐
│ Moteur de pipeline de scan │
│ ┌────────→ Constructeur de requêtes │
│ │ ┌────────→ Exécuteur HTTP │
│ │ │ ┌────────→ Correspondance (5 types) │
│ │ │ │ ┌────────→ Extracteur (2 types) │
│ │ │ │ │ ┌────────→ Rapport de résultat │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ │
│ Template → Requête → Réponse → Résultat │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Formateurs de sortie et stockage │
│ (JSON, Tableau, Génération de rapport) │
└─────────────────────────────────────────────┘
Les templates sont des fichiers YAML qui définissent comment WPRecon doit scanner pour des vulnérabilités ou informations spécifiques.
id: wordpress-version-detection
name: Détection de version WordPress
description: Détecte et extrait la version WordPress depuis readme.html
severity: info
author: Équipe WPRecon
requests:
- url: "{{BaseURL}}/readme.html"
method: GET
matchers:
- type: status
status:
- 200
- type: word
words:
- "WordPress"
extractors:
- type: regex
regex:
- 'Version (\d+\.\d+\.\d+)'
templates/custom/Exemple :
# Créer un template personnalisé
cat > templates/custom/my-check.yaml << 'EOF'
id: my-custom-check
name: Ma vérification personnalisée
description: Détecte une vulnérabilité personnalisée
severity: medium
author: Votre nom
requests:
- url: "{{BaseURL}}/vulnerable-endpoint"
method: GET
matchers:
- type: status
status:
- 200
- type: word
words:
- "vulnerable"
EOF
# Scanner avec le template personnalisé
wprecon scan https://example.com -t my-custom-check
# Timeout HTTP (par défaut : 10s)
export WPRECON_TIMEOUT=15
# Nombre de workers (par défaut : 10)
export WPRECON_WORKERS=20
# Requêtes par seconde (par défaut : 50)
export WPRECON_RATE_LIMIT=100
# Niveau de log (par défaut : info)
export WPRECON_LOG_LEVEL=debug
# Répertoires de templates (par défaut : ./templates)
export WPRECON_TEMPLATE_DIRS=/chemin/vers/templates:/chemin/vers/autres/templates
wprecon scan <cible> \
--templates-dir ./custom-templates \
--workers 20 \
--rate-limit 100 \
--timeout 15 \
--output json \
--log-level debug
Évaluation complète de la sécurité des installations WordPress :
wprecon scan https://example.com --output json > rapport_evaluation.json
Scan automatisé des vulnérabilités dans les pipelines de déploiement :
# Exemple GitHub Actions
- nom: Scan de sécurité WordPress
run: |
wprecon scan ${{ secrets.STAGING_URL }} \
--output json \
--templates wordpress-detection,plugin-detection,cve-checks
Scanner plusieurs cibles efficacement :
cat cibles.txt | while read cible; do
wprecon scan "$cible" --output json >> resultats.json
done
# Compiler le binaire
go build -o wprecon ./cmd/wprecon/main.go
# Compiler pour plusieurs plateformes
GOOS=linux GOARCH=amd64 go build -o wprecon-linux ./cmd/wprecon/main.go
GOOS=darwin GOARCH=amd64 go build -o wprecon-darwin ./cmd/wprecon/main.go
GOOS=windows GOARCH=amd64 go build -o wprecon-windows.exe ./cmd/wprecon/main.go
google/uuid v1.6.0 - Génération d'UUID pour les résultats
gopkg.in/yaml.v3 - Analyse des templates YAML
git checkout -b feature/mon-template)templates/wprecon scan https://test.site -t votre-templateCe projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Fait avec ❤️ pour Matheus (ffx64)
| Fonctionnalité | Description |
|---|
| Scan parallèle | Pool de workers configurable (par défaut : 10 workers) pour les requêtes concurrentes |
| Limitation de débit | Limitation de requêtes intégrée (par défaut : 50 req/s) pour être respectueux du réseau |
| Réessai automatique | Logique de réessai automatique pour les requêtes HTTP échouées |
| Rechargement à chaud des templates | Aucune recompilation nécessaire – ajoutez des templates et scannez |
| Résolution de variables | Variables dynamiques : {{BaseURL}}, {{Timestamp}}, {{RandomInt}} |
| Sortie multi-format | Tableaux lisibles et JSON structuré |
| Modes CLI et API | Interfaces en ligne de commande et API REST |
| Niveaux de sévérité | Résultats classés info, faible, moyen, élevé, critique |
| Template | Objectif |
|---|
wordpress-detection | Détecter une installation WordPress |
wordpress-version | Empreinte de la version WordPress |
plugins.yaml | Détecter les plugins installés |
themes.yaml | Détecter les thèmes installés |
users.yaml | Énumérer les utilisateurs WordPress |