Gérer les réseaux et surveiller le flux de données entre les systèmes peut sembler intimidant. Eh bien, pas si vous savez comment utiliser Netcat.
Netcat est un outil en ligne de commande que vous pouvez utiliser à diverses fins, telles que la numérisation de ports, le transfert de fichiers et la création d’un serveur web minimal pour tester les activités de connexion. Et dans ce tutoriel, vous apprendrez à profiter de Netcat tout en passant en revue certains des cas d’utilisation les plus courants de Netcat.
Prêt ? Continuez à lire et améliorez vos compétences en réseau !
Prérequis
Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous de disposer des éléments suivants.
- Deux machines Linux : l’une (ubuntu1) agit comme hôte de réception, et l’autre (ubuntu2) sert d’hôte émetteur – Ce tutoriel utilise Ubuntu 20.04 pour les deux machines.
Numérisation des ports ouverts
Les ports sont les portes d’entrée et de sortie qui permettent aux flux de données réseau d’entrer et de sortir d’une machine. Lorsqu’un port est fermé, aucun service n’écoute sur ce port et aucun flux de données ne peut passer. Mais si le port est ouvert, votre réseau est susceptible d’être attaqué.
Si vous souhaitez vérifier si un port spécifique est ouvert sur une machine et s’il présente des vulnérabilités de sécurité, Netcat est l’outil qu’il vous faut. En tant que testeur d’intrusion, vous devez savoir quels ports sont ouverts pour mener votre attaque. Quelle que soit la raison, la recherche de ports ouverts est un besoin courant.
La syntaxe de base pour la recherche de ports avec Netcat est la suivante :
hôte
– est l’adresse IP ou le nom d’hôte de la machine que vous souhaitez scanner.portdébut
– est le numéro de port de départ.portfin
– est le numéro de port de fin.
La commande Netcat a un alias nc, ce qui est pratique pour raccourcir les commandes. Mais ce tutoriel utilise Netcat pour une documentation appropriée.
Connectez-vous en SSH à votre hôte d’envoi (ubuntu2) et exécutez la commande suivante pour rechercher les ports ouverts entre les ports 1-100
.
Tout au long de ce tutoriel, remplacez 149.28.86.131 par l’adresse IP de votre hôte d’envoi.
Dans la plupart des cas, la plage de ports 1-100
est suffisante. La plupart des services utilisent des numéros de port par défaut qui se situent généralement dans cette plage, par exemple 22
pour SSH, 80
pour HTTP, etc.
La liste ci-dessous explique chacun des indicateurs qui contrôlent le comportement du scan de port :
-z
(modes d’E/S nuls) – Netcat ne lira pas ou n’écrira pas sur la connexion réseau. Cette option rend le processus de numérisation plus rapide.-n
– Indique à Netcat de désactiver la recherche DNS pour éviter les retards.-v
– Fait en sorte que Netcat montre en détail tous les processus de balayage de ports.
Vous pouvez voir ci-dessous que la connexion au port 22 (SSH) a réussi, mais tous les autres ports ont échoué.

Étant donné que la commande netcat
répertorie tous les ports scannés, vous obtenez beaucoup d’informations, dont certaines ne sont pas nécessaires. Dans ce cas, exécutez la commande ci-dessous en redirigeant la commande grep
. Cette commande filtre uniquement les ports ouverts avec le message "succeeded!"
à la fin, comme indiqué ci-dessous.
Ci-dessous, vous pouvez voir que le port 22 est ouvert pour la connexion SSH, comme prévu.

Envoi de fichiers de manière sécurisée entre hôtes
Outre le scan de ports, Netcat permet de transférer des fichiers de manière sécurisée entre deux machines. Netcat utilise le protocole TCP pour le transfert de fichiers, qui est plus fiable que l’UDP.
La syntaxe de base pour l’envoi d’un fichier avec Netcat est la suivante :
Pour envoyer des fichiers depuis votre hôte vers une autre machine :
1. Exécutez la commande ci-dessous pour commencer à écouter sur le port 4444 sur l’hôte de réception (ubuntu1).
Cette commande ne produit pas de sortie, mais les options ci-dessous affectent la façon dont la commande définit le port d’écoute :
-l
– indique ànetcat
d’écouter une connexion entrante sur le port TCP spécifié. Le port peut être n’importe quel numéro, mais assurez-vous que d’autres services n’utilisent pas votre port préféré.
>
– indique à netcat de rediriger toutes les données entrantes vers un fichier situé dans le chemin spécifié (data_file).
Seul l’utilisateur root peut se lier à des ports inférieurs à 1000, donc vous devez choisir un port supérieur à 1000 en tant qu’utilisateur non root. Si vous essayez d’utiliser un numéro de port inférieur à 1000 en tant qu’utilisateur non root, vous obtiendrez l’erreur suivante.

