cgy12306

[pwnable.kr] cmd1 본문

Wargame/pwnable.kr

[pwnable.kr] cmd1

cgy12306 2020. 1. 27. 17:56

[cmd1]


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

putenv로 PATH 환경변수값을 thankyouverymuch로 변경한다.

PATH 환경변수는 명령어를 사용할 때 이곳을 참조한다.

filter함수를 호출하게되는데 argv[1]을 인자로 보낸다.

argv[1]을 cmd 변수로 받고, cmd 안에 flag라는 글자가 없으면 null을 반환하게되고 있으면 해당 주소를 반환하게 된다. 이 반환값을 가지고 0과 비교를 해서 r에 값을 더한다.

r을 반환하게 되는데 if문이 참이되면 return 0를 하기 때문에 결론적으로 cmd안에 flag, sh, tmp라는 값이 들어가면 안된다.

그러고나서 argv[1]로 받은 값을 인자로 system 함수를 호출한다.

argv[1]에 flag, sh, tmp만 안들어가면 되기 때문에 와일드 카드를 사용하면 된다.

?를 입력하면 한 글자에 아무런 값이 들어가도 된다는 뜻이다.

*를 입력하면 길이에 제한되지 않고 아무런 값이 들어갈 수 있게 된다.

'Wargame > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] asm  (0) 2020.01.27
[pwnable.kr] cmd2  (0) 2020.01.27
[pwnable.kr] lotto  (0) 2020.01.27
[pwnable.kr] blackjack  (0) 2020.01.27
[pwnable.kr ] coin1  (0) 2020.01.26
Comments