2008-10-29 5 views
7

En un laboratorio de seguridad de la información en el que estoy trabajando, se me ha encomendado la ejecución de varios comandos con una sola llamada a "sistema()" (escrito en C , corriendo en Fedora). ¿Cuál es la sintaxis que me permitirá ejecutar más comandos que a través de system()? (La idea es que podría ejecutar código arbitrario a través de un programa que se ejecuta en un equipo remoto, si el programa interactúa con el sistema operativo a través del sistema() llamada.)Usando un sistema único() Llamada para ejecutar múltiples comandos en C

Es decir:

char command[] = "????? \r\n"; 
system(command); 
+0

menos que esté ejecutando en Windows, es probable que cause problemas en lugar de dar un beneficio del retorno de carro (\ r). Debería poder separar comandos por líneas nuevas, o puntos y comas, como otros han sugerido. –

+1

En términos de seguridad, permitir que programas remotos ejecuten comandos arbitrarios es un proceso complicado, en general. Es menos grave si el programa se ejecuta localmente con los privilegios del usuario remoto; si se ejecuta con algún tipo de privilegios elevados, es grave. –

Respuesta

13

Eso depende de la cáscara que se invoca para ejecutar los comandos, pero en general la mayoría de las cáscaras utilizan ; para separar comandos así que algo como esto debería funcionar:

command1; command2; command3 

[EDIT]

Como se mencionó en @dicroce, puede usar && en lugar de ;, lo que detendrá la ejecución en el primer comando que devuelva un valor distinto de cero. Esto puede o no ser deseado (y algunos comandos pueden devolver un valor distinto de cero en caso de éxito), pero si está tratando de manejar comandos que pueden fallar, probablemente no deba encadenar múltiples comandos en una llamada al sistema() ya que no tiene cualquier forma de determinar dónde ocurrió la falla. En este caso, su mejor opción sería ejecutar un comando a la vez o crear un script de shell que realice el manejo de errores apropiado y llamarlo en su lugar.

1

Una posibilidad viene inmediatamente a la mente. Se puede escribir todos los comandos a un script luego ejecutarlo con:

system ("cmd.exe /c \"x.cmd\""); 

o, ahora que me he dado cuenta de que se está ejecutando en Fedora:

system ("x.sh"); 
8

Uso & & entre sus comandos. Tiene la ventaja de que solo continúa ejecutando comandos siempre que devuelvan códigos de error exitosos. Ejemplo:

"cd/proc & & gato cpuinfo"

Cuestiones relacionadas