#Récupération d'un site piraté : guide technique pour PME (WordPress/Prestashop)
Un site piraté est une urgence qui peut paralyser une PME : défacement, redirections malveillantes, vol de données clients ou injection de malware. Pour WordPress et Prestashop, les vecteurs d'attaque sont souvent similaires (plugins vulnérables, mots de passe faibles, core obsolète). Ce guide technique détaille les étapes concrètes de récupération, sans outil proprietary ni solution magique - uniquement des méthodes vérifiables et reproductibles.
#1. Pré-requis : isoler et sauvegarder
#1.1 Mettre le site hors ligne
- Via .htaccess (si accès FTP/SSH) :
# Désactiver l'accès public Order Deny,Allow Deny from all - Via le panel hébergeur : suspendre le domaine ou activer la "maintenance mode".
- Via le DNS : modifier l'enregistrement A vers une IP neutre (ex: 127.0.0.1) si l'hébergeur ne répond pas.
#1.2 Sauvegarde complète (même infectée)
- Fichiers : archivez l'intégralité du répertoire racine via SFTP/SSH :
tar -czvf backup_hacked_$(date +%Y%m%d).tar.gz /chemin/vers/le/site - Base de données : dump MySQL/MariaDB :
mysqldump -u [user] -p[password] [db_name] > backup_db_$(date +%Y%m%d).sql - Logs : récupérez les logs Apache/Nginx des 30 derniers jours (
/var/log/apache2/ou équivalent).
rclone pour un backup chiffré vers un cloud souverain.
#2. Analyse des dégâts
#2.1 Identifier le type d'infection
| Symptôme | Cause probable | Outils de détection |
|---|---|---|
| Défacement (page modifiée) | Fichiers core/plugins altérés | diff, grep -r "hacked by" |
| Redirections malveillantes | Code injecté dans .htaccess, index.php, ou DB | curl -v http://votre-site.com |
| Backdoor (accès persistant) | Fichiers PHP suspects (wp-vcd.php, 1.php) | find . -name "*.php" -newer /chemin/vers/wp-config.php |
| Malware (drive-by download) | Scripts obfusqués dans /wp-content/ | Scanners comme Wordfence (gratuit) |
| Ransomware (fichiers chiffrés) | Extension .locked, .encrypted | Vérifier les processus suspects (top, ps aux) |
#2.2 Scanner les fichiers
- Recherche de patterns suspects :
# Chercher des évals base64 (technique courante) grep -r "eval(base64_decode" /chemin/vers/le/site # Fichiers récemment modifiés (après la dernière mise à jour légitime) find . -type f -name "*.php" -mtime -7 - Comparaison avec une version propre (pour WordPress) :
# Télécharger la même version de WordPress depuis wordpress.org wget https://wordpress.org/wordpress-6.4.3.tar.gz tar -xzvf wordpress-6.4.3.tar.gz # Comparer avec diff (exclure wp-content/) diff -r wordpress/ /chemin/vers/le/site/ --exclude=wp-content
wp-config.php avec un code ajouté en fin de fichier). Vérifiez les tailles de fichiers anormales (ls -lh).
#3. Nettoyage manuel (WordPress)
#3.1 Remplacer les fichiers core
- Téléchargez la même version de WordPress depuis wordpress.org (vérifiez la version dans
/wp-includes/version.php). - Supprimez tous les fichiers sauf :
/wp-content/(à nettoyer séparément)wp-config.php(à auditer).htaccess(à remplacer par une version propre)
- Uploadez les fichiers core frais.
#3.2 Nettoyer /wp-content/
- Plugins/Themes :
- Supprimez tous les plugins/thèmes inutilisés.
- Pour les actifs : désactivez-les, puis remplacez par des versions fraîches depuis le repository officiel.
- Uploads :
# Chercher des fichiers PHP dans /uploads/ (normalement interdits) find wp-content/uploads/ -name "*.php" -exec rm -f {} \; - Fichiers suspects :
# Exemple de suppression récursive de fichiers connus malveillants find . -type f \( -name "wp-vcd.php" -o -name "1.php" -o -name "hax0r.php" \) -exec rm -f {} \;
#3.3 Nettoyer la base de données
- Recherche d'injections :
-- Chercher des URLs suspectes dans wp_posts SELECT * FROM wp_posts WHERE post_content LIKE '%http://%' AND post_content NOT LIKE '%votre-domaine.com%'; -- Chercher des évals base64 dans wp_options SELECT * FROM wp_options WHERE option_value LIKE '%eval%'; - Outils :
- WP-CLI :
wp db search-replace "malicious-code" ""(pour remplacer en masse). - phpMyAdmin : exportez la DB, éditez avec un éditeur de texte (ex: VS Code), puis réimportez.
- WP-CLI :
DELETE sans backup. Testez d'abord en SELECT.
#4. Nettoyage manuel (Prestashop)
#4.1 Remplacer les fichiers core
- Téléchargez la même version de Prestashop depuis prestashop.com.
- Conservez :
/config/(à auditer)/img/(médias)/modules/(à nettoyer)/themes/(à nettoyer)/override/(à vérifier)
- Remplacez tous les autres fichiers par la version propre.
#4.2 Nettoyer les modules
- Désactivez tous les modules via le backoffice (si accessible) ou en base de données :
UPDATE ps_module SET active = 0; - Supprimez les modules non officiels ou obsolètes.
- Pour les modules légitimes : téléchargez une version fraîche depuis l'Addons Marketplace.
#4.3 Vérifier les fichiers critiques
/config/settings.inc.php: vérifier l'absence de code ajouté après?>./override/classes/: comparer avec une installation propre (les overrides peuvent cacher des backdoors).- Fichiers de cache :
rm -rf /var/cache/* /cache/smarty/*
#5. Post-nettoyage : sécurisation
#5.1 Mises à jour obligatoires
- WordPress :
- Core, plugins, thèmes → tout mettre à jour.
- Supprimer les plugins/thèmes inutilisés.
- Prestashop :
- Mettre à jour via le backoffice ou en ligne de commande :
php bin/console prestashop:update - Vérifier les modules via le Security Advisories.
- Mettre à jour via le backoffice ou en ligne de commande :
#5.2 Renforcement des accès
- Mots de passe :
- Générez des mots de passe aléatoires (20+ caractères) pour :
- Base de données (
wp-config.php/settings.inc.php) - Comptes admin (WordPress/Prestashop)
- FTP/SSH
- Base de données (
- Utilisez un gestionnaire comme Bitwarden ou KeePass.
- Générez des mots de passe aléatoires (20+ caractères) pour :
- 2FA :
- WordPress : plugin Wordfence ou Two Factor.
- Prestashop : module Google Authenticator.
#5.3 Pare-feu et monitoring
- WordPress :
- Installer Wordfence (gratuit) pour :
- Scanner quotidien des fichiers.
- Blocage des IPs malveillantes.
- Protection des connexions (limitation des tentatives).
- Installer Wordfence (gratuit) pour :
- Prestashop :
- Module CrowdSec pour bloquer les attaques en temps réel.
- Vérifier les logs Apache/Nginx avec
fail2ban.
#6. Restauration et tests
#6.1 Restaurer depuis un backup propre
- Si vous avez un backup pré-infection :
- Supprimez tous les fichiers du site.
- Restaurez le backup.
- Appliquez immédiatement toutes les mises à jour de sécurité.
- Si le backup est infecté :
- Utilisez le comme référence pour identifier les fichiers légitimes, mais ne restaurez pas directement.
#6.2 Tester le site
- Fonctionnel :
- Vérifiez les pages clés (accueil, panier, checkout).
- Testez les formulaires (contact, inscription).
- Sécurité :
- Scan avec VirusTotal (uploadez un fichier suspect).
- Vérifiez les en-têtes HTTP avec
curl -I https://votre-site.com(recherchezX-Frame-Options,Content-Security-Policy). - Soumettez le site à Google Search Console pour lever un éventuel blacklist.
#7. Prévenir les réinfections
#7.1 Bonnes pratiques PME
- Sauvegardes automatiques :
- Configurez des backups quotidiens hors serveur (ex:
rsyncvers un NAS ou un stockage souverain comme OVH Cloud Archive). - Testez la restauration régulièrement.
- Configurez des backups quotidiens hors serveur (ex:
- Maintenance proactive :
- Désactivez l'édition de fichiers dans WordPress (
define('DISALLOW_FILE_EDIT', true);danswp-config.php). - Limitez les permissions des fichiers :
find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \;
- Désactivez l'édition de fichiers dans WordPress (
- Surveillance :
- Configurez des alertes sur les modifications de fichiers (outils :
inotifywait, OSSEC). - Vérifiez les logs régulièrement :
# Chercher des tentatives de connexion suspectes grep "POST /wp-login.php" /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
- Configurez des alertes sur les modifications de fichiers (outils :
#7.2 Quand faire appel à un expert
- Cas complexes :
- Ransomware avec chiffrement des fichiers.
- Backdoor persistante (réinfection en <24h).
- Vol de données sensibles (RGPD).
- Coût vs. temps :
- Un diagnostic professionnel (ex: M-KIS) coûte ~2 500 € HT, mais évite des jours de downtime.
- Pour un SOC managé souverain (monitoring 24/7), comptez 1 500 € de setup + 800-2 500 €/mois.
#8. Checklist de récupération (résumé)
| Étape | WordPress | Prestashop | Outil |
|---|---|---|---|
| 1. Isolation | .htaccess deny | Suspendre domaine | - |
| 2. Backup | tar + mysqldump | tar + mysqldump | - |
| 3. Scan | grep eval(base64 | find . -name "*.php" | Wordfence |
| 4. Nettoyage core | Remplacer par version propre | Remplacer par version propre | - |
| 5. Nettoyage DB | SELECT * FROM wp_options WHERE option_value LIKE '%eval%' | Vérifier ps_configuration | phpMyAdmin |
| 6. Mises à jour | Tout mettre à jour | php bin/console prestashop:update | - |
| 7. Sécurisation | 2FA + pare-feu | 2FA + CrowdSec | Wordfence |
| 8. Test | Google Search Console | Google Search Console | - |
#Conclusion
Récupérer un site piraté est un processus technique qui demande méthode et rigueur. Pour une PME, l'enjeu est double : reprendre le contrôle rapidement tout en évitant les réinfections. Les étapes clés sont :
- Isoler pour limiter les dégâts.
- Analyser pour comprendre le vecteur d'attaque.
- Nettoyer manuellement (ou restaurer depuis un backup propre).
- Sécuriser avec des mises à jour et des protections proactives.
Si le site est critique (e-commerce, données clients), envisagez un audit de sécurité post-incident pour identifier les failles résiduelles. Pour les équipes internes, des outils open source comme Wazuh ou OSSEC permettent un monitoring souverain sans dépendre de solutions proprietary.
Équipe M-KIS : Besoin d'un diagnostic NIS2 ou d'un audit ISO 27001 pour structurer votre cybersécurité ? Contactez-nous.
Ressources complémentaires :
Cet article vous parle ?
On accompagne PME, ESN et éditeurs SaaS dans leur conformité ISO 27001 / NIS2 - accompagnement spécialisé, tarifs publics, 100 % open source.