Hoe Netcat te Gebruiken en Je Netwerkvaardigheden Verbeteren!

Beheren van netwerken en het monitoren van verkeersgegevens tussen systemen klinkt intimiderend. Tenzij je weet hoe je Netcat moet gebruiken.

Netcat is een opdrachtregelhulpprogramma dat je kunt gebruiken voor verschillende doeleinden, zoals poortscans, bestandsoverdrachten en het maken van een minimale webserver om verbindingsactiviteiten te testen. In deze tutorial leer je hoe je Netcat kunt benutten terwijl je enkele van de meest voorkomende toepassingen doorloopt.

Klaar? Lees verder en til je netwerkvaardigheden naar een hoger niveau!

Vereisten

Deze tutorial zal een praktische demonstratie zijn. Als je wilt volgen, zorg er dan voor dat je het volgende hebt.

  • Twee Linux-machines: één (ubuntu1) fungeert als het ontvangende host, en een andere (ubuntu2) dient als het verzendende host – Deze tutorial maakt gebruik van Ubuntu 20.04 voor beide machines.

Scannen voor Open Poorten

Poorten zijn de toegangspoorten die netwerkverkeer toelaten om een machine binnen te komen en te verlaten. Wanneer een poort gesloten is, luistert er geen service op die poort en kan er geen verkeer doorheen gaan. Maar als de poort open is, is uw netwerk vatbaar voor aanvallen.

Als u wilt controleren of een specifieke poort open is op een machinepatch voor eventuele beveiligingslekken, dan is Netcat hiervoor geschikt. Als pentester moet u weten welke poorten open zijn om uw aanval uit te voeren. Wat de reden ook mag zijn, het scannen van open poorten is een veelvoorkomende behoefte.

De basis syntaxis voor het scannen van poorten met behulp van Netcat is als volgt waarbij:

  • host – het IP-adres of de hostnaam van de machine die u wilt scannen.
  • startport – het startpoortnummer.
  • endport – het eindpoortnummer.
netcat options host startport-endport

het netcat-commando heeft een alias van nc, wat handig is om commando’s te verkorten. Maar deze handleiding gebruikt netcat voor een juiste documentatie.

SSH naar uw verzendende host (ubuntu2) en voer het volgende commando uit om te scannen naar open poorten tussen poorten 1-100.

Vervang gedurende deze handleiding 149.28.86.131 door het IP-adres van uw verzendende host.

In de meeste gevallen is het bereik van poorten 1-100 voldoende. De meeste services gebruiken standaard poortnummers die over het algemeen in dit bereik vallen, zoals 22 voor SSH, 80 voor HTTP, enzovoort.

De onderstaande lijst legt elk van de vlaggen uit die het gedrag van de poortscan regelen:

  • -z (zero I/O-modi) – Netcat leest niet van of schrijft niet naar de netwerkverbinding. Met deze optie wordt het scanproces versneld.
  • -n – Geeft Netcat de opdracht DNS-lookup uit te schakelen om vertragingen te voorkomen.
  • -v – Laat Netcat alle poortscans in detail zien.
netcat -z -n -v 149.28.86.131 1-100

Je kunt hieronder zien dat de verbinding met poort 22 (SSH) is gelukt, maar alle andere poorten zijn mislukt.

How to Use Netcat : Scanning for Open Ports

Omdat het netcat-commando alle gescande poorten weergeeft, krijg je veel informatie, waarvan sommige overbodig zijn. In dat geval voer je het onderstaande commando uit en leid je het door naar het grep-commando. Dit commando filtert alleen de open poorten met het bericht "succeeded!" aan het einde, zoals hieronder getoond.

netcat -z -n -v 149.28.86.131 1-100 2>&1 | grep succeeded

Hieronder zie je dat poort 22 open staat voor een SSH-verbinding zoals verwacht.

Filtering the Successful Port Connection

Veilig bestanden verzenden tussen hosts

Naast poortscans maakt Netcat het mogelijk om bestanden veilig tussen twee machines over te zetten. Netcat gebruikt het TCP-protocol voor bestandsoverdracht, dat betrouwbaarder is dan UDP.

De basisopmaak voor het verzenden van een bestand met Netcat is als volgt:

netcat options host port filename

Om bestanden van jouw host naar een andere machine te sturen:

1. Voer het onderstaande commando uit om te luisteren op poort 4444 op de ontvangende host (ubuntu1).

Dit commando heeft geen uitvoer, maar de onderstaande opties beïnvloeden hoe het commando de luisterpoort instelt:

  • -l – vertelt netcat om te luisteren naar een inkomende verbinding op de gespecificeerde TCP-poort. De poort kan elk gewenst getal zijn, maar zorg ervoor dat andere services uw voorkeurspoort niet gebruiken.
  • > – vertelt netcat om alle inkomende gegevens door te sturen naar een bestand op het gespecificeerde pad (data_file).
netcat -l 4444 > ata_file

Alleen de rootgebruiker kan binden aan poorten lager dan 1000, dus u moet een poort groter dan 1000 selecteren als niet-rootgebruiker. Als u probeert een poortnummer lager dan 1000 te gebruiken als niet-rootgebruiker, krijgt u de volgende fout.

