Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Un p'tit coup de main pour un grand nettoyage !

22 réponses
Avatar
Christophe Gallaire
Bonsoir à tous,

Depuis plusieurs jours l'un des sites que j'administre a été "exploiter" par
injection de code dans tous les fichiers en php :

http://forum.dotclear.net/viewtopic.php?pid=207063#p207063

Je me suis en train de retirer cette satanée ligne de code injectée dans chacun
des fichiers en php ! La poisse !

Et je me demandais s'il ne serait pas possible de faire une recherche globale de
cette ligne dans tous les fichiers (avec la commande find + grep + xargs) et
d'ensuite virer cette ligne par une ligne de commande genre Monsieur Propre !

Quelqu'un a-t-il une idée ?

@+

Christophe

--
Christophe Gallaire

Carnet de route : http://www.road2mayotte.org

Linux On The Root : http://ubunteros.tuxfamily.org/

Mutt, le Mail Agent à l'extrême configurabilité ! 100% libre ! 100% Linux !
"Les clèbs (mutts) n'ont pas de punaises (bugs) mais des puces !"

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

10 réponses

1 2 3
Avatar
Christophe Gallaire
Merci du coup de main... Tous les essais ont été infructueux ! Le code a
supprimé est celui-là (fichier plein texte) :

http://www.clg-montaigne-goussainville.ac-versailles.fr/code

Merci de votre aide !

@+

XoF

mouss a dit dans un souffle :
mouss wrote:
Christophe Gallaire wrote:
Bonsoir,

Oui je sais que FF3 le bloque par défaut ! C'est la poisse ! Retirer
cette
satanée ligne à la main c'est interminable !

Oui je sais pour le StopBadWare aussi... Grrrrrr ! Je ne sais pas
trop comment
rechercher un long motif et le supprimer dans une série de fichiers, un
répertoire...
J'ai lu que la commande sed pouvait le faire mais je ne comprends pas
trop
comment elle tourne la jolie...



si c'est pour virer la ligne:

- tu fais un backup en cas de regrets ou pour souvenir
- et puis
for f in `find /chemin/vers/repertoire/ -type f -name *.php`; do



... -name "*.php" ...

avec la ponctuation, c'est mieux...
sed -e '/cdpuvbhfzz.com/d' $f > $f.tmp && mv $f.tmp $f
done


si d'autres extensions (genre .inc et autres joyeusetés) sont
infectés, faut faire la même chose, à condition qu'on sache que c'est
des fichiers texte (et non binaires).

enfin, pour l'avenir:
- chown -R root /var/www
- Répeter avec tous les répertoires où il y a des fichiers web.
- ensuite, il faudra faire le chown inverse uniquement là où c'est
necessaire (typiquement pour les répertoires des
sessions/cache/upload/...).

ça ne suffit pas, mais c'est mieux que rien...







--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact




--
Christophe Gallaire

Carnet de route : http://www.road2mayotte.org

Linux On The Root : http://ubunteros.tuxfamily.org/

Mutt, le Mail Agent à l'extrême configurabilité ! 100% libre ! 100% Linux !
"Les clèbs (mutts) n'ont pas de punaises (bugs) mais des puces !"

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Tourneur Henry-Nicolas
Le dimanche 13 avril 2008 à 22:41 +0200, Christophe Gallaire a écrit :
Bonsoir,

Cette ligne ne marche pas non plus. Le motif est trop complexe. Je n'arrive pas
à poster le code, alors le voilà en image :



Essaye avec une expression régulière.
Essaye en remplaçant ta ligne par quelque chose du genre :
echo '<iframe src="*" width=1 height=1></iframe>';
http://www.clg-montaigne-goussainville.ac-versailles.fr/images/imagesblogue/code.png

@+

XoF

