WordPress piraté : les commandes d’urgence à connaître en FTP

Découvrir que son site WordPress est piraté n’a rien d’abstrait. On le voit tout de suite dans les accès Google qui s’effondrent, dans les mails qui tombent par dizaines, dans les visiteurs qui vous alertent que votre site redirige vers un casino en ligne ou une boutique de contrefaçons. Quand on est en pleine urgence WordPress piraté, la lucidité a tendance à disparaître. Pourtant, les premières minutes comptent énormément.

Dans beaucoup de cas, on n’a accès à rien d’autre que le FTP fourni par l’hébergeur. Pas d’interface d’administration WordPress, pas d’accès au phpMyAdmin, parfois même pas de SSH. Je me base ici sur ces situations réelles, assez fréquentes, où le FTP est votre unique corde de rappel.

L’objectif n’est pas de « tout régler » avec le FTP, car un vrai nettoyage implique aussi la base de données, les utilisateurs et les mots de passe. L’objectif est de reprendre le contrôle dans l’urgence, limiter la casse et préparer le terrain pour un nettoyage sérieux.

Reconnaître rapidement un WordPress piraté

Avant de vous précipiter sur FileZilla, il faut vérifier que l’alarme est bien justifiée. Les attaques les plus visibles se repèrent assez facilement, mais certaines sont plus discrètes.

Les signes typiques que je rencontre le plus souvent sont simples. Le site redirige aléatoirement vers des pages tierces, en particulier sur mobile ou depuis les résultats Google. Des fichiers se retrouvent à la racine avec des noms étranges comme wp-ajax.php ou cache.php alors qu’ils n’existaient pas avant. Votre hébergeur vous envoie un mail pour signaler l’envoi massif de spam depuis votre compte ou un abus reçu d’un autre fournisseur. Ou encore, votre thème contient soudain des blocs de code obfusqués, truffés de base64_decode, eval ou gzinflate.

Le FTP permet de confirmer ces suspicions très vite. Un simple coup d’œil à la date de modification d’un fichier peut vous donner la ligne temporelle de l’attaque : si tout un tas de fichiers ont été modifiés à la même date, à une heure où vous n’avez rien touché, il y a fort à parier que ce n’est pas un hasard.

Ce qu’on peut faire uniquement via FTP

Avant d’entrer dans les commandes, il faut être clair sur le périmètre. Avec un accès FTP, vous pouvez :

Vous connecter au répertoire du site et télécharger tous les fichiers pour les sauvegarder hors ligne, sur votre machine. Supprimer ou renommer des dossiers et fichiers, y compris des plugins et des thèmes. Remplacer les fichiers cœur de WordPress par une version saine téléchargée depuis wordpress.org. Modifier des fichiers stratégiques comme .htaccess, wp-config.php ou un index.php malicieux. Créer des fichiers temporaires, par exemple un fichier .maintenance pour désactiver l’affichage du site.

En revanche, vous ne pouvez pas, via FTP seul, corriger des données en base, supprimer un compte administrateur pirate, modifier un mot de passe d’utilisateur, ni exécuter des requêtes SQL. Il faut garder cette limite en tête pour ne pas se croire sauvé alors qu’un compte pirate dort encore dans la base de données.

Check-list d’urgence en cas de WordPress piraté (via FTP uniquement)

Quand l’urgence WordPress piraté tombe en plein après-midi de semaine, il est très facile de faire n’importe quoi. Cette courte séquence, à exécuter via FTP, sert de garde fou.

Mettre le site en pause en coupant temporairement l’accès public. Télécharger une copie complète des fichiers du site pour archivage. Renommer le dossier plugins pour désactiver tous les plugins d’un coup. Réinstaller les fichiers cœur de WordPress depuis une archive officielle. Revenir sur les fichiers stratégiques (.htaccess, wp-config.php, index.php) pour vérifier et nettoyer.

Cette liste ne remplace pas un audit, mais elle limite les dégâts et permet souvent d’arrêter les comportements visibles les plus graves, comme les redirections ou les envois de spam.

D’abord, sauvegarder tout ce que vous pouvez

Le réflexe de beaucoup de personnes est de tout supprimer dans un élan de panique. C’est une erreur que je vois souvent, et qui complique fortement l’analyse par la suite.

Ouvrez votre client FTP (FileZilla, Cyberduck, WinSCP, peu importe) et connectez-vous à votre serveur. Naviguez jusqu’à la racine de votre installation WordPress. Selon l’hébergeur, ce dossier peut s’appeler public_html, www, httpdocs ou porter le nom du domaine.

Créez sur votre machine locale un dossier clair, du genre sauvegarde-site-2024-06-08. Ensuite, copiez l’intégralité de la racine WordPress dans ce dossier local. Cela inclut wp-admin, wp-includes, wp-content, tous les fichiers PHP à la racine (index.php, wp-config.php, etc.) Ainsi que les éventuels scripts voisins.

