cgy12306
[pwnable.kr] cmd1 본문
[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