system("ls -l");
o
system("pwd"); en fin, algo asi bien bobo..pues bueno, la manera de hacer lo que necesitaba fue esta:
char nombre[100]; //aca iran guardados los comandos
char *ptr_nombre; //puntero a la cadena anterior
ptr_nombre=&nombre[0]; //le da direccion al puntero
const char *comando=ptr_nombre; /*necesario para la funcion system(), este es el tipo de argumentos que recibe la funcion.
es un puntero a una constante, de modo que el valor en ptr_nombre no puede cambiar, entonces lo que cambia es lo apuntado por ptr_nombre*/
fflush(stdin); // limpia el buffer de teclado
printf("\tIntroduzca Comando:\n");
fflush(stdin); // limpia el buffer de teclado
gets(nombre); //guarda el string en la direccion de nombre
system(comando); //ejecuta el comando que esta guardado en la cadena apuntada por ptr_nombre
Espero haya sido claro.
Si este programa este codigo lo usara alguien en un servidor, seria vulnerable a un ataque de buffer overflow. Pues si un usuario ingresa a tu programa un comando de tamaño superior a 100 caracteres, se sobreescribe el vector, se sobreescribe la direccion que se encuentra la pila y por ende se puede tomar el control de la aplicación. La función system ademas no debe ser utilizada, es mejor utilizar execve, ademas que gets si que no debe ser utilizada, y menos cuando no estas controlando el tamaño de la entrada
ReplyDelete[...] Funcion system() febrero, 2008 1 comentario 3 [...]
ReplyDelete