2013-03-13 5 views
3

Linux 시스템에서 setuid 프로그램이있는 디렉토리의 권한이 커널이 프로세스를 시작하는 방법에 영향을 줍니까? 내가 물어 보는 이유는 두 개의 서로 다른 디렉토리에서 동일한 setuid 프로그램을 컴파일 할 때 실제로 한 디렉토리에서 사용자 권한 만 가정하기 때문입니다. 나는 /tmp/home/flag03에서 이것을 컴파일했습니다. 여기서 flag03은 액세스를 시도하는 사용자 계정입니다. /tmp에서 실행하면 예상대로 권한이 상승하지 않았지만 /home에서 작동했습니다.리눅스에서는 실행 파일의 위치가 setuid 비트가 해석되는 방식에 영향을 줍니까?


문제에 대한 몇 가지 배경 : 나는 exploit-exercises.com/nebula의 수준 03에서 일하고 있어요

. 이 연습을 수행하려면 flag03 사용자 계정에 대한 액세스 권한이 필요합니다. 연습은 flag03 사용자가 정기적으로 cronjob을 실행하여 특정 디렉토리에서 스크립트를 실행할 수 있도록 설정되어 있습니다. 내 계획은 bash 쉘을 시작하는 setuid 프로그램을 컴파일 할 간단한 bash 스크립트를 작성한 다음 chmod +s으로 setuid 비트를 설정하는 것이 었습니다. 아이디어는 setuid 프로그램이 컴파일 될 때, 사용자가 flag03에 의해 cronjob을 통해 컴파일된다는 것입니다. 이 새로 컴파일 된 프로그램이 실행되면 사용자 flag03으로 쉘을 시작하며 이것이 목표입니다. 여기

는 (레벨 1에 기초 l3.c, + 2) 단순하여 setuid 프로그램이다

이 작업을 위해서는
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 

int main(int argc, char **argv, char **envp) 
{ 
    uid_t uid; 
    gid_t gid; 

    uid = geteuid(); 
    gid = getegid(); 

    setresuid(uid,uid,uid); 
    setresgid(gid,gid,gid); 
    printf("uid: %d\n", getuid()); 
    printf("gid: %d\n", getgid()); 
    system("/bin/bash"); 

    return 0; 
} 

는 떠들썩한 스크립트는 사용자 flag03 같은 프로그램을 컴파일하고 chmods setuid 비트.

#!/bin/bash 

#gcc -o /tmp/l3 /tmp/l3.c 
#chmod +s,a+rwx /tmp/l3 
gcc -o /home/flag03/l3 /tmp/l3.c 
chmod +s,a+rwx /home/flag03/l3 

예상대로 권한을 상승하지 않습니다 /tmp에서 생성 된 실행하지만, 예상대로 /home/flag03 작품에서 생성 한.

참고 난 그냥 /home/flag03/tmp 컴파일 된이 setuid 프로그램의 버전을 이동 한 다음 setuid 비트를 재설정하기 위해 새로운 bash는 스크립트를 만들었습니다. 거기에서 실행될 때, 그 버전도 잘 작동했습니다. 따라서 setuid 프로그램이 상주하는 디렉토리의 권한은 프로세스가 시작되는 방식에 어떤 영향을 미친다. 어쩌면 이것은 다소 "특별한"디렉토리 인 /tmp과 관련이 있습니까?

이 긴 질문에 관심을 가져 주셔서 감사합니다.

+1

/tmp/l3 및/home/flag03/l3의 소유자를 확인할 수 있습니까? 그들은 둘 다 같은 소유자 flag03 또는 다른 사람 있습니까? –

+1

귀하의 질문은 스택 오버플로에 대한 약간의 [주제 해제] (http://stackoverflow.com/faq) 수 있습니다. 자매 사이트 인 http://security.stackexchange.com/ 또는 http://unix.stackexchange.com/에 더 적합 할 수 있습니다. –

+0

@ tian_yufeng 둘 다 같은 주인이있었습니다. 둘 다 같은 용도로 (그리고 나서 chmod'd로) 컴파일 되었기 때문입니다. –

답변

3

파일 시스템이 nosuid 옵션으로 마운트 된 경우 suid 비트는 해당 파일을 실행할 때 무시됩니다. 내가 이해하기에, /tmp은 일반적으로 nosuid 옵션으로 마운트 된 별도의 파일 시스템 (종종 tmpfs)입니다. 이 구성의 동기는 /tmp (예 : nobody)이 권한을 높이기 위해 정교한 다중 단계 공격에서 사용할 수있는 suid 바이너리를 생성 할 수없는 경우를 제외하고 쓰기 가능한 저장소가없는 손상된 계정을 차단하는 것입니다.