시스템/시스템 보안

[문제 풀이로 배우는 시스템 해킹 테크닉] level3. system()함수의 위험성

비니화이팅 2017. 12. 1. 15:43

이 문제를 풀기 전에 먼저 알아야 할 것은 dig 이다.

dig는 nslookup과 동일하게 도메인의 IP주소를 확인하는 프로그램이다.(기본적으로 유닉스 계열 OS에 탑재돼 있음)

dig 사용법은 아래와 같다.

dig @서버IP 도메인주소 

version.bind chaos 옵션은 DNS서버 버전을 확인할 수 있는 옵션이다.

(요즘에는 BIND설정에서 버전 요청에 대해 회신하지 않도록 설정하고 있으므로 취약한 DNS서버가 아니면 BIND버전에 대한 회신이 없다.)


이번에도 hint파일을 열어 힌트를 얻어본다.


그럼 아래와 같은 힌트를 얻을 수 있다.

소스코드의 흐름을 보면

먼저 "dig @"라는 문자열을 cmd배열에 넣는다.

"dig @"문자열 뒤에 autodig 명령어 다음에 입력된 문자열을 붙인다.

"dig @입력받은 문자열" 뒤에 "version.bind chaos txt"문자열을 붙인다.


즉 dig @xxx.xxx.xxx.xxx version.bind chaos txt라는 문자열이 조합된다.

따라서 autodig명령은 입력받은 문자열에 해당하는 DNS 서버에서 운영중인 BIND프로그램의 버전을 확인하는 명령을 실행한다.


힌트에 나와있는 소스의 파일명이 autodig라고 했으니 find 명령어로 찾아본다.

find / -user level4 -perm -4000 2> dev/null을 사용해도 된다.


" "을 이용하여 인자를 여러 개 전달 할 수 있고,

;로 구분하여 동시에 여러 명령어를 사용할 수 있다.

따라서 아래의 둘 중 하나의 명령어를 입력하면 첫번째로 dig@168.126.63.1 두번째로 my-pass(또는 sh) 세번째로 version.bind chaos txt명령이 실행되어야 하지만 version.bind라는 명령은 없으므로 세번째를 제외한 첫번째, 두번째 명령이 실행된다.