이번엔 FTZ level3 문제를 풀어보았다.
힌트를 확인해 보았는데 추가힌트가 두 개 더 있다.
# 1. 동시에 여러 명령어를 사용하려면?
-> 유닉스 계열에서는 세미콜론 ( ; ) 을 이용해서 여려 명령어를 수행 할 수 있다.
2. 문자열 형태로 명령어를 전달하려면?
-> 큰 따옴표 ( " " ) 를 사용해서 문자열 형태로 명령어를 전달 할 수 있다.
힌트로 나와있는 소스를 분석해보자.
1. 입력값을 받고 인자가 2개가 아니라면 오류를 출력한다.
2. strcpy 명령어를 사용해 cmd 에 dig@ 를 복사하고,
strcat 명령어를 사용해서 dig@ 뒤에 argv[1](입력받은 값), version.bind chaos txt 를 이어붙인다.
=> cmd = dig@ argv[1] version.bind chaos txt
3. system() 명령어를 사용하여 cmd 를 호출, 수행한다.
-----------------------------------------------------------------------------------------------------------------------------------분석이 다 끝났으니 공략을 해보자.
우선 level4의 권한을 갖고있는 파일을 찾아보자.
autodig 라는 파일이 있다. 처음 힌트에도 코드의 이름이 autodig라고 나와있기도 하다.
추가 힌트를 사용해서 level4의 pw를 알아내 보자.
level4 암호 : suck my brain
# argv[1] 부분에 ;my-pass 를 넣었기에 cmd = dig @;my-pass version.bind chaos txt 가 되었다.
이후에 dig @;가 실행, dig: Couldn't find server '': Name or service not known 라는 오류가 발생했고,
my-pass가 실행되어 Level4 의 암호인 "suck my brain" 가 출력되었다.
'[Pwnable] 해커스쿨 FTZ' 카테고리의 다른 글
[해커스쿨 FTZ] Level6 (0) | 2020.03.02 |
---|---|
[해커스쿨 FTZ] level5 (0) | 2020.03.02 |
[해커스쿨 FTZ] Level4 (0) | 2020.03.02 |
[해커스쿨 FTZ] level2 (0) | 2020.02.18 |
[해커스쿨 FTZ] Level 1 (0) | 2020.02.18 |