Voici un script de nettoyage de site piraté

Bonjour,

j’ai bouclé un script qui explore votre site SPIP à la recherche de fichiers rajoutés ou modifiés. Un scan approfondi recherche aussi des fichiers dont le contenu est suspect (mais c’est moins au point). Le scan rapide est souvent suffisant.

C’est multilingue et c’est sur Gilles Vincent / spip-check · GitLab

L’url du seul fichier à poser sur la racine de votre site est https://git.spip.net/technova69/spip-check/-/raw/main/spip-check.php

Côté contrôle d’accès, c’est comme spip_loader. Rajoutez un fichier de config si vous n’est pas p’auteur d’id 1

Je précise que le script commence par liste les fichiers suspects et vous propose à la fin de les déplacer dans un répertoire « fichiers_suspects_yymmdd ». Vous pouvez ne faire que la première étape, sans aucun risque, et traiter les fichiers suspects à la main.

Merci de faire des retours pour améliorer cet outil :+1:

EDIT : Voici le dernier design :

1 « J'aime »

Hello,

Super outil, super idée.
J’ai pu trouver une backdoor sur un site, qui pouvait exécuter des commandes système arbitraires avec les droits du serveur web…
Merci !

Par contre, les sites ont presque tous les fichiers :

|pclzip.php|Script inattendu à la racine|critique|
|tradloader_fr.php|Script inattendu à la racine|critique|

Ces fichiers ne sont pas dangereux chez moi.

Détail : je le nommerais plutôt spip_check (homogénéité avec spip_loader).

Ce sont de vieux fichiers qui furent utilisés par de très vieux spip_loader …
Tu peux et devrais les supprimer.

1 « J'aime »

Ok, c’est noté merci !

Bonne idée !

Il détecte un squelettes/index.php qui est un fichier vide que j’avais ajouté il y a longtemps pour éviter de lister les squelettes trop facilement.

Et aussi des fichiers squelettes/lang/local_xx.php qui me semblent nécessaires pour rendre mes propres squelettes multilangues.

Par curiosité j’ai testé le script en local (dépot git, pas mal de plugins, des vendor de dev…)

Ça semble fonctionnel je présume, quoi que cela me questionne pas mal…

Toujours est-il que le script (analyse rapide) semble assez lent quand même dans l’analyse et surtout bloque maintenant en tournant en rond sur l’analyse du même fichier 37538… sans que je sache pourquoi.

{"next":"analyser","progress":[{"status":"done","label":"Indexation : 45 125 fichiers PHP","bar":"[####################] 45 125 / 45 125"},
{"status":"done","label":"Classification : 44 463 candidats","bar":"[####################] 45 125 / 45 125"},
{"status":"active","label":"Analyse : 37 538 / 44 463, 29857 alertes","bar":"[################....] 37 538 / 44 463"}]}

J’imagine que mon cas test est un peu particulier cela dit…

Bonjour,
Pour quelles versions de SPIP ?

intéressant. Je vais ajouter sous le tableau d’avancement le dernier fichier étudié, c’est possible que ça tourne en boucle, je suis en train de corriger cela.

A noter que la dernière version ne permet de déplacer en un click que les fichiers « qui ne sont pas présent normalement ». Les fichiers détectés en warning doivent être analysés manuellement, car les déplacer un peu trop hâtivement pourrait avoir plus de dégât (testé en modifiant un fichier de /ecrire)

Je compte proposer d’effacer le cache avant analyse, car je suis resté bloqué sur un cache de 250Mo (pourtant annoncé 1.7Mo dans l’espace privé)

toutes les version depuis 4.2

Bonjour Gilles,
Merci pour ce script ! Je l’ai essayé pour l’instant sur deux sites (scan rapide) et le résultat est rassurant :wink:
Le résultat sur l’un deux :

	critique!!eval_charge.php	Script inattendu à la racine
·	avertissement!plugins/auto/autorite/v2.1.2/inc/autorite_fonctions.php	Fichier de fonctions ou d’options inattendu dans un plugin
	critique!!spip_loader_config.php	Script inattendu à la racine
·	avertissement!squelettes/lang/local_fr.php

Effectivement eval_charge.php avait été installé pour des tests, je viens de le supprimer. Par contre pour les trois autres lignes les fichiers sont tout à fait legit et nécessaires, si c’était possible de ne pas générer les alertes dans ces cas ?