image

Cette sauvegarde ne sera pas réinstallée telle quelle, car elle est probablement contaminée. Elle sert de référence pour l’analyse, pour retrouver des informations de configuration, pour comparer des fichiers modifiés. Elle est aussi très utile si vous devez confier le dossier à un prestataire sécurité plus tard. On ne compte plus les incidents où l’on regrette de ne pas avoir cette copie.

image

Le transfert peut prendre du temps si le site contient beaucoup de médias. Ne l’interrompez pas, même si tout semble urgent, c’est votre seule photographie complète de l’état du site au moment du piratage.

Mettre le site en quarantaine avec un simple fichier

Tant que votre site continue de répondre, les visiteurs et les moteurs de recherche voient l’infection. Vous risquez des avertissements de navigateur, des baisses de confiance, voire des pages désindexées.

image

Avec le FTP, il y a plusieurs manières simples de mettre le site en quarantaine.

Une des méthodes les plus propres consiste à utiliser le mécanisme de maintenance intégré à WordPress. Créez sur votre ordinateur un fichier texte nommé .maintenance contenant par exemple :

<?php $upgrading = time(); <p> Envoyez ce fichier à la racine de l’installation WordPress, à côté de wp-config.php. WordPress affichera alors une page de maintenance générique. Ce n’est pas parfait, mais c’est nettement préférable à une page de phishing.

Si le site est très gravement compromis et que vous craignez une charge malveillante exécutée même sur cette page, vous pouvez forcer un fichier index.html très simple à la racine. Par exemple un fichier index.html contenant :

<!doctype html> Site temporairement indisponible

Maintenance en cours

Le site est en cours de maintenance technique. Merci de revenir plus tard.

Si un index.php infecté existe déjà, renommez-le en index_infecte.php via FTP. Votre index.html sera alors servi à la place sur la plupart des hébergements.

Neutraliser tous les plugins sans accéder au back‑office

Très souvent, le point d’entrée ou le vecteur d’attaque se trouve dans un plugin vulnérable. Quand le problème est aigu, on a besoin de désactiver rapidement tout cet écosystème, sans pouvoir se connecter au tableau de bord.

Le FTP est parfait pour cela. Dans le dossier wp-content, repérez le dossier plugins. Renommez-le, par exemple en plugins.off. WordPress ne trouvera plus ce dossier et considérera que les plugins sont désactivés.

La commande sous forme d’instruction FTP classique peut ressembler à ceci, si vous avez un accès en mode ligne de commande FTP :

RNFR plugins RNTO plugins.off

Sur un client graphique, un simple clic droit puis « Renommer » suffit. Après cette opération, si vous retirez votre fichier de maintenance, vous verrez très vite si le site devient plus stable, même avec un thème potentiellement encore compromis.

Une fois le nettoyage plus avancé, vous pourrez restaurer le dossier en plugins, puis réactiver les extensions une à une, en mettant d’abord tout à jour.

Réinstaller les fichiers cœur de WordPress via FTP

Un des réflexes que je recommande régulièrement consiste à repartir sur des fichiers cœur propres. L’idée est simple : tout ce qui relève du noyau WordPress est facilement remplaçable par une version officielle. Il n’y a aucune raison de « réparer » un wp-admin infecté, autant le remplacer intégralement.

Étape pratique : sur votre machine locale, téléchargez l’archive de WordPress correspondant à votre version depuis le site officiel. Si vous ne connaissez pas la version, prenez la dernière et vous ajusterez si nécessaire après mise à jour globale.

Décompressez l’archive. Vous obtenez un dossier contenant wp-admin, wp-includes et un certain nombre de fichiers à la racine (index.php, wp-settings.php, etc.). Dans votre client FTP, depuis le serveur, supprimez entièrement les dossiers wp-admin et wp-includes. Ne touchez pas encore à wp-content ni à wp-config.php.

Ensuite, uploadez les dossiers wp-admin et wp-includes provenant de l’archive propre vers le serveur. Enfin, uploadez tous les fichiers racine de l’archive (sauf wp-config-sample.php que vous pouvez ignorer), en remplaçant les fichiers existants sur le serveur.

Si vous utilisez un client en ligne de commande FTP, vous pouvez par exemple utiliser les commandes suivantes après vous être positionné dans la racine :

RMD wp-admin RMD wp-includes MKD wp-admin MKD wp-includes

Puis, à l’aide de votre client local, repoussez le contenu des dossiers propres. La syntaxe exacte des commandes put ou mput varie selon les clients, mais dans l’idée, vous transférez tous les nouveaux fichiers du noyau vers le serveur.

