2011-01-20 22 views
13

Supongamos que tenemos un shell ejecutándose en el terminal, digamos,/dev/pts/1. El shell ya se está ejecutando y no podemos reiniciarlo.Linux: escriba un programa en C que 'controla' un shell

Ahora queremos escribir un programa en C que 'controlará' el shell, es decir, que proporcionará una interfaz similar al shell para el usuario, leerá la entrada del usuario, pasará al shell real en/dev/pts/1, haga que lo ejecute, lea el resultado del shell e imprímalo de nuevo al usuario.

sé cómo hacer la mitad de esta tarea: Sé cómo obtener la entrada del usuario e inyectar esta entrada a la 'cáscara real':

#include <fcntl.h> 
#include <sys/ioctl.h> 
#include <stdio.h> 

#define SIZE 100 

int main(int argc, char** argv) 
{ 
if(argc>1) 
    { 
    int tty = open(argv[1], O_WRONLY|O_NONBLOCK); 

    if(tty!=-1) 
    { 
    char *buf,buffer[SIZE+1]; 

    while(1) 
     { 
     printf("> "); 
     fgets(buffer, SIZE, stdin); 
     if(buffer[0]=='q' && buffer[1]=='u' && buffer[2]=='i' && buffer[3]=='t') break; 
     for(buf=buffer; *buf!='\0'; buf++) ioctl(tty, TIOCSTI, buf); 
     } 

    close(tty); 
    } 
    else printf("Failed to open terminal %s\n", argv[1]); 
    } 

return 0; 
} 

Lo anterior pasará en su entrada a shell se ejecuta en terminal (dar su nombre en el primer argumento) y hacer que el shell lo ejecute. Sin embargo, no sé cómo leer el resultado del shell ahora.

¿Algún consejo?

+2

¿Has intentado leer desde el tty? –

+19

¿Es esta tarea o rootkit? – Kimvais

+1

@Kimvais En su formato actual, tendría que ejecutar este programa para pasar los comandos a través de este shell-on-shell; tendría que hacer mucho más que simplemente controlar un shell para escribir un rootkit. –

Respuesta

1

Hay programas que le permiten cambiar la terminal de control para un proceso: reptyr y injcode son dos de estos programas.

Creo que cortan el otro terminal, sin embargo, dependiendo de sus necesidades esto puede o no ajustarse exactamente.

4

Puede usar pipes para eso. Las conchas de Linux permiten la redirección.

Utilicé tuberías para controlar tty's.

Cuestiones relacionadas