level3번 문제이다.
먼저 Hint를 알아보자.

autodig의 소스코드와
"동시에 여러 명령어를 사용하려면?"
"문자열 형태로 명령어를 전달하려면?"
이다.
일단 먼저 소스코드를 분석해보면 strcpy에 dig이라는 것을 보고 dig 명령어에 관련된 것이라고 생각할 수 있다.
dig은 도메인 서버의 IP주소를 확인하는 프로그램으로 nslookup과 유사하다.
그러나 nslookup과의 차이는 dig은 기본적으로 유닉스 계열 운영체제에 탑재되어 있다는 것이다.
또한 dig 사용 시 "@쿼리할 DNS 서버의 IP" 옵션을 입력해야 한다.
(반드시는 아님, 옵션을 생략하더라도 사용 가능)
이제 소스 코드를 분석하면 흐름은 다음과 같다.
1. "dig @"라는 문자열을 cmd 배열에 넣는다.
2. "dig @" 문자열 뒤에 autodig 명령어 다음에 입력된 문자열을 붙인다.
3. "dig @입력받은 문자열" 뒤에 " version.bind chaos txt"라는 문자열을 붙인다.
이제 파일을 찾아보도록하자.

그리고 실행을 시켜보면 다음과 같이 잘 실행되는 것을 알 수 있다.

다시 힌트와 소스코드를 보면 system() 함수에 여러 개의 명령을 실행할 수 있게
문자열을 전달하는 해야 한다는 것을 이해할 수 있다.
그럼 dig이라는 명령어를 통해 여러개의 명령어가 실행되는지 부터 확인을 해보자.

세미콜론(;)을 이용하여 명령어를 여러개 동시 실행하였고 id라는 명령어가 실행됨을 알 수있다.
그럼 문자열은 " " 로 묶어주면 되는 일이니 문제를 해결할 수 있을 방법을 떠올릴 수 있다.

level 4의 SetUID가 걸려 있기 때문에 my-pass 명령어를 통해 Password가 출력되는 것을 볼 수 있다.
또 다른 방식으로 이러한 일이 가능하다면 백도어를 심을 수도 있다는 것을 생각 할 수 있다.
먼저 코딩을 해보자.

그리고 gcc 명령에 -o 옵션을 이용하여 컴파일 시킨다.
여기서 주목해야할 점은 level4 권한으로 컴파일 하기 때문에 level 4 의 소유자로 프로그램이 만들어진다는 것이다.

그리고 SetUID 권한을 설정한 후 실행을 시키면 level4의 권한을 획득 할 수 있다.

'CTF > FTZ' 카테고리의 다른 글
FTZ - Level 5 (0) | 2019.07.14 |
---|---|
FTZ - Level 4 (0) | 2019.07.13 |
FTZ - Level 2 (0) | 2019.07.11 |
FTZ - Level 1 (0) | 2019.07.11 |
FTZ 서버 구축하기 (0) | 2019.07.11 |