Ce matin, Google affiche "Ce site peut être piraté" sous votre nom de domaine. Ou peut-être que votre hébergeur vous a envoyé un mail de suspension à 3h du matin. Ou qu'un client vous a appelé paniqué parce que son antivirus bloque votre site. Quelques heures plus tôt, tout allait bien.
Un site WordPress compromis, ça ne se répare pas en appuyant sur "Tout mettre à jour". Les attaquants modernes installent de la persistance : backdoors dans le core, injections en base, tâches cron pirates, comptes admin cachés. Ce guide explique comment détecter une compromission, quoi faire dans les premières heures (et surtout quoi NE PAS faire), et comment nettoyer pour de bon en 48-72h.
Les 8 signes qui ne trompent pas
Un site peut être piraté sans affichage visible. Voici les signaux qui, pris ensemble ou séparément, indiquent qu'il faut lancer un audit :
1. Redirections mobile vers sites tiers
Vous tapez l'URL depuis votre bureau, tout va bien. Depuis un mobile ou un résultat Google, vous atterrissez sur une pharmacie en ligne, un site de paris, ou une pub agressive. C'est une redirection conditionnelle, un classique. L'attaquant vérifie le User-Agent ou le Referer avant de rediriger pour éviter la détection.
2. Injections SEO (pharma, casino, crédit)
Vous cherchez votre nom dans Google et vous voyez des résultats "Viagra pas cher", "casino en ligne", "crédit rapide sans justificatif" sur votre domaine. Ce sont des pages générées par un script pirate, souvent invisibles depuis votre interface d'admin WordPress, mais bien présentes pour Googlebot.
3. Blacklist Google Safe Browsing
Chrome ou Firefox affiche un écran rouge "Site trompeur" ou "Site contenant des logiciels malveillants" à l'entrée de votre domaine. Votre trafic SEO s'effondre en 24-48h. C'est le pire des scénarios côté business : même après nettoyage, il faut soumettre une demande de revue à Google pour sortir de la liste.
4. Comptes admin fantômes
Vous ouvrez wp-admin/users.php et vous voyez un compte que personne n'a créé : wpadmin, administrator2, ou un compte avec un email en @mailinator.com. Persistance classique : l'attaquant garde une porte d'entrée même si vous changez les mots de passe.
5. Défaçage ou message pirate
Votre page d'accueil a été remplacée par un message politique, un "hacked by [pseudo]", ou un drapeau animé. C'est visible, donc facile à détecter, mais ça signifie que l'attaquant a obtenu les accès FTP ou admin. Le défaçage cache souvent une infection plus profonde : ne vous arrêtez pas à remettre l'ancienne page d'accueil.
6. Ralentissements brutaux
Votre site est soudain extrêmement lent, les CPU de l'hébergeur montent en flèche, vous recevez des alertes de consommation. Cause fréquente : le serveur mine de la cryptomonnaie, envoie du spam, ou participe à un botnet DDoS. Les ressources sont utilisées par le pirate, pas par vos visiteurs.
7. Alerte hébergeur (suspension)
OVH, o2switch, Hostinger, IONOS : les hébergeurs français scannent les comptes et suspendent automatiquement les sites détectés comme compromis. Vous recevez un mail type "Activité malveillante détectée sur votre compte, suspension immédiate". Ne pas paniquer : c'est une protection, pas une sanction.
8. Skimmer de CB sur checkout
Spécifique aux e-commerces (WooCommerce, PrestaShop) : un script injecté capture les numéros de carte saisis au checkout et les envoie à un serveur tiers. Invisible pour le client, catastrophique côté RGPD et PCI-DSS. Signal d'alerte : votre banque vous signale une fraude avec comme point commun un achat sur votre site.
Premier réflexe : ne pas réparer dans la panique
L'erreur numéro un après avoir découvert une compromission, c'est de se précipiter sur "Tout mettre à jour" et de changer tous les mots de passe. Pourquoi c'est contre-productif :
- Vous effacez les traces. Les timestamps des fichiers, les logs récents, les versions compromises servent au diagnostic. Tout écraser rend l'analyse impossible.
- Vous n'enlevez pas la persistance. Les backdoors modernes sont planquées dans la base de données, dans des tâches cron, dans des fichiers hors du répertoire WordPress. Une mise à jour ne les touche pas.
- Vous faites gagner du temps à l'attaquant. Si le point d'entrée est un plugin à jour avec une 0-day, la mise à jour ne corrige rien.
Ce qu'il faut faire dans l'ordre :
- Snapshot complet du filesystem et de la base de données (dump SQL). Même compromis, on garde l'état actuel pour l'analyse.
- Isolation : couper le site (page maintenance ou 503), geler les accès admin, bloquer les IPs suspectes.
- Diagnostic avant action : comprendre d'où ça vient avant de nettoyer, sinon le site sera re-compromis dans les heures qui suivent.
Site compromis en ce moment ? On fait un audit sécurité gratuit sous 2h pour confirmer l'infection et mesurer l'étendue. Sans engagement. Demander l'audit sécurité gratuit.
Diagnostic technique (ce que fait un pro)
Scanner les fichiers
Wordfence, Sucuri Scanner, MalCare font un travail correct : ils détectent environ 60-70% des infections connues. Ce qu'ils ratent systématiquement :
- Backdoors obfusquées avec
eval(),base64_decode(), concaténation de strings, gzinflate - Injections dans des fichiers legitimes (
wp-config.php,functions.phpdu thème actif) - Fichiers malveillants hors de
wp-content(uploads, racine, dossiers cachés.well-known) - Modifications des fichiers core WordPress faites proprement (remplacement par une version trojanisée)
Un diagnostic sérieux combine scanner automatique + inspection manuelle des fichiers modifiés récemment + comparaison avec les checksums officiels WordPress.
Inspecter la base de données
C'est là que se cache la moitié des infections modernes. Points de contrôle :
wp_options: chercher les options avecautoload=yesqui contiennent du code PHP sérialisé. Options suspectes :wp_check_hash,class_generic_support,widget_generic.wp_usersetwp_usermeta: comptes avec des IDs anormalement élevés, dates de création récentes, metadatawp_capabilitiespointant versadministrator.wp_posts: articles enpost_status = 'publish'avec contenu pharma/casino, post_author inconnu, post_date dans le futur.wp_linkset metadonnées SEO : injections de liens sortants, rel= sponsored détournés.
Analyser les logs serveur
Les logs Apache/Nginx, les logs PHP-FPM, les logs FTP/SSH contiennent l'historique de l'intrusion. On cherche :
- POST inhabituels vers
xmlrpc.php,wp-login.php,/?author=1(énumération de comptes) - Accès à des fichiers PHP qui n'ont pas leur place (
/wp-content/uploads/contenant du PHP) - Pics d'activité à des horaires inhabituels (3h-5h du matin heure FR)
- User-Agents suspects ou absents, IPs venant de réseaux connus pour l'exploitation (ASN russes, chinois, VPN commerciaux)
Vérifier les tâches cron pirates
WordPress et le serveur peuvent déclencher des tâches planifiées. Deux endroits à inspecter : wp_options.cron (cron WordPress), et la crontab système via SSH. Les attaquants y placent souvent un curl vers un serveur C2 qui redéploie l'infection si vous nettoyez les fichiers. Sans nettoyer les crons, le site re-compromis dans les heures qui suivent.
Nettoyage étape par étape (48-72h)
1. Containment (quelques heures)
L'objectif n'est pas de réparer, c'est de stopper l'hémorragie :
- Page de maintenance HTTP 503 (protège le SEO, évite la contagion aux visiteurs)
- Gel de tous les accès admin (reset des sessions, blocage wp-login.php)
- Blocage des IPs malveillantes identifiées dans les logs
- Snapshot complet préservé pour le forensic
2. Éradication (24-48h)
Maintenant seulement on nettoie. Suppression des fichiers malveillants (liste établie pendant le diagnostic), nettoyage de la base ligne par ligne, retrait des comptes pirates, purge des tâches cron suspectes. Les fichiers core WordPress et les plugins sont réinstallés depuis les sources officielles, pas "réparés".
3. Recovery (remise en ligne)
Rotation complète des credentials avant toute remise en ligne : mots de passe admin, clés SALT de wp-config.php, mots de passe base de données, mots de passe FTP/SSH, clés API tierces (Stripe, SendGrid). Puis validation fonctionnelle (home, checkout, formulaires) et retrait progressif de la page de maintenance.
4. Hardening (prévenir la récidive)
Le site est propre, mais le point d'entrée utilisé par l'attaquant existe toujours. Mesures minimales :
- WAF (Cloudflare, Sucuri, ou ModSecurity côté serveur)
- 2FA obligatoire sur tous les comptes admin
- Blocage de
xmlrpc.phpet limitation des tentatives de connexion - Règles pare-feu applicatives (interdiction d'exécuter du PHP dans
wp-content/uploads/) - Mises à jour automatiques pour le core et les plugins mineurs
Retrait de la blacklist Google
Si Google Safe Browsing a signalé votre site, le nettoyage ne suffit pas : il faut soumettre une demande de revue manuelle. Étapes :
- Se connecter à Google Search Console, section "Sécurité et actions manuelles" puis "Problèmes de sécurité".
- Lire la liste des problèmes détectés par Google (URLs infectées, type d'infection). Confirmer que tout est résolu.
- Cliquer "Demander un examen", décrire précisément les actions menées (nettoyage, hardening, changement des accès). Soyez factuel, pas marketing.
Délai typique de retrait : 72h en cas de nettoyage complet. Si Google détecte encore une infection, vous recevez un refus avec la liste des URLs problématiques. Corriger, resoumettre.
Prévention long terme
Un site nettoyé proprement reste exposé si les bonnes pratiques ne sont pas appliquées. Les 4 piliers :
Updates régulières
Core WordPress et plugins critiques à jour dans les 7 jours. WooCommerce, Elementor, Contact Form 7, Yoast : à mettre à jour en priorité. Les plugins abandonnés depuis plus de 12 mois : les remplacer ou les retirer.
Monitoring des fichiers modifiés
Outil type Wordfence ou script maison qui alerte dès qu'un fichier PHP est modifié sur le serveur. Un pirate peut rester invisible des semaines ; détecter une modification inattendue en temps réel coupe court à la persistance.
Principe de moindre privilège
Limiter le nombre de comptes administrator à 1-2 personnes. Les contributeurs éditoriaux sont en rôle editor ou author. Les accès FTP/SSH sont nominatifs (pas de compte admin partagé). Pas de base de données partagée entre plusieurs sites.
Backups hors-site
Sauvegarde quotidienne du filesystem et de la base, stockée hors du serveur de production (S3, Backblaze, Google Drive chiffré). Rétention 30 jours minimum. Test de restauration mensuel : un backup non testé n'est pas un backup.
FAQ
Comment savoir si mon site est vraiment hacké ?
Signes qui ne trompent pas : Google affiche "Ce site peut être piraté" dans les résultats, des redirections vers des sites tiers uniquement depuis Google ou mobile, des comptes admin apparaissent, votre hébergeur vous envoie un mail d'alerte, vos visiteurs se plaignent d'antivirus qui bloquent l'accès. Si vous avez un doute : l'audit est gratuit, pas d'engagement.
Combien de temps pour nettoyer un site ?
48h pour un nettoyage standard (WordPress, PrestaShop, Joomla). 72-96h pour un incident response complet (stack custom, forensic, communication RGPD). Dans tous les cas, on met une page de maintenance temporaire pour protéger vos visiteurs et votre SEO pendant la remédiation.
Vous garantissez que le site ne sera plus jamais hacké ?
Non, et méfiez-vous de qui le promet. Ce qu'on garantit : nettoyage complet de la compromission actuelle, fermeture du point d'entrée identifié, hardening qui réduit massivement la surface d'attaque, monitoring 30 jours inclus pour détecter toute tentative. Au bout de 30 jours, 95% des sites nettoyés n'ont jamais rien revu.
Un scan Wordfence ou Sucuri suffit pas ?
Ces outils détectent environ 60-70% des infections connues. Ils ratent systématiquement les backdoors obfusquées (eval, base64_decode), les injections dans la base de données, les modifications de core WordPress faites proprement, les scheduled tasks pirates. Un nettoyage sérieux est manuel, c'est ce qui fait la différence.
Vous touchez à la base de données ? J'ai peur de perdre des données.
Oui, on nettoie aussi la base (c'est souvent là que se cache l'infection). Avant toute manipulation, dump complet de la base et du filesystem : zéro risque de perdre vos données. Si quelque chose tournait mal, on peut restaurer l'état d'avant intervention en 10 minutes.
Je dois prévenir la CNIL si mes clients ont été exposés ?
Si des données personnelles ont été exfiltrées (emails, adresses, mots de passe, numéros de CB), le RGPD impose une notification à la CNIL sous 72h après détection de la violation. Pour un skimmer CB, c'est automatique. Pour une injection SEO sans vol de données, ce n'est pas nécessaire. Sur les incidents sérieux, on aide à la rédaction de la notification et à la communication aux clients.
Conclusion
Un site WordPress hacké n'est pas une fatalité : dans 95% des cas, le nettoyage + hardening suffit pour que ça n'arrive plus. Mais la fenêtre pour agir proprement est courte, et les faux réflexes (tout mettre à jour, changer les mots de passe dans la panique) aggravent souvent la situation.
Si vous constatez un des 8 signes décrits plus haut, documentez ce que vous voyez (captures, logs), ne touchez à rien, et demandez un audit. Un diagnostic externe coûte zéro à valider et peut vous épargner des semaines de trafic SEO perdu.
Besoin d'un audit sécurité maintenant ?
CZSyn intervient en urgence sur les sites compromis à Marseille et partout en France. Stack couverte : WordPress, WooCommerce, PrestaShop, Magento, Joomla, Drupal, custom PHP.
- Audit gratuit sous 2h pour confirmer l'infection et mesurer l'étendue
- Nettoyage complet sous 48h (filesystem + base + hardening)
- Monitoring 30 jours inclus post-nettoyage
- 10+ ans d'expérience, 200+ projets livrés, 29 avis 5/5
Demander un audit sécurité gratuit ou nous contacter directement.