Getting “Permission denied” Error When Using Port Lower Than 1000

2. Op de verzendende host (ubuntu2), voer de volgende echo-opdracht uit, die geen uitvoer heeft maar een bestand genaamd data_file maakt met Hello from ATA als inhoud.

echo "Hello from ATA" > ata_file

3. Voer nu het netcat-commando hieronder uit om data_file naar de ontvangende host (ubuntu1) te sturen. Zorg ervoor dat u hetzelfde poortnummer op de ontvangende host (4444) gebruikt als op de verzendende host.

Dit commando heeft geen uitvoer, maar de < optie vertelt netcat om de invoer uit het gespecificeerde bestand te halen.

netcat 149.28.86.131 4444 < ata_file

4. Schakel ten slotte over naar de ontvangende host (ubuntu1) en voer het cat-commando hieronder uit om de inhoud van het data_file te controleren.

cat ata_file

Je kunt de onderstaande Hello from ATA-melding zien, wat aangeeft dat de overdracht is gelukt.

Verifying the Transfer Worked

Mappen naar een andere host verzenden

Tot nu toe hebt u met succes één bestand van de ene host naar de andere verzonden. Maar wat als u een hele map met al zijn submappen en bestanden wilt verzenden? Netcat kan ook mappen verzenden!

Stel dat je een back-updirectory hebt genaamd apache_backup op de verzendende host (ubuntu2). Je moet eerst de directory comprimeren, vervolgens de directory naar de ontvangende host (ubuntu1) verzenden en daar uitpakken.

1. Op de ontvangende host (ubuntu1) voer je het volgende commando uit om een nieuwe directory genaamd apache_backup aan te maken en daarin te navigeren (cd).

mkdir apache_backup && cd apache_backup
Creating the apache_backup Directory

2. Voer vervolgens het onderstaande commando uit om te luisteren op poort 4444 en de gecomprimeerde bestanden uit te pakken die de verzendende host (ubuntu2) naar de ontvangende host (ubuntu1) stuurt.

Dit commando geeft geen uitvoer, maar de tar xf – vlaggen nemen de invoer van Netcat (standaardinvoer) en pakken alle bestanden uit in de huidige directory.

netcat -l 4444 | tar xf -

3. Op de verzendende host (ubuntu2) voer je de volgende commando’s uit om een directory (apache_backup), enkele tekstbestanden aan te maken en ze naar de ontvangende host (ubuntu1) te sturen.

Deze commando’s geven geen uitvoer, maar je controleert of de overdracht heeft gewerkt in de volgende stap.

# Maakt een apache_backup directory aan en enkele tekstbestanden erin
mkdir apache_backup && cd apache_backup && touch ata{1..5}.txt
# Comprimeert de werkdirectory en stuurt deze naar de ontvangende host
tar cf - . | netcat 149.28.86.131 4444

4. Schakel tenslotte over naar de ontvangende host (ubuntu1), druk op Ctrl+C om te stoppen met luisteren op poort 4444, en voer het ls commando uit om de bestanden binnen de apache_backup directory weer te geven.

ls

Zoals je hieronder kunt zien, zijn de bestanden van de apache_backup directory succesvol overgebracht naar de apache_backup directory op de ontvangende host.

Verifying Transferred Files on the Receiving Host

Het verzenden van een gehele schijf of partitie naar een andere host

Het verzenden van je volledige schijf of partitie naar een andere host mag ambitieus lijken, maar deze taak is haalbaar, los van het verzenden van bestanden en mappen. Deze prestatie is handig, vooral als je je hele schijf wilt back-uppen voordat je drastische maatregelen neemt, zoals het verplaatsen of verwijderen van een groot aantal bestanden.

1. Voer het commando uit op de ontvangende host (ubuntu1) om te beginnen met luisteren op poort 4444. Dit commando heeft geen uitvoer, maar pakt alle inkomende gegevens uit (bzip2 -d | dd) naar /dev/sdb.

/dev/sdb is je tweede harde schijf op de machine. Maar in dit geval is /dev/sdb een lege harde schijf die aan deze machine is gekoppeld voor deze tutorial.

netcat -l 4444 | bzip2 -d | dd of=/dev/sdb

2. Op de verzendende host (ubuntu2) voer je het onderstaande fdisk-commando uit om alle schijven en partities op je machine te vinden.

 fdisk -l

Zoals je hieronder kunt zien, is /dev/vda1/ de root-partitie voor de verzendende host in deze tutorial. Je uitvoer kan verschillen afhankelijk van de configuratie van je machine.

Finding All Disks and Partitions

3. Voer het volgende commando uit op de verzendende host (ubuntu2), dat geen uitvoer heeft maar de /dev/vda1-partitie naar de ontvangende host (ubuntu1) stuurt via poort 4444.

Het comprimeren en verzenden van de partitie naar de ontvangende host kan even duren, afhankelijk van de grootte van de partitie.

bzip2 -c /dev/vda1 | netcat 149.28.86.131 4444

4. Zodra het proces is voltooid, schakel over naar de ontvangende host (ubuntu1) en je zult de onderstaande uitvoer zien.

