JackShell Project Official Website

Home Tutorial Compilation Sources Forum
Contact

Tutorial d'utilisation Ce petit tutorial va vous apprendre comment configurer les sources de jackshell, le compiler et après, vous en ferez ce que vous voudrez :) I) Configuration de l'header "jacklib.h" Toute la configuration s'effectue dans le fichier "jacklib.h" qui constitue le fichier d'entete principal du programme.
Ce fichier se compose des définitions des constantes du code (c'est qu'il faudra editer pour la config), des prototypes des fonctions de la librairie propre au programme et éventuellement des variables globales, mais la quasi totalité des variables (buffer, entiers...) sont déclarés au début des fonctions, ce qui permet la libération de la mémoire à la sortie de la fonction et donc une meilleure utilisation de celle-ci.

Voici la description de chaque contantes :

- SERVER_NAME : Nom du serveur dans son répertoire d'installation (après infection).
- INSTALL_DIR : Chemin d'installation du serveur après infection.
- REG_NAME : Nom du programme dans la base de registre (pour le lancement au boot).
- REG_KEY : Clé registre pour le lancement au démarrage (laisser par défaut recommandé).
- PORT : Port d'écoute du serveur, de préférence un port inutilisé qui passe inaperçu.
- NOTIF_URL : URL où se situe le script php pour la notification d'IP (voir plus bas pour la notif).
- WAIT : Attente en millisecondes du serveur lorsque la machine est offline (laisser par défaut recommandé).
- ANS_SIZE : Taille en octet de la mémoire allouée pour l'exécution du shell (laisser par défaut recommandé).

  Lorsque vous modifiez la valeur d'une constante, pensez à laissez les quotes s'il y'en a ! Ces constantes constituent la configuration du serveur, si vous désirez modifier le reste, je vous conseille de savoir ce que vous faites...

  II) Notification d'IP par PHP

  La configuration de la notification est primordiale. En effet, le serveur vérifiera qu'il existe une connexion internet active avant de recevoir un client. Dans le cas où la machine est offline, le serveur attendra le temps indiqué par la constante de configuration WAIT et à chaque fois, checkera la connexion à tous ces intervalles de temps. Si une connexion est détectée, le serveur enverra une requete HTTP au script PHP indiqué dans la constante de configuration NOTIF_URL et attendra une connexion client.
  L'utilisation de la notification implique la création d'un petit script PHP afin de logguer les infos qui nous intéresse.
  Voici un exemple de script, qui marque la date et l'ip dans un fichier, à vous de l'adapter selon vos besoin...
  <?php ## notif.php ##
  $date=date("d/m/Y à H\hi");
  $fp=fopen("notifs.txt","a");
  fwrite(fp,"IP : $REMOTE_ADDR logguée le $date");
  fclose($fp);
  ?>

  Astuce : Vous pouvez très bien passer des variables à votre script par l'url de notfication de la constante de configuration du serveur. Par exemple pour protéger le script par un passwd, on sera sûr que la notif provient de jackshell.

  III) Utilisation du serveur

  Maintenant qu'on a vu comment configurer le serveur et recevoir automatiquement l'IP de la machine infectée, on va apprendre à dompter la bête et gouter à ses capacités.

  La fonction principale du serveur jackshell est de rediriger un véritable remote shell vers la socket client, en clair il permet d'exécuter n'importe quelle commande windows sur la machine cible, le serveur stockera le resultat de la commande dans un buffer et renverra son contenu au client.
  De plus le serveur possède une détection de commandes spécifiques telles que la commande de déconnexion, la messagebox (un classique ;)), et du nouveau avec les Multimedia Command Strings, une API windows qui permet un control multimedia (audio, video) quasi total sur la machine.

  Pour envoyer une commande au serveur, c'est très simple, il suffit de passer par une socket client stable (telnet n'est pas vraiment top, meme nul car il envoit les lettres au fur et à mesure qu'on les tape). Optons pour Netcat, il n'y a pas mieux.
  Exemple de connexion : nc ip_de_la_personne 44
  Un petit message du serveur confirmera le succès de votre connexion.

  ** a) Le remote shell
  Il s'agit de la commande principale du serveur, toutes commandes non reconnues comme commandes spéciales par le serveur seront considérées comme une commande shell.
  Exemples : dir; mdkir; del; netstat; ping...
  A noter qu'il ne faut absolument pas exécuter de commandes qui demandent une confirmation du client, par exemple si vous exécutez "ftp -n", le serveur passera la main au système qui attendra la suite des instructions pour la connexion FTP et ainsi vous bloquera l'accès au serveur. Nous pourrons probablement parer ce bug avec l'utilisation d'un multi-Thread dans un futur proche.
  ** b) WinExec (show et hide)
  Cette fonction est accessible par les commandes "exec" et "exeh" du serveur.
  L'utilité de WinExec est qu'elle peut exécuter n'importe quel programme du système (par contre sans retour comme le shell), et repasser la main au programme (ce qui évite de rencontrer le meme problème que précédemment).
  Par exemple si vous ouvrez notepad avec le shell, il faudra que notepad soit fermé par l'utilisateur sur la machine cible avant que vous puissiez reprendre la main sur le serveur. Alors que si vous ouvrez notepad avec la commande "exec", vous garderez la main sur le serveur meme si notepad est toujours en cours d'exécution.
  Exemple : exec notepad
  La différence entre "exec" et "exeh" est que la première exécute un programme en mode visible et la deuxième en mode invisible.
  ** c) mciSendStrings
  Cette fonction permet d'envoyer au serveur des chaines multimedia, c'est une fonction des API windows. "Multimedia Command Strings".
  Il suffit d'utiliser la commande "mcmd"
  Exemple (ouverture du lecteur CD) : mcmd set cdaudio door open

  la liste des commandes multimedia est disponible dans la base MSDN de microsoft :
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_multimedia_command_strings.asp
  ** d) MessageBox
  Je passe rapidement sur cette fonction accessible par la commande "msgbx" qui permet d'envoyer une message box sur la machine cible. Ca ne sert à rien, c'est juste pour la nostalgie :)
  A noter que vous pourrez reprendre la main sur le serveur que lorsque la personne distante aura validé la message box...
  Exemple : msgbx salut
  ** e) Déconnexion
  Utile quand vous avez fini de jouer et quitter proprement le serveur par la commande "bye". Le serveur vous répondra et fermera la socket.
  Pour toutes erreurs de compilation, voir la partie prévue pour ça...

  Shad0w

{ Hébergé par www.SecurityHack.net - Shad0w, tous droits réservés }