저는 현재 로그인되어 있고 Ubuntu 시스템에서 test.c를 실행한 후 라이센스를 seed
받았습니다 . 왜 그런 변화가 일어날 수 있었는지 root
궁금합니다 .system("/bin/sh")
먼저 su root
test.c를 and로 컴파일 합니다. #을 종료하면 파일을 실행하고 가져옵니다.#
chmod 4755 test
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)
- - 갱신 - - -
[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
답변1
먼저 프로그램을 루트로 컴파일하므로 결과 바이너리는 루트가 소유하게 됩니다.
[04/03/2018 06:04] seed@ubuntu:~/Desktop/assignment$ ls -l test
-rwsr-xr-x 1 root root 7198 Apr 3 05:56 test
# ^^^^
둘째, 다음 을 실행하여 chmod 4755 test
설정합니다.설정값가리키다 ./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
# ^
즉, 바이너리는 이를 실행한 사용자가 아닌 파일 소유자(=루트)로 실행됩니다. 그렇기 때문에 /bin/sh
생성된 것들도 루트에 의해 실행됩니다.