FTZ - Level 3

HelloMG
|2019. 7. 12. 12:53

level3번 문제이다.

먼저 Hint를 알아보자.

그림 1     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"라는 문자열을 붙인다.

 

이제 파일을 찾아보도록하자.

그림 2     Find 명령

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

그림 3     autodig 실행

다시 힌트와 소스코드를 보면 system() 함수에 여러 개의 명령을 실행할 수 있게

문자열을 전달하는 해야 한다는 것을 이해할 수 있다.

 

그럼 dig이라는 명령어를 통해 여러개의 명령어가 실행되는지 부터 확인을 해보자.

그림 4     여러 개 명령 수행

세미콜론(;)을 이용하여 명령어를 여러개 동시 실행하였고 id라는 명령어가 실행됨을 알 수있다.

그럼 문자열은 " " 로 묶어주면 되는 일이니 문제를 해결할 수 있을 방법을 떠올릴 수 있다.

그림 5     문제 해결

level 4의 SetUID가 걸려 있기 때문에 my-pass 명령어를 통해 Password가 출력되는 것을 볼 수 있다.

 

또 다른 방식으로 이러한 일이 가능하다면 백도어를 심을 수도 있다는 것을 생각 할 수 있다.

먼저 코딩을 해보자.

그림 6     소소코드

그리고 gcc 명령에 -o 옵션을 이용하여 컴파일 시킨다.

여기서 주목해야할 점은 level4 권한으로 컴파일 하기 때문에 level 4 의 소유자로 프로그램이 만들어진다는 것이다.

그림 7     backdoor 컴파일

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

그림 8     backdoor 실행

 

'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