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

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

Hoy estaba leyendo la ncpágina de manual y me topé con este comando. Yo sé eso:

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

  • cat /tmp/festá imprimiendo todo lo que está escrito en esa canalización con nombre y la salida de cat /tmp/fse canaliza a/bin/sh

  • /bin/shse ejecuta de forma interactiva y stderr se redirige a stdout.
  • `la salida luego se canaliza a nc que está escuchando en el puerto 1234
  • y la salida finalmente se redirige nuevamente a la canalización nombrada.

cuando se ejecuta, conectarse al servidor remoto en ese puerto, es decir, 1234, abre un indicador de shell y el cliente puede ejecutar comandos arbitrarios. ¿Pero cómo funciona de esa manera?

Respuesta1

Este comando aprovecha la redirección de IO y el modo interactivo sh que está activado de forma predeterminada cuando se conecta a un TTY.

Tenga en cuenta que el gato permanece abierto en un FIFO. Esa es tu primera pista. Cuando sh se ejecuta, lo único que hace es dirigir su stdout y strerr al TTY. En cambio, sh no está adjunto a un TTY. Normalmente, sh entra automáticamente en modo interactivo cuando se conecta a un TTY, pero como no es así, se agrega la opción -i. Esto significa que seguirá recibiendo entradas para nuevos comandos. La salida de esos comandos se dirige a la entrada estándar de nc y la salida de nc (que son los comandos que llegan a través de la red) se redirige al FIFO.

Básicamente, el FIFO se utiliza como una canalización con nombre para completar el anillo de redirección.

Puedes pensar en ello de manera más simple como si sh y nc se redireccionaran entre sí en un bucle. El resto del comando es simplemente una tontería.

información relacionada