Explorer
KNOW-PAT-123

Reconnaissance Web Passive - Méthodologie complète

Domaine
cybersecu
Type
pattern
Priorité
P1

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