2. Sur l’hôte d’envoi (ubuntu2), exécutez la commande echo suivante, qui n’a pas de sortie mais crée un fichier appelé ata_file avec le contenu « Hello from ATA ».
3. Maintenant, exécutez la commande netcat ci-dessous pour envoyer le fichier ata_file à l’hôte récepteur (ubuntu1). Assurez-vous d’utiliser le même numéro de port sur l’hôte récepteur (4444) que sur l’hôte d’envoi.
Cette commande ne produit pas de sortie, mais l’option < signifie que netcat prendra l’entrée à partir du fichier spécifié.
4. Enfin, passez à l’hôte récepteur (ubuntu1) et exécutez la commande cat ci-dessous pour vérifier le contenu du fichier ata_file.
Vous pouvez voir le message « Hello from ATA » ci-dessous, ce qui indique que le transfert a fonctionné.

Envoi de répertoires vers un autre hôte
Jusqu’à présent, vous avez réussi à envoyer un seul fichier d’un hôte à un autre. Mais que faire si vous souhaitez envoyer un répertoire entier avec tous ses sous-répertoires et fichiers ? Netcat peut également envoyer des répertoires !
Supposez que vous disposez d’un répertoire de sauvegarde appelé apache_backup sur l’hôte d’envoi (ubuntu2). Vous devrez d’abord compresser le répertoire, puis envoyer et extraire le répertoire sur l’hôte de réception (ubuntu1).
1. Sur l’hôte de réception (ubuntu1), exécutez la commande suivante pour créer un nouveau répertoire appelé apache_backup et déplacez-vous (cd) dans ce répertoire.

2. Ensuite, exécutez la commande ci-dessous pour commencer à écouter sur le port 4444 et extraire les fichiers compressés envoyés par l’hôte d’envoi (ubuntu2) vers l’hôte de réception (ubuntu1).
Cette commande n’a pas de sortie, mais les indicateurs tar xf – prennent l’entrée de Netcat (entrée standard) et extraient tous les fichiers dans le répertoire courant.
3. Sur l’hôte d’envoi (ubuntu2), exécutez les commandes suivantes pour créer un répertoire (apache_backup), des fichiers texte et les envoyer à l’hôte de réception (ubuntu1).
Ces commandes n’ont pas de sortie, mais vous vérifierez si le transfert a fonctionné à l’étape suivante.
4. Enfin, passez à l’hôte de réception (ubuntu1), appuyez sur Ctrl+C pour arrêter l’écoute du port 4444, puis exécutez la commande ls pour lister les fichiers à l’intérieur du répertoire apache_backup.
Comme vous pouvez le voir ci-dessous, les fichiers du répertoire apache_backup sont transférés avec succès vers le répertoire apache_backup sur l’hôte de réception.

Envoi du disque ou de la partition entière vers un autre hôte
L’envoi de l’intégralité de votre disque ou partition à un autre hôte peut sembler ambitieux, mais cette tâche est réalisable en dehors de l’envoi de fichiers et de répertoires. Cet exploit est particulièrement utile, surtout si vous avez besoin de sauvegarder l’intégralité de votre disque avant de prendre des mesures drastiques, telles que le déplacement ou la suppression de nombreux fichiers.
1. Exécutez la commande sur l’hôte de réception (ubuntu1) pour commencer à écouter sur le port 4444. Cette commande n’a pas de sortie mais décompresse toutes les données entrantes (bzip2 -d | dd) vers /dev/sdb.
/dev/sdb est votre deuxième disque dur sur la machine. Mais dans ce cas, /dev/sdb est un disque dur vide attaché à cette machine pour ce tutoriel.
2. Sur l’hôte émetteur (ubuntu2), exécutez la commande fdisk ci-dessous pour trouver tous les disques et partitions sur votre machine.
Comme vous pouvez le voir ci-dessous, /dev/vda1/ est la partition racine de l’hôte émetteur dans ce tutoriel. Votre sortie peut être différente en fonction de la configuration de votre machine.

