SetUID 는 파일이 실행되는 동안에 해당 파일 소유자의 권한을 획득하는 것을 의미한다. 만약 소유자가
root라고 가정을 하면 root의 권한을 가진 일반 사용자가 해킹에 이용을 할 수 있단 소리다.
SetUID를 이용해서 백도어를 만들 수 있고, 백도어가 있는 곳을 내 마음대로 오갈 수 있는 통로가 된다.
* 특수권한 (SetUID, SetGID, Sticky Bit)
: http://brothernsister.tistory.com/32
SetUID를 기본적으로 테스팅을 해보면 아래의 간단한 프로그래밍으로 테스트를 해본다.
SetUID를 사용학 위해선 unistd.h, sys/types.h 헤더파일이 필요하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> int main(int argc, char **argv) { if(argc != 2) { printf("Usage: %s [user id]\n",argv[0]); printf("*** user id is number ***\n"); return 1; } printf("real user id:%d effective user id:%d\n",getuid(), geteuid()); uid_t uid=atoi(argv[1]); setuid(uid); printf("real user id:%d effective user id:%d\n",getuid(), geteuid()); return 0; } | cs |
컴파일을 하고 터미널 창에 아래의 명령어를 입력해준다.
$ whoami
$ grep 사용자ID /etc/passwd
터미널을 이용해서 간단한 명령어를 입력하면 아래의 화면이 출력이 된다.

/etc/passwd
root:x:0:0:root:/root:/bin/bash
① ②③④ ⑤ ⑥ ⑦
① 필드 1 : 사용자명
② 필드 2 : 패스워드(/etc/shadow 파일에 암호화되어 있음)
③ 필드 3 : 사용자 계정 uid
④ 필드 4 : 사용자 계정 gid
⑤ 필드 5 : 사용자 계정 이름(정보)
⑥ 필드 6 : 사용자 계정 홈 디렉토리
⑦ 필드 7 : 사용자 계정 로그인 쉘
그리고 지금 로그인한 계정 말고, 다른 계정을 만들거나 다른 계정의 정보도 위의 명령어를 이용해서 /etc/passwd 정보를 확인한다.
위의 컴파일한 프로그램을 권한을 준다.
$ chomod u+s es_setuid(프로그램명)
그리고 다른 계정으로 로그인을 한다.
$ su test
$ ./ex_setuid 1001
위의 명령을 입력하면 프로그램의 원 작성자의 uid가 셋팅되어있다.
그리고 밑에는 위의 프로그램을 리버싱을 한 것이다. 이건 다음 시간에...ㅎㅎㅎ


