web-dev-qa-db-fra.com

Recherchez un fichier contenant une chaîne et supprimez-le dans Ubuntu

Mon CMS est plein de scripts SPAM et ils se trouvent presque dans chaque dossier. J'ai compris que je pouvais trouver ces scripts en utilisant cette commande find/grep:

Sudo find . -type f \( -name '*.php' -or -name '*.node' \) -exec grep -i "eval(base64_decode" {} +

Eh bien, certains fichiers contiennent juste le spam-script et ils sont entre 300 - 302 octets.

Mais certains autres fichiers, qui sont utilisés par le CMS, sont également infectés. Ils ne doivent pas être supprimés complètement, juste tout, du premier caractère jusqu'à la première fermeture php ("?>").

J'ai d'abord utilisé la commande "supprimer" et j'ai écrit ceci:

Sudo find . -type f \( -name '*.php' -or -name '*.node' \) -exec grep -i "eval(base64_decode" {} + -delete

Mais c'était une grosse erreur car j'ai supprimé tous mes fichiers importants. Avant de supprimer plus de fichiers, je voulais juste vous demander comment faire?

Quelque chose comme: Obtenez chaque fichier que le code ci-dessus trouve et vérifiez s'il est compris entre 300 et 302 octets, si oui -> supprimez-le. Si non -> Supprimer la première section PHP. Mais important !!! Ne pas supprimer le reste! Le fichier est comme:

<?php ?> ... <?php ?> ... <?php ?>"

seul le premier bloc PHP est infecté.

Pourriez-vous m'aider s'il vous plait? Il y a des centaines de fichiers et je ne veux pas le faire moi-même.

Merci beaucoup à l'avance!

3
user1130108

Vous pouvez essayer la commande suivante qui appellera une commande Perl find/replace pour chaque fichier correspondant à "eval(base64_decode" modèle:

Sudo find . -type f \( -name '*.php' -or -name '*.node' \) -exec grep -li "eval(base64_decode" {} \; 2>/dev/null | xargs Perl -i -p0e 's/<\?php.*?\?>//s'

La partie Perl supprimera simplement la première <?php ?> bloquer dans les fichiers renvoyés par la commande find.

2
Sylvain Pineau