Tourneur Henry-Nicolas a dit dans un souffle :
>
>Le dimanche 13 avril 2008 à 21:13 +0200, Christophe Gallaire a écrit :
>> Bonsoir,
>>
>Bonsoir,
>> Oui je sais que FF3 le bloque par défaut ! C'est la poisse ! Retirer cette
>> satanée ligne à la main c'est interminable !
>>
>> Oui je sais pour le StopBadWare aussi... Grrrrrr ! Je ne sais pas trop comment
>> rechercher un long motif et le supprimer dans une série de fichiers, un
>> répertoire...
>>
>> J'ai lu que la commande sed pouvait le faire mais je ne comprends pas trop
>> comment elle tourne la jolie...
>>
>> Quelqu'un a-t-il une idée ?
>>
> find . -name "*.php" -exec sed -i 's/TA_LIGNE//' {} ;
>




--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jean-Damien Durand
On Sunday 13 April 2008 21:40:57 Stephane Bortzmeyer wrote:
> >perl -i.bak -p -e "s/<?php echo '<iframe
> > src="http://cdpuvbhfzz.com"//g"
> >         $(find . -name '*.php')

...

> Marche pô !



Pas de besoin de regexp dans ce cas la non ?

c="`lwp-request http://www.clg-montaigne-goussainville.ac-versailles.fr/c ode`"
replace $c '' -- `find . -name "*.php"`

A+, JD.

PS: ca suppose que le code injecté est *strictement* égal a ce qu'il y a dans l'url donnée,
et que c'est sur *une* ligne -;
Avatar
Jacques L'helgoualc'h
Bonjour. S'il vous plaît, essayez de répondre dans l'ordre, en dessous
(et en coupant ce qui est inutile (y compris ce paragraphe))...

Tourneur Henry-Nicolas a écrit, dimanche 13 avril 2008, à 23:21 :
Le dimanche 13 avril 2008 à 22:41 +0200, Christophe Gallaire a écrit :
> Tourneur Henry-Nicolas a dit dans un souffle :
> >Le dimanche 13 avril 2008 à 21:13 +0200, Christophe Gallaire a écrit :


[...]
> > > J'ai lu que la commande sed pouvait le faire mais je ne comprends pas trop
> > > comment elle tourne la jolie...
> > >
> > > Quelqu'un a-t-il une idée ?
> >
> > find . -name "*.php" -exec sed -i 's/TA_LIGNE//' {} ;
>
> Cette ligne ne marche pas non plus. Le motif est trop complexe. Je n'arrive pas
> à poster le code, alors le voilà en image :
>
> http://www.clg-montaigne-goussainville.ac-versailles.fr/images/imagesblogue/code.png

Essaye avec une expression régulière.
Essaye en remplaçant ta ligne par quelque chose du genre :
echo '<iframe src="*" width=1 height=1></iframe>';



Pas tout à fait...

$ echo '<iframe
bash: iframe: Aucun fichier ou répertoire de ce type

Tout d'abord, il faudrait que Christophe vérifie si cette P*@!µ$ de
ligne de code tient bien sur une seule ligne, ou plusieurs --- c'est
important pour Sed.

Il faudrait aussi voir s'il y a des variantes, du code comme du
découpage, et s'il y a du code légitime ayant une structure analogue.


Par ailleurs le code vicieux contient des quotes simples ET doubles, ce
qui complique la citation dans une ligne de shell :

