Eu tenho acesso a uma pasta como grupo (incluindo senha). Existem dois arquivos: file & segredo: estas são as permissões:
-rwsr-sr-x 1 root root 8.9K Apr 29 2016 file
-r--r--r-- 1 root root 944 Apr 28 2016 file.c
-rw------- 1 root root 33 May 14 22:31 secret
Eu devo obter o conteúdo do segredo. Parte do arquivo.c é o seguinte código:
{
if(argc !=2){
printf("%s [executable to run on the grid]\n",argv[0]);
exit(0);
}
FILE *fp = fopen("key", "r");
if (getuid() == 0) {
/* process is running as root, drop privileges */
initgroups("filepointers",1003);
if (setgid(1003) != 0)
printf("setgid: Unable to drop group privileges:");
if (setuid(1003) != 0)
printf("setuid: Unable to drop user privileges:");
}
Depois disso, ele abre o segredo e os garfos + execls - deixei de fora algum código irrelevante.
if (pid ==0){
int error = execl(argv[1],"command",NULL);
if(error ==-1)
perror("execl");
}
exit(0);
}
Alguma ideia de como superar as permissões? Sudo seria a resposta lógica, mas desde que não está dentro de minhas permissões, não é uma opção. Eu acho que preciso fazer algo com setuid - mas não faço ideia de como. Qualquer dica seria apreciada. :)