Supponiamo di avere una shell in esecuzione sul terminale, diciamo,/dev/pts/1. La shell è già in esecuzione e non possiamo riavviarla.Linux: scrivere un programma C che controlli una shell
Ora vogliamo scrivere un programma C che "controllerà" la shell, cioè che fornirà all'utente un'interfaccia simile a una shell, leggerà l'input dell'utente, passerà alla shell reale su/dev/pts/1, è necessario eseguirlo, leggere l'output della shell e stamparlo nuovamente all'utente.
so come fare la metà di questo compito: io so come raccogliere l'input dell'utente e iniettare questo ingresso al 'shell reale':
#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;
}
È possibile che questo passerà sul vostro ingresso a sborsare in esecuzione in terminale (date il suo nome nel primo argomento) e fate in modo che lo shell lo esegua. Tuttavia, non so come leggere l'output della shell ora.
Qualche consiglio?
Hai provato a leggere dal tty? –
Sono questi compiti o rootkit? – Kimvais
@Kimvais Nel suo formato corrente, dovresti eseguire questo programma per passare i comandi attraverso questa shell-on-shell - dovresti fare molto di più che controllare semplicemente una shell per scrivere un rootkit. –