Sur un autre site j’avais ce même fichier de test eval_charge.php et tradloader_fr.php je les ai déplacés. Ca marche très bien.
J’ai maintenant supprimé ce dossier « fichiers_suspects » même s’ils ne présentaient pas réellement un danger…

Il vaut mieux avoir des faux positifs que pas du tout ^^
C’est compliqué de savoir si un fichier est legitime ou pas : un attaquant pourrait créer un faux fichier « local_fr.php ». L’heuristique actuelle pour les dossiers squelettes et plugins est d’autoriser les fichiers "_fonctions.php’ quand il ont le prefixe du plugin (ou « mes ») ou qu’ils sont associés à un squelette de même préfixe. J’ai oublié les fichiers de langue ^^

Je suis en train de travailler sur le contrôle des plugins (même principe que SPIP: comparaison de signatures sha1 pour détecter les modifications/ajouts/suppression de fichiers), ce qui permettra de traiter plugins/auto/autorite/v2.1.2/inc/autorite_fonctions.php

ça fonctionne bien, merci !

Une alerte sur : plugins/auto/facteur/v5.4.0/spip-cli/FacteurRenvoyer.php : Marqueur potentiel de webshell dans un plugin

Un faux positif à priori. Fichier conforme à la source.

Bonjour et merci beaucoup pour ce script,

Sur un site en prod (cnrs) j’ai le message suivant au lancement d’un scan :

« La confirmation ou le jeton CSRF est invalide. »

??

Merci beaucoup
T

···

Le 25/08/2026 à 11:07, Gilles Vincent via Discuter de SPIP a écrit :

Gilles Vincent epilibre
Août 25

Bonjour,

j’ai bouclé un script qui explore votre site SPIP à la recherche de fichiers rajoutés ou modifiés. Un scan approfondi recherche aussi des fichiers dont le contenu est suspect (mais c’est moins au point). Le scan rapide est souvent suffisant.

C’est multilingue et c’est sur Gilles Vincent / spip-check · GitLab

L’url du seul fichier à poser sur la racine de votre site est https://git.spip.net/technova69/spip-check/-/raw/main/spip-check.php

Côté contrôle d’accès, c’est comme spip_loader. Rajoutez un fichier de config si vous n’est pas p’auteur d’id 1

Je précise que le script commence par liste les fichiers suspects et vous propose à la fin de les déplacer dans un répertoire « fichiers_suspects_yymmdd ». Vous pouvez ne faire que la première étape, sans aucun risque, et traiter les fichiers suspects à la main.

Merci de faire des retours pour améliorer cet outil :+1:


Voir le sujet ou répondre à cet e-mail pour répondre.

Pour vous désabonner de ces e-mails, cliquez ici.

merci! enfin une lueur d’espoir mais pas sur un de mes sites piraté qui refuse son téléchargement mais je pense que ce peut être un blocage ovh, je verrai demain. sinon, simple d’utilisation, bien clair itou. je suis je suis NB version 4.4.21 est-ce valable? j’ai déplacé des fichiers

La dernière version en ligne du script ne semble pas fonctionner chez moi (les boutons scan rapide etc… apparaissent mais ne font rien). Si je reviens à la version téléchargée hier à 17h44 ça fonctionne.

Je l’ai corrigée, tu peux réessayer avec la dernière version

Oui, je t’avais écrit en message direct (que tu n’as pas vu apparemment) pour te dire que c’était OK avec la PR en draft :slight_smile:

J’ai adapté une version en ligne de commande, basée sur la structure de spip-cli.

Toujours le même principe : deux modes de scans, une recherche simplifiée de webshells et de fichiers suspects, avec une possibilité de mettre en quarantaine ou supprimer définitivement.

Pour éviter de surcharger le serveur qui diffuse les plugins, cette fois-ci j’ai prévu un cache qui récupère les plugins une fois pour toute. Seuls ceux qui sont officiels peuvent être vérifiés.

Lisez le README pour plus de détails.

Cet outil sert surtout d’analyse, il est recommandé de tout réinstaller de zéro, à blanc.

Merci pour ce travail. Le script est très simple à utiliser.
Je viens de tester. Il détecte comme critique le spip_loader_config.php « Script inattendu à la racine » et déclenche un avertissement pour tous les squelettes/lang/paquet_dist*.