본문 바로가기

FTZ. System Hacking

level4 - system()함수의 위험성

level3

 

# 코딩을 보면 인자가 1개가 아니면 에러를 출력하고 프로그램을 종료(exit(0))한다.

- argc는 명령어를 포함하기 때문에 인자는 하나라는 뜻이 된다.

# "dig @argv[1] version.bind chaos txt"의 문자열이 명령어로써, system에 의해 실행된다.

# 파일 명이 제시 돼있으니, find / -name autodig 2> dev/null로도 찾을 수 있다.

# 동시에 여러 명령어를 사용하려면 ; 를 사용하면 된다.

# 문자열 형태로 명령어를 전달하려면 " "를 사용하면 된다.

 

 

# 먼저, nslookup과 dig에 대해 간단하게 알아보자.

1). nslookup 

- 도메인 서버의 IP 주소를 확인하는 프로그램으로, 원도우 운영체제에도 있다.

- 사용법 : nslookup <IP를 알고 싶은 도메인 주소>

# 해당 주소가 2개가 나오는 것을 확인할 수 있다.

 

2). dig

- nslookup과 동일하게 도메인의 IP주소를 확인하는 프로그램이다.

- nslookup보다는 좀 더 상세한 정보가 포함돼 있다.

- 명령어 : dig "@쿼리할 DNS 서버의 IP" 도메인주소

▶ 분석 결과 확인

#/bin/autodig 168.126.63.1

 

# dig @168.126.63.1 version.bind chaos txt

# 둘의 결과가 같음을 알 수 있다.

 

▶ more hints로 문제 해결

- 동시에 여러 명령어를 사용하려면?    -->  ;

- 문자열 형태로 명령어를 전달하려면?   --> " "

 

 

# 문자열 형태로 명령어를 전달했다. 쌍따옴표를 이용해 인자값 2개를 하나로 묶어줌으로써 /bin/autodig 프로그램에 하나의 인자를 전달한 것처럼 할 수 있다.

 

# dig @168.126.63.1 www.naver.com version.bind chaos txt 와 동일하게 적용된다.

# 실행 결과를 보면 www.naver.com에 대한 질의 결과도 있고, KT서버(168.126.63.1)에 대한 BIND 버젼 조회 결과도 있다.

  

 

 

 

이제,  ; 를 이용해서 동시에 명령어를 전달해 보자.

# /bin/autodig "168.126.63.1 www.naver.com;/bin/bash;"가 내부적으로 어떻게 작동하는지 생각해 보자.

1). dig @168.126.63.1 www.naver.com; 여기까지 실행됨으로써 www.naver.com의 ip주소를 구한다.

2). /bin/bash; 를 실행 한다.

- 여기서 문제는 해결 된다

3). version.bind chaos txt;를 실행한다.

 

# 1번과 2번은 실행이 되지만, 독립적인 version.bind의 명령어는 없기 때문에 배쉬 쉘이 끝나고 명령어를 찾을 수 없다는 에러 메세지가 출력된다.