WordPress piraté : détecter et récupérer
DOG&DEV · 26/01/2025
WordPress piraté : détecter et récupérer
Un WordPress piraté est une situation critique qui nécessite une action rapide. Ce guide explique comment détecter un piratage, nettoyer le site, récupérer les données et sécuriser pour éviter les récidives.
Prérequis
- Accès FTP/SFTP ou panneau d'hébergement
- Accès à la base de données
- Sauvegarde récente (si disponible)
- Accès SSH (recommandé)
Signes d'un piratage
Symptômes courants
- Redirections : site redirige vers des sites malveillants
- Contenu modifié : pages injectées, liens suspects
- Pop-ups : publicités ou alertes suspectes
- Performances : site lent, CPU/RAM élevés
- Google Safe Browsing : site marqué comme dangereux
- Emails : notifications de connexions suspectes
- Fichiers suspects : fichiers PHP inconnus dans wp-content
Détection
Vérifier les fichiers modifiés récemment
Via SSH :
# Fichiers modifiés dans les 7 derniers jours
find /var/www/html -type f -mtime -7 -name "*.php" -ls
# Fichiers suspects (eval, base64_decode)
grep -r "eval\|base64_decode\|exec\|system" /var/www/html/wp-content/
Scanner avec des outils
Wordfence (plugin) :
- Scan automatique des fichiers
- Détection de malware
- Quarantaine des fichiers suspects
Sucuri SiteCheck :
- Scan en ligne gratuit
- Détection de blacklist
- Analyse des fichiers
Vérifier la base de données
Requêtes suspectes :
-- Chercher du code injecté dans les posts
SELECT * FROM wp_posts WHERE post_content LIKE '%<script%' OR post_content LIKE '%eval%';
-- Vérifier les utilisateurs admin
SELECT * FROM wp_users WHERE user_login LIKE '%admin%';
Actions immédiates
1. Mettre le site en maintenance
Créer .maintenance dans la racine WordPress :
<?php
$upgrading = time();
Ou utiliser un plugin de maintenance.
2. Changer tous les mots de passe
- Admin WordPress : changer immédiatement
- FTP/SFTP : changer les credentials
- Base de données : changer le mot de passe MySQL
- Hébergement : changer le mot de passe du panneau
3. Déconnecter toutes les sessions
Via base de données :
DELETE FROM wp_usermeta WHERE meta_key = 'session_tokens';
Ou utiliser un plugin comme "WP Security Audit Log".
Nettoyage
Méthode 1 : Restauration depuis sauvegarde
Si vous avez une sauvegarde propre :
- Exporter la base de données actuelle (au cas où)
- Restaurer les fichiers depuis la sauvegarde
- Restaurer la base de données depuis la sauvegarde
- Vérifier que tout fonctionne
Méthode 2 : Nettoyage manuel
Étape 1 : Identifier les fichiers infectés
# Chercher des backdoors courants
grep -r "eval\|base64_decode\|gzinflate" /var/www/html/wp-content/
grep -r "<?php.*eval" /var/www/html/
Étape 2 : Nettoyer wp-content
Supprimer les fichiers suspects :
# Faire une sauvegarde d'abord
cp -r wp-content wp-content-backup
# Supprimer les fichiers suspects identifiés
rm /var/www/html/wp-content/uploads/suspicious-file.php
Étape 3 : Vérifier les fichiers core WordPress
Comparer avec une installation propre :
# Télécharger WordPress propre
wget https://wordpress.org/latest.zip
unzip latest.zip
# Comparer les fichiers core
diff -r wordpress/ /var/www/html/ --exclude=wp-content --exclude=wp-config.php
Remplacer les fichiers core si modifiés :
cp -r wordpress/* /var/www/html/ --exclude=wp-content --exclude=wp-config.php
Étape 4 : Nettoyer la base de données
Chercher du code injecté :
-- Posts avec code suspect
UPDATE wp_posts SET post_content = REPLACE(post_content, '<script>malicious</script>', '')
WHERE post_content LIKE '%<script>malicious</script>%';
-- Options avec code injecté
SELECT * FROM wp_options WHERE option_value LIKE '%eval%' OR option_value LIKE '%base64%';
Supprimer les utilisateurs suspects :
-- Lister les admins
SELECT * FROM wp_users u
JOIN wp_usermeta um ON u.ID = um.user_id
WHERE um.meta_key = 'wp_capabilities' AND um.meta_value LIKE '%administrator%';
-- Supprimer un utilisateur suspect (remplacer USER_ID)
DELETE FROM wp_users WHERE ID = USER_ID;
DELETE FROM wp_usermeta WHERE user_id = USER_ID;
Méthode 3 : Utiliser un plugin de sécurité
Plugins recommandés :
- Wordfence : scan et nettoyage automatique
- Sucuri Security : scan et monitoring
- iThemes Security : protection et nettoyage
Utilisation :
- Installer le plugin
- Lancer un scan complet
- Suivre les recommandations
- Nettoyer les fichiers détectés
Sécurisation
1. Mettre à jour WordPress
# Via WP-CLI
wp core update
wp plugin update --all
wp theme update --all
Ou via l'interface : Tableau de bord → Mises à jour
2. Changer les clés de sécurité
Générer de nouvelles clés : WordPress.org Secret Keys
Mettre à jour wp-config.php :
define('AUTH_KEY', 'nouvelle clé...');
define('SECURE_AUTH_KEY', 'nouvelle clé...');
define('LOGGED_IN_KEY', 'nouvelle clé...');
define('NONCE_KEY', 'nouvelle clé...');
define('AUTH_SALT', 'nouvelle clé...');
define('SECURE_AUTH_SALT', 'nouvelle clé...');
define('LOGGED_IN_SALT', 'nouvelle clé...');
define('NONCE_SALT', 'nouvelle clé...');
3. Renforcer wp-config.php
// Désactiver l'édition de fichiers
define('DISALLOW_FILE_EDIT', true);
// Limiter les révisions
define('WP_POST_REVISIONS', 3);
// Augmenter la mémoire
define('WP_MEMORY_LIMIT', '256M');
4. Sécuriser les permissions
# Permissions recommandées
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
5. Installer un plugin de sécurité
Wordfence :
- Firewall
- Scan de malware
- Limitation de tentatives de connexion
Configuration :
- Activer le firewall
- Limiter les tentatives de login (3 max)
- Activer 2FA pour les admins
6. Configurer un WAF
Cloudflare :
- Protection DDoS
- WAF (Web Application Firewall)
- Rate limiting
Sucuri :
- WAF cloud
- Monitoring
- Protection DDoS
Prévention
Bonnes pratiques
- Mises à jour régulières : WordPress, plugins, thèmes
- Mots de passe forts : utiliser un gestionnaire de mots de passe
- 2FA : activer l'authentification à deux facteurs
- Sauvegardes : sauvegardes quotidiennes automatiques
- Monitoring : surveiller les logs et les accès
- Plugins/thèmes : n'installer que depuis des sources fiables
- Permissions : limiter les permissions fichiers
Monitoring
Surveiller :
- Logs d'accès : connexions suspectes
- Fichiers modifiés : changements non autorisés
- Nouveaux utilisateurs : création d'admins
- Requêtes base de données : requêtes suspectes
Outils :
- WP Security Audit Log : log de toutes les actions
- Wordfence : monitoring en temps réel
- Sucuri : monitoring externe
Dépannage
| Problème | Cause possible | Solution |
|---|---|---|
| Site toujours infecté après nettoyage | Fichiers non supprimés, backdoor restant | Scan complet ; vérifier tous les fichiers |
| Base de données corrompue | Code injecté dans la DB | Nettoyer manuellement ; restaurer depuis backup |
| Performances dégradées | Scripts malveillants actifs | Identifier et supprimer les scripts |
| Google toujours marque comme dangereux | Cache Google, site pas complètement nettoyé | Demander révision Google ; s'assurer que le site est propre |
Récupération post-piratage
Checklist
- Site nettoyé (fichiers + base de données)
- Tous les mots de passe changés
- WordPress et plugins/thèmes à jour
- Plugin de sécurité installé et configuré
- Permissions fichiers corrigées
- Clés de sécurité WordPress régénérées
- 2FA activé pour les admins
- Sauvegardes automatiques configurées
- Monitoring activé
- Site testé et fonctionnel
Demander révision Google
Google Search Console :
- Aller dans "Sécurité"
- Demander une révision
- Attendre la vérification (quelques jours)
Ressources
- wordpress-debian13 - Installation WordPress propre
- wordpress-500-error - Dépannage erreurs WordPress
- laravel-security-checklist - Bonnes pratiques sécurité
Cet article s'inscrit dans notre série de guides sécurité WordPress. Pour un site sécurisé sur-mesure, contact.