3. Exécutez la commande suivante sur l’hôte émetteur (ubuntu2), qui n’a pas de sortie, mais envoie la partition /dev/vda1 à l’hôte de réception (ubuntu1) via le port 4444.
La compression et l’envoi de la partition vers l’hôte de réception prend un certain temps, en fonction de la taille de la partition.
4. Une fois le processus terminé, passez à l’hôte de réception (ubuntu1) et vous verrez la sortie ci-dessous.
L’erreur de « plus d’espace disponible sur le périphérique » est attendue car /dev/vda1 est probablement plus grand que /dev/sdb. Mais vous avez compris ! Vous pouvez utiliser Netcat pour envoyer l’intégralité de votre disque dur ou partition vers une autre machine.

5. Enfin, exécutez les commandes sur l’hôte de réception (ubuntu1) pour monter la partition /dev/vda1 et lister tous les fichiers de la partition.
Comme vous pouvez le voir ci-dessous, tous les fichiers et répertoires de /dev/vda1 sont transférés avec succès vers /dev/sdb.

Création d’un serveur web minimal
Configurer un serveur web complet comme Apache ou NGINX uniquement pour diagnostiquer un problème de serveur web peut être pénible. Au lieu de cela, créez un serveur web minimal avec Netcat pour identifier rapidement les problèmes de serveur web.
Pour créer un serveur web minimal :
1. Passez à votre hôte de réception et exécutez les commandes ci-dessous pour créer un répertoire racine (nc-webserver-docroot) pour le serveur web et un script shell (httpresponse.sh) qui génère la réponse HTTP.

2. Ensuite, créez un fichier index.html dans le répertoire /root/nc-webserver-docroot/ avec votre éditeur préféré et remplissez le fichier avec le code ci-dessous. Ce fichier HTML contient le contenu que le serveur web Netcat va servir.
3. Créez un fichier de script shell appelé httpresponse.sh dans le /root/nc-webserver-docroot/ répertoire et remplissez le code ci-dessous.
Ce script shell renvoie le contenu du fichier /root/nc-webserver-docroot/index.html en tant que réponse HTTP à tout client qui envoie une demande à votre serveur web Netcat.
4. Maintenant, exécutez la commande chmod ci-dessous, qui n’a pas de sortie mais rend le fichier httpresponse.sh exécutable (+x).
5. Exécutez la commande ncat ci-dessous pour démarrer le serveur web Netcat sur le port 7777.
Assurez-vous de remplacer le port 7777 par le numéro de port de votre choix, qui n’est utilisé par aucun autre service sur votre système.
Les options suivantes affectent le comportement de démarrage du serveur web Netcat:
-l
– indique à Ncat d’écouter une connexion entrante.
-v
– active le mode verbeux pour afficher toutes les demandes HTTP entrantes dans votre terminal.
-c - spécifie le chemin du script httpresponse.sh qui génère les réponses HTTP.
- -keep-open – maintient le listener Ncat ouvert même après la fermeture de la première connexion. Cette option est utile si vous testez votre serveur web avec plusieurs clients.
Vous verrez la sortie suivante une fois que le serveur web Netcat est en cours d’exécution et écoute sur le port 7777 sur toutes les interfaces réseau disponibles.

6. Maintenant, ouvrez un autre terminal et exécutez la commande suivante pour tester votre serveur web Netcat (http://localhost:7777).
La sortie ci-dessous montre que le serveur web Netcat fonctionne comme prévu et peut renvoyer le contenu du fichier /root/nc-webserver-docroot/index.html en tant que réponse HTTP.

7. Enfin, revenez au terminal où le serveur web Netcat est en cours d’exécution. Vous verrez que le serveur web Netcat a reçu et traité la requête HTTP du client curl.
Félicitations ! Vous avez créé avec succès un serveur web minimal avec Netcat pour tester votre connectivité réseau !

Conclusion
Dans ce tutoriel, vous avez appris à utiliser Netcat pour améliorer vos compétences en réseau et en débogage. Vous avez scanné les ports ouverts, transféré des fichiers et créé un serveur web minimal. À ce stade, vous pouvez résoudre de nombreux problèmes de réseau du monde réel avec cet utilitaire réseau puissant !
Avec cette nouvelle connaissance, pourquoi ne pas améliorer encore plus vos compétences en réseau et devenir un utilisateur puissant en Cybersécurité ?