nc
Heute habe ich die Manpage gelesen und bin auf diesen Befehl gestoßen. Ich weiß, dass:
mkfifo /tmp/f
erstellt eine Named Pipe bei/tmp/f.cat /tmp/f
druckt alles, was in diese benannte Pipe geschrieben wird, und die Ausgabecat /tmp/f
wird weitergeleitet an/bin/sh
/bin/sh
wird interaktiv ausgeführt und stderr wird auf stdout umgeleitet.- `die Ausgabe wird dann an nc weitergeleitet, das auf Port 1234 lauscht
- und die Ausgabe wird schließlich wieder an die benannte Pipe umgeleitet.
Wenn es ausgeführt wird und eine Verbindung zum Remote-Server über diesen Port (z. B. 1234) hergestellt wird, wird eine Shell-Eingabeaufforderung geöffnet und der Client kann beliebige Befehle ausführen. Aber wie funktioniert das auf diese Weise?
Antwort1
Ein solcher Befehl nutzt die IO-Umleitung und den interaktiven SH-Modus, der bei Anschluss an ein TTY standardmäßig aktiviert ist.
Beachten Sie, dass cat auf einem FIFO geöffnet bleibt. Das ist Ihr erster Hinweis. Wenn sh ausgeführt wird, leitet es nur seine Standardausgabe und Strerr an das TTY weiter. Stattdessen ist sh nicht an ein TTY angeschlossen. Normalerweise wechselt sh automatisch in den interaktiven Modus, wenn es an ein TTY angeschlossen ist, aber da dies nicht der Fall ist, wird die Option -i hinzugefügt. Dies bedeutet, dass es weiterhin Eingaben für neue Befehle entgegennimmt. Die Ausgabe dieser Befehle wird an die Standardausgabe von nc weitergeleitet und die Ausgabe von nc (also die Befehle, die über das Netzwerk eingehen) wird an das FIFO umgeleitet.
Das FIFO wird im Wesentlichen als benannte Pipe verwendet, um den Umleitungsring zu vervollständigen.
Sie können es sich einfacher so vorstellen, dass sh und nc in einer Schleife zueinander weiterleiten. Der Rest des Befehls ist nur leeres Geschwätz.