Après cette opération, une large part du code potentiellement altéré est revenue à l’état d’origine. Si un attaquant avait inséré des backdoors dans ces zones, elles auront disparu. Cela ne règle pas une éventuelle infection en base de données ou dans les plugins, mais on retire déjà beaucoup de surface d’attaque.

Réparer ou recréer un fichier .htaccess sain

Un .htaccess piraté est extrêmement courant, notamment pour les redirections invisibles aux yeux du propriétaire du site mais visibles pour certains navigateurs, ou seulement pour Googlebot.

Depuis votre client FTP, ouvrez le fichier .htaccess à la racine via l’éditeur intégré, ou téléchargez-le pour l’ouvrir dans votre éditeur de texte favori. Un .htaccess standard pour un WordPress simple ressemble en général à ceci :

# BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule . /index.php [L] # END WordPress

Tout ce qui vient avant ou après ce bloc mérite un examen attentif. Des lignes de type RewriteRule pointant vers des domaines tiers, des blocs Options +FollowSymLinks bizarres ou des règles ErrorDocument vers des scripts inconnus sont autant de signaux d’alerte.

Si vous avez un doute, sauvegardez le .htaccess existant sous un autre nom via FTP, par exemple htaccess_suspect.txt, puis créez un nouveau .htaccess avec uniquement le bloc standard ci-dessus. Vous pourrez toujours restaurer les règles de redirection légitimes plus tard, à tête reposée.

Traquer les fichiers suspects dans wp‑content

Le dossier wp-content est à la fois précieux et fragile. On ne peut pas simplement le supprimer, car il contient vos thèmes, vos plugins, vos uploads, parfois un cache. C’est pourtant là que se cachent de nombreuses backdoors, en général déguisées en fichiers PHP anodins.

Dans la pratique, je commence souvent par repérer les fichiers qui ne ressemblent pas à ce qu’on attend dans un dossier donné. Un exemple classique : un fichier PHP au milieu du dossier uploads/2023/08, alors que seuls des fichiers images devraient s’y trouver. Autre situation fréquente : des fichiers au nom approximativement lié à WordPress, mais légèrement différent, comme wp-login2.php, wp-logs.php, index-old.php.

Liste de quelques familles de fichiers à viser en priorité dans votre inspection manuelle de wp-content :

Fichiers PHP dans des sous‑dossiers d’uploads qui devraient contenir uniquement des médias. Scripts avec des noms très génériques, du type shell.php, backdoor.php, mailer.php. Fichiers proches des noms WordPress (wp-ajax.php, wp-temp.php, wp-update.php) mais absents d’une installation standard. Fichiers récemment modifiés à la même date que d’autres fichiers compromis. Fichiers contenant beaucoup de code obfusqué, avec des fonctions comme eval, assert, base64_decode, gzinflate, ou des chaînes incompréhensibles.

Vous pouvez ouvrir ces fichiers un par un via FTP pour les inspecter. Quand un fichier est clairement malveillant, supprimez-le. S’il se trouve dans le dossier d’un plugin ou d’un thème, vérifiez aussi si d’autres fichiers voisins n’ont pas été insérés ou modifiés.

Un bon réflexe consiste à réinstaller complètement certains plugins ou thèmes douteux depuis une source officielle. On procède un peu comme pour le noyau WordPress : on supprime le dossier du plugin compromis via FTP, puis on réinstalle la même extension proprement depuis le back office, quand celui-ci redeviendra accessible, ou en la copiant depuis une archive téléchargée.

Vérifier et nettoyer wp‑config.php

Le fichier wp-config.php contient des informations sensibles, notamment les identifiants de base de données. Il arrive que des pirates y ajoutent discrètement des lignes pour charger un script externe ou définir des constantes qui facilitent des injections.

Via FTP, téléchargez wp-config.php et ouvrez-le dans un éditeur de texte. Concentrez-vous sur ce qui se trouve en bas du fichier. Classiquement, un wp-config.php propre finit par une ligne du type :

/* That's all, stop editing! Happy publishing. */ /* C'est tout, ne touchez pas à ce qui suit ! Bon blogging. */ Require_once ABSPATH . 'wp-settings.php';

Tout ce qui vient après ce require_once est très suspect. On voit souvent des lignes comme :

@include('wp-vcd.php'); @include($_SERVER['DOCUMENT_ROOT'].'/wp-includes/wp-vcd.php');

Ou des blocs avec beaucoup de caractères encodés. Ces ajouts ne sont jamais normaux. Supprimez-les, en veillant à garder intactes les définitions de constantes (nom de la base, utilisateur, mot de passe, préfixe de table, clés de sécurité).

Par ailleurs, si votre préfixe de table WordPress est resté à wp_, c’est l’occasion de noter que ce n’est pas idéal pour la sécurité, même si ce n’est pas le vecteur premier de l’attaque. Vous pourrez le changer plus tard, au moment du travail sur la base.

Réinitialiser les accès administrateur (et leurs mots de passe)

