[pwnable.kr] cmd1(1 pts) :: Write-Up

두비니

·

2020. 7. 18. 19:59

 

 

Mommy! what is PATH environment in Linux?

 

ssh cmd1@pwnable.kr -p2222 (pw: guest)

 

 

 

환경변수 관련한 문제인가 보네요.

접속합시다.

 

 

 

우선 PATH라는 환경변수에다가 /thankyouverymuch를 집어넣고,

argv[1]을 filter함수에 넣어서 함수의 리턴값이 0이여야 하네요.

filter함수는 들어온 문자열에 flag, sh, tmp가 있는지 확인합니다.

 

 

그러면 putenv("PATH=/thankyouverymuch");가 실행되면서 일어나는 일에 대해서 생각해봅시다.

 

우선 왜 환경변수를 이용할까요?

환경변수는 일종의 즐겨찾기입니다.

우리가 가장 많이 쓰는 리눅스 명령어인 cat, ls, 등등은 모두 bin이라는 폴더 안에있는 명령입니다.

그러면 원래는 /bin/cat, /bin/ls의 방식으로 실행시켜야 하지만, cat이나 ls로 실행시켜도 실행이 됩니다.

이는 PATH에 이미 /bin이라고 명시되어있기 때문입니다.

 

그럼 지금 상황을 파악해보고 공격 시나리오를 구상해봅시다.

 

결국 우리가 하고싶은 일은 main함수 안에서 system(cat flag); 가 이뤄졌음 하는 것이겠죠?

그러나 지금 상황은 PATH가 /thankyouverymuch로 설정되어있기 때문에 argv[1]에 cat flag를 넣는다 한들

/thankyouverymuch/cat flag가 될 뿐더러, 그전에 filter함수에서 걸리게 됩니다. (flag때문에)

 

그러면 우선 cat은 /bin/cat을 통해 절대경로로 선언해주고, *라는 필터링을 이용해 줄 것입니다.

*은 와일드카드라는 뜻으로, fl* 로 입력하면 'fl로 시작하는 모든 파일에 접근해줘'는 뜻이 됩니다.

 

그래서 이를 이용하면

 

 

짜잔! 잘 풀리게 됩니다.

이거 말고도 직접 환경변수를 선언해주는 방법도 있는데요,

 

 

이렇게 선언하면 변수에 sh, tmp, flag가 포함되지 않는 한 문제풀이가 가능합니다.

 

다음!