[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가 포함되지 않는 한 문제풀이가 가능합니다.
다음!
'War Games > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] uaf(8 pts) :: Write-Up (0) | 2020.07.20 |
---|---|
[pwnable.kr] cmd2(9 pts) :: Write-Up (0) | 2020.07.19 |
[pwnable.kr] lotto(2 pts) :: Write-Up (0) | 2020.07.14 |
[pwnable.kr] blackjack(1 pts) :: Write-Up (0) | 2020.07.13 |
[pwnable.kr] coin1(6 pts) :: Write-Up (0) | 2020.07.12 |