¿Cómo funciona este command? mkfifo / tmp / f; cat / tmp / f | / bin / sh -i 2> & 1 | nc -l 1234> / tmp / f

Hoy estaba leyendo la página del hombre nc y tropecé con este command. Yo sé eso:

  • mkfifo /tmp/f está creando una tubería con nombre en / tmp / f .

  • cat /tmp/f está imprimiendo todo lo que está escrito en esa tubería con nombre y la salida de cat /tmp/f se canaliza a /bin/sh

  • /bin/sh está ejecutando de forma interactiva y stderr se networkingirige a stdout.
  • `la salida luego se canaliza a nc que está escuchando en el puerto 1234
  • y el out put finalmente se networkingirige a la tubería con nombre de nuevo.

cuando se ejecuta, se conecta al server remoto en ese puerto, es decir, 1234 abre un intérprete de commands de shell y el cliente puede ejecutar commands arbitrarios. Pero, ¿cómo funciona de esa manera?

Tal command se está aprovechando de la networkingirección IO y el modo interactivo sh que está activado por defecto cuando se conecta a un TTY.

Tenga en count que el gato permanece abierto en un FIFO. Esa es tu primera pista. Cuando sh ejecuta todo lo que hace es dirigir su stdout y strerr al TTY. En cambio, sh no está conectado a un TTY. Normalmente, sh entra automáticamente en modo interactivo cuando está conectado a un TTY, pero dado que no se agrega la opción -i. Esto significa que continuará recibiendo inputs para nuevos commands. La salida de esos commands se dirige al stdin de nc y la salida de nc (que son los commands que llegan a través de la networking) se networkingirige al FIFO.

El FIFO se está utilizando esencialmente como un conducto con nombre para completar el anillo de networkingirección.

Puedes pensarlo de forma más sencilla cuando sh y nc se networkingireccionan entre sí en un bucle. El rest del command es pura pelusa.