[Pwnable.kr] cmd1 풀이 (1pt)
Wargame/pwnable.kr

[Pwnable.kr] cmd1 풀이 (1pt)

 

 

풀이

다은은 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;
}

 

filter 함수

매개 변수로 받은 cmd에 flag, sh, tmp라는 문자열이 하나라도 존재한다면 NULL byte를 리턴한다.

즉, flag, sh, tmp 문자열이 cmd에 존재하지 않아야 정상적으로 system 함수를 작동시킬 수 있다.

 

main 함수

환경변수 PATH의 값을 /thankyouverymuch로 만들어, 외부 명령어의 사용을 금지시킨다.

그 후, filter 함수에 argv[1]을 매개 변수로 넘겨준다. 만약, filter(argv[1])이 0이라면 프로그램을 종료한다.

아니라면, system( argv[1] ) 함수를 실행한다.


정말 간단하게 해결할 수 있는 문제다.

flag라는 문자열이 금지당했으므로, f*와 같은 형식으로 flag 문자열을 대체할 수 있을 것이다. (f* = f로 시작하는 문자열)

cat 명령어는 리눅스 외부 명령어이기 때문에 실행히 불가능하나, 절대 경로로 cat을 지정해준다면 사용할 수 있다.

완성된 argv[1]은 다음과 같다.

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

[Pwnable.kr] cmd2 풀이 (9pt)  (0) 2020.07.22
[Pwnable.kr] coin1 풀이 (6pt)  (0) 2020.07.22
[Pwnable.kr] lotto 풀이 (2pt)  (0) 2020.07.22
[Pwnable.kr] blackjack 풀이 (1pt)  (0) 2020.07.21
[Pwnable.kr] shellshock 풀이 (1pt)  (0) 2020.07.21