De fout “geen ruimte meer op apparaat” wordt verwacht omdat /dev/vda1 waarschijnlijk groter is dan /dev/sdb. Maar je begrijpt het idee! Je kunt Netcat gebruiken om je hele harde schijf of partitie naar een ander machine te sturen.

Viewing the Sending Disk/Partition Process

5. Voer tot slot de commando’s uit op de ontvangende host (ubuntu1) om de partitie /dev/vda1 te koppelen en alle bestanden in de partitie te vermelden.

# Koppelt /dev/vda1 partitie
mount /dev/vda1 /media 
# Vermeldt alle bestanden in de partitie
ls media

Zoals je hieronder kunt zien, worden alle bestanden en mappen van /dev/vda1 succesvol overgebracht naar /dev/sdb.

Verifying Data Integrity of the File Transfer

Het maken van een Minimale Webserver

Het configureren van een volwaardige webserver zoals Apache of NGINX alleen om een webserverprobleem te diagnosticeren kan vervelend zijn. Maak in plaats daarvan een minimale webserver met Netcat om snel webserverproblemen te identificeren.

Om een minimale webserver te maken:

1. Schakel over naar je ontvangende host en voer de onderstaande commando’s uit om een hoofdmap (nc-webserver-docroot) voor de webserver te maken en een shellscript (httpresponse.sh) dat de HTTP-respons genereert.

mkdir -pv /root/nc-webserver-docroot/
Creating a Webserver Root Directory

2. Maak vervolgens een index.html bestand aan in de /root/nc-webserver-docroot/ map met je voorkeurseditor en vul het bestand met de onderstaande code. Dit HTML-bestand bevat de inhoud die de Netcat-webserver zal serveren.

<!doctype html>

<html lang="en">

<head>
	<title>NETCAT Testing network connectivity </title>
</head>

<body>
	<h1>NETCAT Test</h1>
	<p>Connection Successful! Your networking skills are awesome!</p>
</body>

</html>

3. Maak een shellscriptbestand genaamd httpresponse.sh in de /root/nc-webserver-docroot/ map en vul de code hieronder in.

Dit shell-script retourneert de inhoud van het bestand /root/nc-webserver-docroot/index.html als een HTTP-respons naar elke client die een verzoek naar jouw Netcat-webserver stuurt.

#!/bin/bash
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat /root/nc-webserver-docroot/index.html)"

4. Voer nu het onderstaande chmod-commando uit, dat geen uitvoer heeft maar het bestand httpresponse.sh uitvoerbaar maakt (+x).

chmod +x /root/nc-webserver-docroot/httpresponse.sh

5. Voer het onderstaande ncat-commando uit om de Netcat-webserver op poort 7777 te starten.

Zorg ervoor dat je poort 7777 vervangt door het poortnummer van jouw keuze, dat niet wordt gebruikt door enige andere service op jouw systeem.

De volgende opties beïnvloeden het gedrag van het opstarten van de Netcat-webserver:

  • -l – vertelt Ncat om te luisteren naar een inkomende verbinding.
  • -v – schakelt de uitgebreide modus in om alle inkomende HTTP-verzoeken in je terminal te tonen.
  • -c - specificeert het pad naar het httpresponse.sh-script dat de HTTP-responsen genereert.
  • -keep-open – houdt de Ncat luisteraar open, zelfs nadat de eerste verbinding is gesloten. Deze optie is handig als je jouw webserver test met meerdere clients.
ncat -lv 7777 -c /root/nc-webserver-docroot/httpresponse.sh --keep-open

Je ziet de volgende uitvoer zodra de Netcat-webserver draait en luistert op poort 7777 op alle beschikbare netwerkinterfaces.

Starting the Ncat Server

6. Nu, open een ander terminalvenster en voer het volgende commando uit om je Netcat-webserver te testen (http://localhost:7777).

curl -vvv http://localhost:7777

Het onderstaande resultaat toont aan dat de Netcat-webserver naar verwachting werkt en de inhoud van het bestand /root/nc-webserver-docroot/index.html als HTTP-respons kan retourneren.

Testing your Ncat server

7. Als laatste, schakel terug naar het terminalvenster waar de Netcat-webserver wordt uitgevoerd. Je zult zien dat de Netcat-webserver het HTTP-verzoek van de curl-client heeft ontvangen en verwerkt.

Gefeliciteerd! Je hebt met succes een minimale Netcat-webserver gemaakt om je netwerkconnectiviteit te testen!

Verifying the HTTP Request from the curl Client

Conclusie

In deze tutorial heb je geleerd hoe je Netcat kunt gebruiken om je netwerk- en debugvaardigheden te verbeteren. Je hebt gezocht naar open poorten, bestanden overgedragen en een minimale webserver gemaakt. En op dit punt kun je nu veel netwerkproblemen in de echte wereld oplossen met deze krachtige netwerktool!

Met deze nieuwe kennis, waarom zou je je netwerkvaardigheden niet verder ontwikkelen en een krachtige gebruiker worden in Cybersecurity?

Source:
https://adamtheautomator.com/how-to-use-netcat/