Thème WordPress « premium gratuit » : souvent déjà infecté
Un thème « premium gratuit » arrive souvent déjà infecté. L'administration a l'air normale : le backdoor est dans un fichier du thème, parfois copié en mu-plugin dès l'activation. Changez de thème après inspection, pas avant d'avoir cherché la copie.
Le backdoor est dans le thème dès l'installation. L'admin a l'air normal. Changez de thème après inspection : une copie peut rester en mu-plugin.
Ce que « nulled » veut dire concrètement
Quelqu'un a retiré la licence d'un thème payant et l'a mis en zip sur un blog « GPL ». Pour passer l'antivirus du blog, ou pour monétiser, un PHP de télécommande est ajouté : `class.theme-modules.php`, `functions-extra.php`, un `inc/setup.php` qui `file_get_contents` une URL.
Vous n'avez « rien installé de louche » : vous avez installé un zip hors de l'éditeur. C'est le canal. Guide WordPress.
Comparez le dossier du thème au zip de l'auteur, même numéro de version. Les fichiers en trop, un `functions.php` deux fois trop lourd, un `license.php` qui parle à un .xyz : ce n'est pas Envato. L'admin propre ne dit rien : le backdoor attend un cookie. À l'activation, beaucoup écrivent déjà un mu-plugin. Changer de thème sans ouvrir `mu-plugins/` garantit le retour du payload sous un autre nom.
L'admin propre, le fichier sale
Le backdoor ne défacer pas. Il attend une requête avec un cookie ou un user-agent. Vous voyez le Customizer. Google voit un casino. Les dates : un fichier du thème touché des mois après votre dernière modif CSS.
Comparez au zip ThemeForest / site de l'auteur, même version. Les fichiers en trop n'ont pas à exister. Un `functions.php` deux fois plus lourd que l'officiel : lisez la fin du fichier, pas seulement le début.
Où le thème pose sa copie
À l'activation, beaucoup écrivent un mu-plugin `hello-elementor-cache.php` (le nom ment) ou un cron qui retélécharge le payload si vous « nettoyez » le thème. Changer de thème sans ouvrir `wp-content/mu-plugins/` garantit le retour.
Uploads : `uploads/themename/cache.php`. `wp-config.php` : un `require` ajouté. Racine : `wp-core.php`. Cherchez le même hash / la même chaîne `base64` que dans le thème.
`installer.php` n'est pas le thème, mais les packs « site prêt + thème nulled » le laissent. Duplicator.
Uploads `themename/cache.php`, include wp-config, `wp-core.php` à la racine. Cherchez le même hash / la même chaîne base64 que dans le thème. `installer.php` n'est pas le thème, mais les packs « site prêt + thème nulled » le laissent.
- mu-plugins créé à l'activation.
- include dans wp-config.
- PHP dans uploads / cache.
Encoder, ionCube, « license.php »
Un thème légitime n'a généralement pas besoin d'ionCube sur un simple magazine. Un `license.php` qui contacte un domaine .xyz : ce n'est pas Envato. Isolez, ne « réparez » pas à l'aveugle.
Les fichiers `.ico` qui sont du PHP, les `.jpg` dans `theme/assets/` qui commencent par `<?php` : grep `<?php` hors des `.php`.
Un magazine n'a pas besoin d'ionCube. Un license.php vers un .xyz : isolez. Grepez `<?php` hors des .php : .ico et .jpg dans `theme/assets/`.
Changer de thème dans le bon ordre
Copie. Inspection thème + mu-plugins + wp-config. Pose d'un thème officiel (Twenty, ou un parent acheté chez l'auteur). Vérification que le site tient. Puis suppression du dossier nulled, pas seulement désactivation.
Si le site « a besoin » de ce look : rachetez-le. Le prix du thème est inférieur au second incident. Supprimer malware.
Copie. Inspection thème + mu-plugins + wp-config. Thème officiel (Twenty ou parent acheté). Vérification. Puis suppression du dossier nulled, pas seulement désactivation. Le page builder plein de CSS du nulled cassera l'affichage : c'est du métier, pas une raison de garder le zip pirate.
Child theme et customizer
Le child peut être propre et le parent sale, ou l'inverse. Les options `theme_mods_*` en base peuvent contenir un JS injecté. Le Customizer « code additionnel » : lisez-le.
Elementor + thème nulled : deux surfaces. Elementor.
Marketplace officielle vs dump
ThemeForest, le site de l'auteur, wp.org : canaux. Un Google « theme name nulled » : canal. Les « GPL clubs » à 9 €/mois : même risque, parfois pire (un zip pour tous, déjà patché par l'attaquant).
Après : ne pas racheter le même dump
Changez les mots de passe, régénérez les clés, interdisez PHP dans uploads. Surveillez les dates du nouveau thème.
Page WordPress piraté. créer un espace pour une chasse aux copies.
Rachetez le thème chez l'auteur si le look est indispensable ; le prix est inférieur au second incident. Changez les secrets, interdisez PHP dans uploads, surveillez les dates du nouveau thème. WordPress piraté. Chasse aux copies : créer un espace.
Thème enfant, Customizer, et clubs GPL
Le child peut être propre et le parent sale, ou l'inverse. Les `theme_mods_*` et le « code additionnel » du Customizer portent un JS. Elementor + thème nulled : deux surfaces. Elementor.
ThemeForest, le site de l'auteur, wp.org : canaux. Un « GPL club » à 9 €/mois : un zip pour tous, parfois déjà patché par l'attaquant. Un collègue qui « avait le thème » : demandez la facture Envato.
Ne rachetez pas le même dump. Changez les secrets, interdisez PHP dans uploads, surveillez les dates. Guide WordPress.
Facture, zip auteur, et ce qu'on jette
Sans facture Envato / espace client auteur, traitez le zip comme nulled. Comparez, sortez, cherchez la copie mu-plugin. Un thème wp.org modifié sur le disque est une autre histoire : l'entrée est plugin ou FTP, le thème s'est fait écrire dessus. Comparez quand même.
Le site « a besoin » de ce look : rachetez, ou acceptez 48 h de vitrine imparfaite. Un page builder cassé n'est pas une raison de garder le payload. Supprimer malware. Créer un espace.