with_sudo.bin
다음 소스 코드와 함께 setuid 루트 바이너리가 있습니다.
/* with_sudo.c */
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
printf("\n\n ruid : %d \n euid : %d \n\n", (int)getuid(), (int)geteuid());
system("/usr/bin/sudo cat /root/key.txt");
return 0;
}
akshay@bluebox ~ $ ls -l with_sudo.bin
-rwsr-sr-x 1 root root 8684 Feb 1 22:09 with_sudo.bin
setuid 루트 바이너리이지만 sudo 비밀번호가 요청됩니다.
akshay@bluebox ~ $ ./with_sudo.bin
ruid : 1000 euid : 0
[sudo] password for akshay:
sudo
in 없이 다른 바이너리를 system()
실행하면 수퍼 유저 권한으로 실행됩니다.
/* without_sudo.c */
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
printf("\n\n ruid : %d \n euid : %d \n\n", (int)getuid(), (int)geteuid());
system("cat /root/key.txt");
return 0;
}
akshay@bluebox ~ $ ls -l without_sudo.bin
-rwsr-sr-x 1 root root 8677 Feb 1 22:09 without_sudo.bin
akshay @ bluebox ~ $ ./without_sudo.bin
루이 드 : 1000 euid : 0
::: this_is_a_secret_key :::
이 때 Real UID
만들어진 0
와 함께 Effective UID
사용하여 setreuid(geteuid(), 0);
, 이진은 비록 sudo는 암호를 묻지 않고 수퍼 유저 권한으로 실행 sudo
하였다.
/* with_sudo_ruid_elevated.c */
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
setreuid(0, geteuid());
printf("\n\n ruid : %d \n euid : %d \n\n", (int)getuid(), (int)geteuid());
system("/usr/bin/sudo cat /root/key.txt");
return 0;
}
나는 한 읽고 그가 EUID
특정 작업을 수행하는 프로세스의 권한을 평가하는 데 사용됩니다. 그런 이유 sudo
에 근거 sudo는 암호를 입력하라는 메시지가 RUID
(가)에도 EUID
있다 0
?
EUID 0
및 비 루트는RUID
?