서브웨이

pwnable.kr cmd1 풀이 본문

Pwnable/pwnable.kr

pwnable.kr cmd1 풀이

샌드위치메이커 2020. 8. 24. 16:33

리눅스 터미널에서 환경변수를 조작하는 문제인가봅니다.

한번 봅시다.

평범하네요.

 

그럼 일단 소스코드를 봅시다.

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

매우매우 짧습니다. 빠르게 읽어봅시다.

대충 읽어보니 PATH 환경변수를 /thankyouverymuch라는 경로로 설정하여 초기화하고, 인자로 넘긴 문자열 A에 flag, sh, tmp가 존재하는지 확인하고 존재하지 않으면 문자열A를 system 함수로 사용하여 그대로 실행합니다.

 

일단 PATH 환경변수는 명령어를 간편하게 사용하기 위해 존재합니다. 예를 들어, cat명령어의 경우 본래 위치는 /bin/cat이지만 /bin이 PATH 환경변수에 등록이 되어있으므로 간단히 cat을 입력하여 사용이 가능합니다.

하지만 문제에서는 PATH 환경변수를 /thankyouverymuch라는 경로로 설정함으로써 /bin 경로가 삭제됩니다.

그럼 우리가 해야할일은 그냥 간단히 "/bin/cat flag"을 입력하면 되겠죠?

그런데 flag라는 문자열은 필터링되므로 flag라는 문자열을 사용하지 말고 flag 파일을 실행해야합니다.

이것도 간단히 접근해서 *(와일드카드) 문자를 사용해서 우회합시다. 와일드카드는 다들 사용법을 아시리라 생각합니다.

 

짜잔

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

pwnable.kr uaf 풀이  (0) 2020.08.26
pwnable.kr cmd2 풀이  (0) 2020.08.24
pwnable.kr lotto 풀이  (0) 2020.08.21
pwnable.kr blackjack 풀이  (0) 2020.08.19
pwnable.kr coin1 풀이  (0) 2020.08.18
Comments