Programmvorstellung: netcat
Heute zum Abschluss gibt es noch einmal ein wunderbares Programm: netcat
Ich finde die Einfachheit und Mächtigkeit von netcat einfach unglaublich und vorbildlich für jede andere Software. Das Prinzip ist denkbar einfach: netcat kann nur Daten zu einem Rechner senden und gibt alles was zurück kommt auf STDOUT aus. Andererseits kann es lokal an einem Port lauschen, bei Anfragen irgendwas schreiben und alles was rein kommt, ebenfalls auf STDOUT ausgeben. Mehr macht das Programm nicht und mehr ist auch nicht nötig.
Bevor ich einige Beispiele bringe kurz zu den Optionen: Es gibt wie gesagt zwei Modi. Einmal an einem Port lauschen mit nc -l port und Daten an einen Rechner senden mit nc host port.
Jeweils wird STIN ausgewertet. Also beim lauschen wird es dem Aufrufenden zurück gegeben und beim Senden mit gesendet.
Um das zu verstehen ein paar Beispiele:
Fangen wir klein an: Eine Webseite aufrufen mit echo "GET /" | nc feitel.indeedgeek.de 80 schreibt ein GET / bei feitel.indeedgeek.de auf Port 80 und gibt das zurückgegebene HTML einfach auf STDOUT
aus. Anders rum sehen wir mit echo "hello" | nc -l -p 8080 -q 1 nachdem wir im Browser localhost:8000 aufgerufen haben auf STDOUT den Request und senden dem Browser ein “hello” zurück was dann
erscheint. (das -q 1 gibt an das nach dem senden des Requests eine Sekunde gewartet werden soll bis die Verbindung geschlossen wird. Das liegt daran das normal der Client die Verbindung
beendet aber der Webbrowser wartet bis der Server fertig ist. Also sozusagen nur eine Ausnahme bei HTTP).
Interessant sind vielleicht noch die Optionen -e und -c mit denen man entweder ein shell-script angeben kann oder eine Datei die ausgeführt werden soll. Ein bekanntes Beispiel ist die Backdoor
(bitte auf keinen Fall vergessen wieder zu schließen!!): nc -l -p 1234 -c /bin/bash. Nun wird auf Port 1234 gelauscht und alles einkommende an bash weiter gegeben und alles was bash ausgibt an
den Aufrufer zurück gesendet. Mit dem bereits bekannten nc localhost 1234 können wir uns nun auf diesen Port verbinden und anfangen Befehle zu tippen. Das Resultat wird uns ebenfalls angezeigt.
Zur Vollständigkeit möchte ich noch -v und -vv erwähnen womit man einige schöne Informationen über den Anfragenden und die Größe des Datenverkehrs angezeigt bekommt. Und natürlich noch -o file
was in die Datei ein Hexdump der Verbindung schreibt.
So nun haben wir denke ich alle wichtigen Parameter erwähnt. Kommen wir nun zu ein paar Beispielen die ich zusammen gesucht hab. Ich denke die demonstrieren ganz gut die Mächtigkeit von diesem einfachen Tool.
Ein sehr schöner Artikel dazu gibt’s auf pimpmyshell (was leider nicht mehr gepflegt wird). Dort finden sich folgende Beispiele:
Chatten
- Client A lauscht einfach:
nc -lp 1234 - Client B verbindet sich darauf:
nc IP_OF_CLIENTA 1234
Dateitransfer
- Sender:
nc RECEIVER 1234 < test.tar - Receiver:
nc -l -p 1234 > test.tar
Oder auch anders rum:
- Server:
nc -l -p 1234 < test.tar - Target:
nc SERVER 1234 > test.tar
Auch schön um ganze Festplatten zu spiegeln
- Sender:
dd if=/dev/sda | nc IP_OF_CLIENTA 1234 - Receiver:
nc -l -p 1234 | dd of=/dev/sda
Oder “on-the-fly” generieren (gefunden hier )
- On source:
tar -cf - . | nc target_ip 4000 - On target:
nc -l 4000 | tar xvf -
Verschlüsselung und Komprimierung
Das Beispiel lässt sich natürlich beliebig erweitern. Wie wäre es mit Komprimierter, Verschlüsselter Übertragung einer Festplatte?
- Sender:
dd if=/dev/sda | gzip | openssl aes-256-cbc -salt -e | nc IP_OF_RECEIVER 1234 - Receiver:
nc -l -p 1234 | openssl aes-256-cbc -salt -d | gunzip - | dd of=/dev/sda
Ok, ich denke das Prinzip ist klar.
Backup-Webserver
Ab und zu verwendet um “Wartungsarbeiten” anzuzeigen: while true; do nc -l -p 80 -q 1 < error.html; done
Oder gleich ein Redirect senden
gefunden hier
while [ 0 ]; do echo -e "HTTP/1.1 302 Found\nLocation: http://www.whatevs.com/index.html" | nc -vvvv -l -p 80; done
Voice Chat
Zuletzt noch ein schönes Beispiel eines Voice-Chats:
- On PC1:
nc -l -p 1234 | aplay - On PC2:
rec -t wav - | nc IP_PC1 1234
Selbstverständlich ebenfalls wieder komprimier- und verschlüsselbar.
So ich habe nun genug vorgestellt. Mich würden nun eure Vorschläge für netcat interessieren! Also wenn euch einen schönen Verwendungszweck einfällt oder ihr evtl schon eine nette netcat-Combo kennt dann her damit!
Comments:
(howto comment?)