Cette étape ne peut pas se faire entièrement via FTP, mais le FTP peut vous y aider indirectement. La priorité, une fois le site stabilisé, est de révoquer tous les accès compromis.

Commencez par l’essentiel : les mots de passe. Changez le mot de passe du compte FTP utilisé, via l’interface de votre hébergeur. Si un pirate a pu déposer des fichiers, il n’est pas exclu qu’il possède ces identifiants. Faites de même pour l’accès à l’espace client de l’hébergeur, surtout si les deux mots de passe étaient liés.

Pour les comptes administrateurs WordPress, vous devrez passer par la base de données, via phpMyAdmin ou un équivalent. Mais le fichier wp-config.php que vous avez sauvegardé vous donne les identifiants de connexion à la base. C’est un point de départ indispensable si vous les aviez oubliés.

Une fois dans la base, vous pourrez changer les mots de passe d’admin, supprimer les comptes que vous ne reconnaissez pas, vérifier les rôles. Ce travail dépasse le cadre strict des commandes d’urgence FTP, mais il est incontournable. Sans lui, une backdoor « humaine » peut persister, même si les fichiers ont été nettoyés.

Penser aussi à l’environnement : PC, extensions, hébergement

Dans plusieurs incidents vécus, le nettoyage FTP a été impeccable, mais l’infection est revenue quelques jours plus tard. La cause ne se trouvait plus dans WordPress, mais dans le poste de travail du propriétaire, infecté par un malware qui récupérait les identifiants FTP depuis le client.

Dès que vous avez mis votre site en quarantaine, prenez le temps de vérifier la machine depuis laquelle vous vous connectiez en FTP. Un scan avec un bon antivirus, une mise à jour du système, et même le changement de client FTP, ne sont pas de trop.

Interrogez-vous également sur la provenance initiale de certains thèmes ou plugins. Les packs « premium gratuits » téléchargés sur des sites douteux contiennent très souvent du code malveillant, parfois inséré profondément dans les templates. Même remis à plat, un thème compromis réinstallé depuis la même source réintroduira le problème.

Enfin, regardez l’offre de votre hébergeur. Certains proposent des scans automatiques des fichiers, des quarantaines, voire des restaurations datées de l’ensemble de votre espace. Dans un vrai scénario d’urgence WordPress piraté, exploiter ces redirection malveillante WordPress outils peut faire gagner un temps précieux.

Quand le FTP ne suffit plus et qu’il faut appeler des renforts

On peut déjà faire beaucoup avec un simple accès FTP : mettre le site en pause, évacuer les plugins, restaurer les fichiers cœur, nettoyer les scripts les plus grossiers. Souvent, ces actions suffisent à rendre le site « lisible » pour les visiteurs et acceptable pour les moteurs, au moins provisoirement.

Mais certains types d’infection se nichent dans des endroits que le FTP ne montre qu’en surface. Des injections SQL dans des contenus, des options WordPress modifiées, des comptes utilisateur cachés, des tâches cron malicieuses, tout cela nécessite un travail sur la base de données et parfois des outils de sécurité dédiés.

Si après vos manœuvres via FTP le site se comporte toujours étrangement, si du code se réinsère automatiquement dans vos fichiers .php, ou si vous n’êtes pas à l’aise avec l’idée de manipuler la base, ne perdez pas des jours à tâtonner. Confier les accès à quelqu’un qui a l’habitude de ces incidents peut éviter que l’affaire ne s’étale sur des semaines, voire que vous perdiez le site entier.

Faire du FTP votre allié de prévention, pas seulement d’urgence

On associe souvent le FTP à la dernière corde de secours, sortie seulement quand tout a brûlé. C’est dommage, car un usage plus régulier permet d’anticiper beaucoup de problèmes.

Prendre l’habitude de télécharger ponctuellement une copie de la structure du site, même sans les médias les plus volumineux, permet de comparer facilement les fichiers en cas d’incident. Un simple diff entre un functions.php actuel et une version archivée révèle très vite les ajouts suspects. De même, garder à portée de main une archive propre de votre thème, de vos plugins essentiels et du noyau WordPress facilite une réinstallation rapide.

Le jour où un piratage survient, vous ne découvrez plus l’outil FTP dans la précipitation. Vous savez déjà où se trouve votre racine, comment renommer un dossier, comment éditer rapidement un fichier. La différence de stress est énorme, et la probabilité de faire une bêtise irréversible diminue considérablement.

Un site WordPress piraté n’est jamais agréable, mais avec quelques réflexes clairs et des commandes d’urgence maîtrisées en FTP, on passe du sentiment de chaos total à une situation gérable. Le FTP ne guérit pas tout, il ouvre surtout la porte à la reprise de contrôle. Le reste, ensuite, est une affaire de méthode, de patience, et parfois d’accompagnement spécialisé.