Parent : [[INDEX-CYBERSECU]]
Reconnaissance Web Passive - Méthodologie complète
Contexte
Méthodologie de reconnaissance passive pour l'évaluation de sécurité web sans générer de logs d'intrusion. Applicable aux cibles WordPress, SaaS (Wix), infrastructure moderne (Vercel/Cloudflare), et applications custom.
Pattern de reconnaissance (5 minutes)
Phase 1 : Fingerprinting initial
# Headers et technologie
curl -I -s --max-time 5 https://TARGET | grep -E "Server|X-Powered-By|X-Generator"
# Détection CMS/framework
curl -s https://TARGET | grep -oE 'WordPress|Drupal|Next\.js|Nuxt|Wix|Shopify|React|<meta[^>]*generator[^>]*>' | head -5
# Suivi des redirections
curl -I -s --location https://TARGET | grep -E "HTTP|Location|Server"
Phase 2 : Cartographie DNS et sous-domaines
# Sous-domaines via certificats SSL
curl -s "https://crt.sh/?q=%.TARGET&output=json" | jq -r '.[].name_value' | sort -u
# Records DNS
dig ANY TARGET
dig MX TARGET +short
dig TXT TARGET +short # SPF, DKIM, verification codes
Phase 3 : WordPress spécifique
Vulnérabilités classiques à vérifier :
# API REST - Fuite d'identité (CRITIQUE si exposée)
curl -s https://TARGET/wp-json/wp/v2/users
# XML-RPC - Brute force / amplification
curl -s -X POST https://TARGET/xmlrpc.php \
-d "<methodCall><methodName>system.listMethods</methodName></methodCall>"
# Sitemap users - Listing complet membres
curl -s https://TARGET/wp-sitemap-users-1.xml
# Version plugin via readme
curl -s https://TARGET/wp-content/plugins/PLUGINNAME/readme.txt | grep "Stable tag"
# Emojis (détection présence WP)
curl -s https://TARGET/wp-includes/js/wp-emoji-release.min.js 2>/dev/null | head -1
Phase 4 : Infrastructure moderne (Vercel/Next.js)
# API routes
curl -s https://TARGET/api/ 2>/dev/null | head -5
# Fichiers statiques Next.js
curl -s https://TARGET/_next/static/ 2>/dev/null | head -5
# Source maps (fuites de code)
curl -s https://TARGET | grep -oE '_next/[^"]+\.js\.map' | head -5
Phase 5 : SaaS (Wix/Shopify)
# Fichiers statiques exposés
curl -s https://TARGET | grep -oE 'https://static\.(wixstatic|shopify)\.com/[^"]+' | sort -u
# Tokens dans le JS
curl -s https://TARGET | grep -oE 'wixClientId|apiKey|token|secret|NEXT_PUBLIC_[A-Z_]+' | sort -u
Signatures de vulnérabilités détectées
🔴 WordPress vulnérable (Score D+)
| Signature | Preuve | Impact |
|---|---|---|
{"id":1,"name":"..."} |
API users retourne JSON avec noms réels | Fuite d'identité |
<loc>https://.../author/...</loc> |
Sitemap users exposé | Listing membres complet |
Gravity Forms X.X.X.X |
Plugin obsolète avec CVEs connues | RCE potentiel |
x-powered-by: PHP/8.1.34 |
Version exposée | CVEs ciblables |
HTTP 500 + .env |
Preprod accessible, erreurs détaillées | Fuite de configuration |
🟢 WordPress sécurisé (Score A-)
| Signature | Preuve | Signification |
|---|---|---|
404 Not Found |
/wp-json/wp/v2/users | API bloquée ou désactivée |
403 Forbidden |
/xmlrpc.php | XML-RPC protégé |
WP 6.9.4 + rien d'autre |
Version récente, pas de fuite | Durcissement actif |
server: cloudflare + openresty |
Double WAF | Protection enterprise |
🟡 Infrastructure moderne (Score B+)
| Signature | Preuve | Impact |
|---|---|---|
cf-mitigated: challenge |
Challenge Cloudflare | Bloque bots/scanners |
access-control-allow-origin: * |
CORS permissif sur CDN | Upload cross-origin si bypass WAF |
server: vercel + x-vercel-challenge |
Challenge Vercel | Requiert navigateur réel |
HTTP 308 + redirection |
Redirection www/non-www | Configuration correcte |
🔒 SaaS sécurisé (Score A)
| Signature | Preuve | Signification |
|---|---|---|
server: Pepyaka |
Infrastructure Wix | Pas d'accès serveur possible |
generator: Wix.com |
Site builder SaaS | Intrusion impossible par design |
| Aucune API exposée | Pas de endpoints trouvés | Sécurité par défaut efficace |
Commandes essentielles
Reconnaissance passive complète (une ligne)
# Fingerprints + techno + CMS
curl -s --location https://TARGET | head -200 | grep -oE 'WordPress|Drupal|Next\.js|React|Vue|<meta[^>]*generator[^>]*>|[pP][hH][pP]|server|cloudflare|nginx|apache' | sort -u
Extraction automatique emails (OSINT)
curl -s https://TARGET | grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' | sort -u
Historique Wayback (contournement protections)
curl -s "http://web.archive.org/cdx/search/cdx?url=TARGET/*&output=json" | jq -r '.[1:][1]' | head -20
Anti-patterns détectés
❌ WordPress - Fuites d'identité
Problème : API REST users exposée par défaut
Solution : add_filter('rest_endpoints', fn($e) => unset($e['/wp/v2/users']) || $e)
Impact : RGPD - exposition noms réels sans consentement
❌ WordPress - Sitemap users
Problème : WordPress 5.5+ expose sitemap users par défaut
Solution : add_filter('wp_sitemaps_add_provider', fn($p, $n) => $n==='users' ? false : $p, 10, 2)
❌ CORS permissif sur CDN
Problème : access-control-allow-origin: * sur bucket S3
Solution : Restreindre à https://www.target.com uniquement
Risque : Upload cross-origin si WAF bypassé
❌ Versions exposées
Problème : Headers X-Powered-By: PHP/8.1.34, Server: nginx/1.19.0
Solution : expose_php = Off, server_tokens off;
Outils utilisés
| Outil | Usage | Discrétion |
|---|---|---|
curl |
Headers, contenu, API | ⭐⭐⭐ Silencieux |
dig |
DNS records | ⭐⭐⭐ Passif |
crt.sh |
Sous-domaines SSL | ⭐⭐⭐ Passif (historique) |
jq |
Parsing JSON | Local uniquement |
grep/sed/awk |
Filtrage | Local uniquement |
nc / netcat |
Test ports | ⭐⭐ Peut logger |
Limites et éthique
Ce qui est testable (scope légal)
- ✅ Headers publics
- ✅ DNS records
- ✅ Certificats SSL historiques
- ✅ Contenu HTML public
- ✅ API non authentifiées (une requête de test)
Ce qui est interdit (hors scope)
- ❌ Brute force (login, API)
- ❌ Scan de vulnérabilités aggressif (Nikto, Nessus sans autorisation)
- ❌ Test d'injection (SQL, XSS, LFI)
- ❌ Upload de fichiers malveillants
- ❌ Déni de service
Signal d'arrêt
Arrêter immédiatement si :
- Challenge Cloudflare/Vercel détecté (
cf-mitigated: challenge) - Rate limiting activé (HTTP 429)
- Site politique/sensible identifié (partis, gouvernements, ONG)
- Preprod avec données de production potentielles
Scores de sécurité observés
| Type | Score | Caractéristiques |
|---|---|---|
| WordPress ancien + plugins obsolètes | D+ | API users, sitemap, CVEs |
| WordPress récent + WAF | A- | API bloquée, XML-RPC désactivé |
| Next.js + Vercel + Cloudflare | B+ | Challenge, CORS mineur |
| SaaS (Wix/Shopify) | A | Pas d'accès serveur |
| Cloudflare Enterprise Challenge | A+ | Inaccessible aux bots |
Références
- OWASP Testing Guide v4.2
- WordPress Security Handbook
- Cloudflare Security Best Practices
Dépendances
KNOW-ANT-002: Clés hardcodées (si trouvées dans JS)KNOW-PAT-052: CodeIgniter auth insecure (pour cibles CI)
Exemples
✅ Reconnaissance réussie (WordPress vulnérable)
$ curl -s https://target/wp-json/wp/v2/users
[{"id":1,"name":"John Doe","slug":"jdoe"}]
→ Fuite confirmée, API users exposée
❌ Échec (Cloudflare Challenge)
$ curl -I https://target
HTTP/2 403
cf-mitigated: challenge
→ Arrêt immédiat, requiert navigateur réel
Tagué : #pentest #reconnaissance #wordpress #cloudflare #osint #curl Session : 2026-05-02 - 5 cibles testées, méthodologie validée