- 'TA_LIGNE' : la plus simple, on met tout entre quotes simples, mais
dans la citation de TA_LIGNE il faut les remplacer par ''' (ou '"'"'
plus aisé sur clavier azerty) ;

- "TA_LIGNE" : certains caractères restent interprétables par le shell,
" ou ! par exemple doivent être protégés par une contre-oblique ---
sans oublier $(commande vicieuse) et autres...

- l'option -f de Sed, ou mieux « --script-file=FICHIER-SCRIPT », permet
d'éviter ces problèmes.


Il faut aussi voir si certains caractères ne sont pas interprétés par
Sed...

Dans TA_LIGNE figurent des « / », on peut les protéger, mais il est plus
simple d'écrire « s%TA_LIGNE%%g » (en vérifiant que le caractère % est
libre).

Je suggère commencer par chercher les unilignes douteuses :

find /reperts/php/ -type f -iname *.php -exec grep -i
'<[?]php echo '"'"'iframe.*width=1 height=1></iframe>'"'"';[?]>' {} +

ou tout simplement pêcher quelques échantillons de multilignes « à la
main » pour voir s'il y a des variantes, comparer avec les
faux-positifs, etc.
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Christophe Gallaire
Bonjour Jacques,


Jacques L'helgoualc'h a dit dans un souffle :

> > find . -name "*.php" -exec sed -i 's/TA_LIGNE//' {} ;
>
> Cette ligne ne marche pas non plus. Le motif est trop complexe. Je n'arrive pas
> à poster le code, alors le voilà en image :
>
> http://www.clg-montaigne-goussainville.ac-versailles.fr/images/imagesblogue/code.png

Essaye avec une expression régulière.
Essaye en remplaçant ta ligne par quelque chose du genre :
echo '<iframe src="*" width=1 height=1></iframe>';



Pas tout à fait...

$ echo '<iframe
bash: iframe: Aucun fichier ou répertoire de ce type

Tout d'abord, il faudrait que Christophe vérifie si cette P*@!µ$ de
ligne de code tient bien sur une seule ligne, ou plusieurs --- c'est
important pour Sed.



Alors, la ligne est invariablement la même. Elle est en document plein texte ici
: http://www.clg-montaigne-goussainville.ac-versailles.fr/code

Le problème est que dans certains fichiers elle est venue s'ajouter dans la
suite de la dernière et dans d'autres elle est la dernière ligne. En clair,
parfois elle n'est pas seule sur la ligne. Une constante : elle est toujours sur
la dernière ligne !

Il faudrait aussi voir s'il y a des variantes, du code comme du
découpage, et s'il y a du code légitime ayant une structure analogue.



Le code légitime qui a une structure analogue est le début de la variable en php
et la fin. Le reste je ne l'ai vu nulle part. C'est pour cette raison qu'il m'a
été facile de l'identifier.

Je vais tester. Jusqu'alors le seul résultat positif est le "rm" ou le retrait
de la ligne à la main.

@+

Christophe

Par ailleurs le code vicieux contient des quotes simples ET doubles, ce
qui complique la citation dans une ligne de shell :

- 'TA_LIGNE' : la plus simple, on met tout entre quotes simples, mais
dans la citation de TA_LIGNE il faut les remplacer par ''' (ou '"'"'
plus aisé sur clavier azerty) ;

- "TA_LIGNE" : certains caractères restent interprétables par le shell,
" ou ! par exemple doivent être protégés par une contre-oblique ---
sans oublier $(commande vicieuse) et autres...

- l'option -f de Sed, ou mieux « --script-file=FICHIER-SCRIPT », permet
d'éviter ces problèmes.


Il faut aussi voir si certains caractères ne sont pas interprétés par
Sed...

Dans TA_LIGNE figurent des « / », on peut les protéger, mais il est plus
simple d'écrire « s%TA_LIGNE%%g » (en vérifiant que le caractère % est
libre).

Je suggère commencer par chercher les unilignes douteuses :

find /reperts/php/ -type f -iname *.php -exec grep -i
'<[?]php echo '"'"'iframe.*width=1 height=1></iframe>'"'"';[?]>' {} +

ou tout simplement pêcher quelques échantillons de multilignes « à la
main » pour voir s'il y a des variantes, comparer avec les
faux-positifs, etc.
--
Jacques L'helgoualc'h



--
Christophe Gallaire

Carnet de route : http://www.road2mayotte.org

Linux On The Root : http://ubunteros.tuxfamily.org/

