porque eu posso obter root após a execução do sistema (“/ bin / sh”) no arquivo c?

2

Eu estou atualmente logado como seed e depois de executar test.c, no meu sistema Ubuntu, eu recebo root permission. Estou apenas me perguntando por que system("/bin/sh") pode fazer uma alteração dessas?

Em primeiro lugar, eu su root e compilo test.c em # e também chmod 4755 test . Quando saio #, executo o arquivo e recebo root

[04/03/2018 05:27] seed@ubuntu:~/Desktop/assignment$ id
uid=1000(seed) gid=1000(seed) groups=1000(seed),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(s 
ambashare),130(wireshark),1001(vboxsf)
[04/03/2018 05:27] seed@ubuntu:~/Desktop/assignment$ cat test.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(){


system("/bin/sh");
printf("successful!");
return 0;


}
[04/03/2018 05:27] seed@ubuntu:~/Desktop/assignment$ ./test
# whoami
root
# id 
uid=1000(seed) gid=1000(seed) euid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare),130(wireshark),1000(seed),1001(vboxsf)

---- update -----

[04/03/2018 06:03] seed@ubuntu:~/Desktop/assignment$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug 13  2013 /bin/sh -> dash
[04/03/2018 06:04] seed@ubuntu:~/Desktop/assignment$ ls -l test
-rwsr-xr-x 1 root root 7198 Apr  3 05:56 test


[04/03/2018 06:14] seed@ubuntu:~/Desktop/assignment$ uname -a
Linux ubuntu 3.5.0-37-generic #58~precise1-Ubuntu SMP Wed Jul 10 17:51:56 UTC 
2013 i686 i686 i386 GNU/Linux
[04/03/2018 06:14] seed@ubuntu:~/Desktop/assignment$ ./test
# uname -a
Linux ubuntu 3.5.0-37-generic #58~precise1-Ubuntu SMP Wed Jul 10 17:51:56 UTC 2013 i686 i686 i386 GNU/Linux
    
por hei 03.04.2018 / 14:37

1 resposta

3

Primeiro, você compila seu programa como root, então o binário resultante é de propriedade de root:

[04/03/2018 06:04] seed@ubuntu:~/Desktop/assignment$ ls -l test
-rwsr-xr-x 1 root root 7198 Apr  3 05:56 test
#            ^^^^

Em segundo lugar, executando chmod 4755 test você definiu setuid bit em ./test :

[04/03/2018 06:04] seed@ubuntu:~/Desktop/assignment$ ls -l test
-rwsr-xr-x 1 root root 7198 Apr  3 05:56 test
#  ^

Isso significa que seu binário é executado como seu proprietário de arquivo (= root), não como usuário que o iniciou. É por isso que /bin/sh gerado por ele também é executado pelo root.

    
por 03.04.2018 / 15:49