-
lvl 03Wargame/HackerSchool FTZ 2019. 1. 5. 07:13
→ level 3 계정 로그인 후, hint 파일을 살펴본다.
→ 힌트를 정리하자면, 3가지이다.
- autodig 프로그램 소스 - "dig @[사용자 입력값] version.bind chaos txt"의 명령어를 수행하는 프로그램이다. (system 함수)
- 동시에 여러 명령어 사용법 - 동시에 여러 명령어를 수행하는법은 리눅스에선 | (버티컬 바)와, ;(세미콜론) 정도로 알고있다.
- 문자열 형태로 명령어 전달법 - 문자열 형태로 명령어 전달? 이건 아마 "(더블쿼터로) 묶는 걸 추측한다.
→ dig 명령어 사용법 및 옵션에 대한 조사를 진행한다.
→ 현재, 사용자 입력 값에 의해 실행되는 명령어는 dig @[입력 값] version.bind chaos txt 이므로, 입력 값 부분의 페이로드를 통해 level4의 my-pass를 알아내야 한다. 힌트는 여러 명령어를 한번에 실행하는 것과, 문자열 형태이다.
→ 먼저 파일을 찾는다. autodig 라는 파일 소스이므로, 해당 파일명으로 찾는다.
→ 해당 파일을 찾고 먼저 정상적으로 파일을 실행해본다. KT DNS(168.126.63.1)을 입력해서 dig 명령어에 대한 결과 값을 출력한다. 해당 입력 값에 내가 원하는 명령어를 삽입해야 하는데, 힌트를 염두한 삽입을 진행한다.
→ /bin/autodig 168.126.63.1;id;# 을 입력하면, id값이 출력되는데 레벨 3이 출력된다.
→ level4가 출력될 것으로 예상했지만, level3이 출력된다. 즉, 뒤에 붙힌 id 라는 명령어는 autodig 프로세스에서 실행된 명령어가 아니란 말이다. 그럼 level3계정으로 실행된건데, 가만히 생각해보면 168.126.63.1; 까지 autodig 프로그램의 파라미터로 전달되고 뒤의 id; 파라미터는, autodig 프로세스가 완전히 종료된 후, 추가적으로 실행된 것으로 추정할 수 있다. 따라서, id 명령어를 인자로 같이 전달해주기 위해 더블쿼터("")로 묶어서 보낸다.
→ 이제 정확히, level 4 계정의 권한으로 명령어를 실행할 수 있으므로, 비밀번호를 알아내기 위해 "168.126.63.1;/bin/bash;" 페이로드를 삽입한다.
→ my-pass를 실행한다.
댓글