Puis-je diriger / rediriger une application console via netcat afin qu'elle puisse être utilisée à distance?

10

Est-il possible de «diriger» une instance d'une application console via netcat, afin que netcat écoute une nouvelle connexion et redirige la stdinet stdoutsur la connexion réseau.

jammmie999
la source
ouais mais ça pourrait être un liner, ce qui est bien, les tuyaux le sont. Je ne sais pas si vous pouvez dire nc et pipe à une instance déjà en cours d'exécution par pid. vous pouvez nc vers un ip et le diriger vers un nc qui écoute et le diriger vers un nc qui écoute etc et le diriger vers nc vers une ip.
barlop
J'ai changé le titre car ce que vous mentionnez ressemble plus à une redirection d' E / S qu'à l'utilisation d'un canal (qui ne concerne que le déplacement de la sortie d'un processus vers l' entrée d'un autre).
Percée le
@Breakthrough en quoi cela diffère-t-il des tuyaux? comme il parle de redirection IO et ne parle pas de fichiers, alors en quoi diffère-t-il de la tuyauterie?
barlop
@barlop I / O redirection ( <or >) est significativement différent de piping ( |), bien que vous puissiez parfois réaliser une opération équivalente avec un mélange des deux. Encore une fois cependant, avec la redirection d'E / S, vous pouvez modifier l'emplacement des deux flux; la tuyauterie redirige simplement la sortie standard d'un processus vers l'entrée standard d'un autre.
Percée le
@Breakthrough voyez ce que je vous ai demandé. > et <est bien sûr différent de la tuyauterie car <et> utilisent des fichiers. Mais il ne parle pas de fichiers. Je vous ai demandé "en quoi cette [redirection IO] diffère-t-elle des tuyaux? Comme il parle de la redirection IO et non des fichiers, alors comment est-ce différent de la tuyauterie?"
barlop

Réponses:

16

Eh bien, comme documenté dans Wikipedia et dans la netcatdocumentation, il existe une -eoption qui le fait générer ( e xecute) un programme à la réception d'une connexion, en attachant le socket à stdin, stdout et stderr du processus. Exemple d'utilisation:

nc -l -pport_number -eprogram_name

Les exemples montrent généralement /bin/shou bashsont utilisés comme nom_programme . L'utilisation de cette option est déconseillée car elle ouvre essentiellement un portail d'accès anonyme et sans mot de passe dans votre machine. Bien sûr, cela est atténué en utilisant un programme avec moins de puissance que le shell (un qui n'a pas la capacité de s'échapper vers un shell), en minimisant votre utilisation et en le gardant secret. Néanmoins, les développeurs originaux de netcatsuffisamment senti que cette option était une mauvaise idée qu'ils l'ont désactivée par défaut, et l'ont conditionné sous l'option de compilation "GAPING_SECURITY_HOLE". Ceci est brièvement mentionné dans ce didacticiel NetCat et dans d'autres netcatdocumentations.

Une recherche Google m'a conduit à des discussions sur ce problème sur d'autres sites Stack Exchange: Stack Overflow et Server Fault . Plusieurs contributeurs ont proposé la technique suivante pour faire la même chose sans utiliser l' -eoption (c'est-à-dire que dans une version netcatqui a l' -eoption désactivée):

Sur le serveur:
mkfifopipe_name
nc -l -pport_number <pipe_name   | program_name >pipe_name

Sur le client:
nc nom_machine_serveur  numéro_port

Quelques notes:

  • Sur certaines versions de netcat, -limplique -p, vous devez donc dire juste -l, puis le numéro de port.
  • Vous voudrez peut-être envelopper votre solution dans une while trueboucle.
Scott
la source