Bueno, como se documenta en Wikipedia y en la netcat
documentación, existe una -e
opción que hace que genere ( e xecute) un programa al recibir una conexión, conectando el socket a stdin, stdout y stderr del proceso. Ejemplo de uso:
nc -l -p
número_puerto -e
nombre_programa
Los ejemplos comúnmente se muestran /bin/sh
o bash
se usan como nombre_programa . Se desaconseja el uso de esta opción porque básicamente abre un portal de acceso anónimo y sin contraseña en su máquina. Por supuesto, esto se mitiga mediante el uso de un programa con menos poder que el shell (uno que no tiene la capacidad de escapar a un shell), minimizando su uso y manteniéndolo en secreto. Sin embargo, los desarrolladores originales netcat
sintieron con la suficiente firmeza que esta opción era una mala idea de que la deshabilitaron por defecto y la condicionaron bajo la opción de compilación "GAPING_SECURITY_HOLE". Esto se menciona brevemente en este Tutorial de NetCat y otra netcat
documentación.
Una búsqueda en Google me llevó a debatir este problema en otros sitios de Stack Exchange: desbordamiento de pila y falla del servidor . Múltiples contribuyentes ofrecieron la siguiente técnica para hacer lo mismo sin usar la -e
opción (es decir, en una versión netcat
que tiene la -e
opción deshabilitada):
En el servidor:
mkfifo
pipe_name
nc -l -p
número_puerto <
pipe_name |
nombre_programa >
pipe_name
En el cliente:
nc
server_machine_name
número_puerto
Un par de notas:
- En algunas versiones de
netcat
, -l
implica -p
, por lo que debe decir justo -l
y luego el número de puerto.
- Es posible que desee envolver su solución en un
while true
bucle.