Mutt, le Mail Agent à l'extrême configurabilité ! 100% libre ! 100% Linux !
"Les clèbs (mutts) n'ont pas de punaises (bugs) mais des puces !"

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Christophe Gallaire a écrit, lundi 14 avril 2008, à 11:56 :
Bonjour Jacques,



bonjour,

Jacques L'helgoualc'h a dit dans un souffle :



M'enfin, plusieurs...

[...]
Tout d'abord, il faudrait que Christophe vérifie si cette P*@!µ$ de
ligne de code tient bien sur une seule ligne, ou plusieurs --- c'est
important pour Sed.



Alors, la ligne est invariablement la même.



Bon.

Elle est en document plein texte ici
: http://www.clg-montaigne-goussainville.ac-versailles.fr/code



Je n'ai pas la permission d'entrer sur le site ?

Le problème est que dans certains fichiers elle est venue s'ajouter dans la
suite de la dernière et dans d'autres elle est la dernière ligne. En clair,
parfois elle n'est pas seule sur la ligne. Une constante : elle est toujours sur
la dernière ligne !



Sans rien d'utile après, c'est plus sûr... S'il n'y a pas de pourcentage
dans ce code,

sed -i.infect -f purge_ligne.sed exemple.php

devrait faire le nettoyage,

purge_ligne.sed :
----8<------------8<------------8<------------8<------------8<--------
${ # sur la dernière ligne,
%LA_LIGNE%{ # quand elle est infectée,
s///g # on supprime le(s) code(s)
}
}
----8<------------8<------------8<------------8<------------8<--------


Plus générique, on peut supposer que ce style de codage n'est employé
nulle part,

