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?
¿Has intentado leer desde el tty? –
¿Es esta tarea o rootkit? – Kimvais
@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. –