purge_code.sed :
----8<------------8<------------8<------------8<------------8<--------
%<?php echo '<iframe src="(&#[0-9]+;)+" width=1 height=1></iframe>';?>%{
s///g # on supprime tous les codes à la &#42;&#123;
}
----8<------------8<------------8<------------8<------------8<--------
(seulement testé sur l'exemple ci-dessous)

~ $ cat exemple.php
lignes
au-dessus
texte avant,<?php echo '<iframe src="&#42;&#666;" width=1 height=1></iframe>';?> rien ensuite


Si ça marche, un coup de balai :

find /nids_de_php/ -type f -iname *.php -exec sed -i.infect -f script.sed {} +

mais il peut être plus élégant d'établir d'abord la liste des fichiers infectés.


[...]
- l'option -f de Sed, ou mieux « --script-file=FICHIER-SCRIPT », permet
d'éviter ces problèmes.





Aaaargh --- c'est « --file » :/
--
Jacques L'helgoualc'h

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Christophe Gallaire
Re Jacques,

Ben... Il semble bien que ton p'tit script marche ! Je viens de faire l'essai
sur un répertoire, un nid complet, et tous les fichiers ont été purgés de cette
satanée ligne !

Merci grandement Jacques !

Jacques L'helgoualc'h a dit dans un souffle :



Elle est en document plein texte ici
: http://www.clg-montaigne-goussainville.ac-versailles.fr/code



Je n'ai pas la permission d'entrer sur le site ?



Je ne comprends pas ce que tu veux dire ?

Ben... je ne comprends pas... Possible que l'administrateur du serveur ait
bloqué l'accès. Possible que notre site ne soit pas le seul touché !

Bon... toujours est-il que je viens de tester avec succès ton script de purge !

J'ai procédé comme suit :

purge_ligne.sed :
----8<------------8<------------8<------------8<------------8<--------
${ # sur la dernière ligne,
%LA_LIGNE%{ # quand elle est infectée,
s///g # on supprime le(s) code(s)
}
}
----8<------------8<------------8<------------8<------------8<--------



Plus générique, on peut supposer que ce style de codage n'est employé
nulle part,

Si ça marche, un coup de balai :

find /nids_de_php/ -type f -iname *.php -exec sed -i.infect -f script.sed {} +



Je vous tiens au courant des suites de cette affaire !

Un grand merci à tous !

Christophe

--
Christophe Gallaire

Carnet de route : http://www.road2mayotte.org

Linux On The Root : http://ubunteros.tuxfamily.org/

Mutt, le Mail Agent à l'extrême configurabilité ! 100% libre ! 100% Linux !
"Les clèbs (mutts) n'ont pas de punaises (bugs) mais des puces !"

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
xcfaudio
Salut Christophe,
Il a l'air super ce script !
Je peux en avoir un exemplaire ?

Christophe Gallaire a écrit :
Re Jacques,

Ben... Il semble bien que ton p'tit script marche ! Je viens de faire
l'essai
sur un répertoire, un nid complet, et tous les fichiers ont été p urgés
de cette
satanée ligne !

Merci grandement Jacques !

Jacques L'helgoualc'h a dit dans un souffle :



Elle est en document plein texte ici
: http://www.clg-montaigne-goussainville.ac-versailles.fr/code



Je n'ai pas la permission d'entrer sur le site ?



Je ne comprends pas ce que tu veux dire ?

Ben... je ne comprends pas... Possible que l'administrateur du serveur
ait
bloqué l'accès. Possible que notre site ne soit pas le seul touché !

Bon... toujours est-il que je viens de tester avec succès ton script
de purge !

J'ai procédé comme suit :

purge_ligne.sed :
----8<------------8<------------8<------------8<------------8<--------
${ # sur la dernière ligne,
%LA_LIGNE%{ # quand elle est infectée,
s///g # on supprime le(s) code(s)
}
}
----8<------------8<------------8<------------8<------------8<--------



Plus générique, on peut supposer que ce style de codage n'est empl oyé
nulle part,

Si ça marche, un coup de balai :

find /nids_de_php/ -type f -iname *.php -exec sed -i.infect -f
script.sed {} +



Je vous tiens au courant des suites de cette affaire !

Un grand merci à tous !

Christophe




--
http://www.xcfa.tuxfamily.org/
(o<)< @++ Claude
//
V_/_
Avatar
Stephane Bortzmeyer
On Sun, Apr 13, 2008 at 08:28:08PM +0200,
Christophe Gallaire wrote
a message of 38 lines which said:

Depuis plusieurs jours l'un des sites que j'administre a été "exploiter" par
injection de code dans tous les fichiers en php :



Au fait, Google vient de publier un article très bien fait là-dessus :

http://googlewebmastercentral.blogspot.com/2008/04/my-sites-been-hacked-now-what.html

qui couvre notamment les choses spécifiques à Google (éviter que le
robot d'indexation ne passe en attendant la réparation, sortir le site
réparé de la liste des sites à malware, etc)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Christophe Gallaire
Bonsoir la liste !

Bon... comme le suggère Google, nous avons le site HS.

Merci à tous pour le coup de main... normalement, la suite ne devrait pas poser
trop de problèmes.

@+

Christophe

Stephane Bortzmeyer a dit dans un souffle :
On Sun, Apr 13, 2008 at 08:28:08PM +0200,
Christophe Gallaire wrote
a message of 38 lines which said:

Depuis plusieurs jours l'un des sites que j'administre a été "exploiter" par
injection de code dans tous les fichiers en php :



Au fait, Google vient de publier un article très bien fait là-dessus :

http://googlewebmastercentral.blogspot.com/2008/04/my-sites-been-hacked-now-what.html

qui couvre notamment les choses spécifiques à Google (éviter que le
robot d'indexation ne passe en attendant la réparation, sortir le site
réparé de la liste des sites à malware, etc)



--
Christophe Gallaire

Carnet de route : http://www.road2mayotte.org

Linux On The Root : http://ubunteros.tuxfamily.org/

Mutt, le Mail Agent à l'extrême configurabilité ! 100% libre ! 100% Linux !
"Les clèbs (mutts) n'ont pas de punaises (bugs) mais des puces !"

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
1 2 3