ID : level3

password : can you fly?

 

1) id 를 입력하여 정보를 확인한다

" 유저 아이디는 level3 이고, 그룹 명과 내가 속한 그룹은 level3 이다 "

 

2) 마찬가지로 cat hint 를 통해 다음관문의 문제를 확인한다.

코드를 분석하면 다음과 같다.

strcpy : 문자열 복사하여 붙여넣기

strcat : 문자열 덧 붙이기

 

cmd 문자열에는 다음과 같은 문자열이 입력될 것이다.

cmd = "dig @ argv[1] version.bind chaos txt"

 

이 문자열은 명령어 형식으로 보이기 때문에 dig 명령어에 대해 검색을 해본 결과

dig [@server] [name] [query type] ==> 도메인의 동일한 IP주소를 알아내기 위한 명령어

- server 는 dns를 질의할 네임 서버를 지정하며 이 옵션을 지정하지 않으면 /etc/resolv.cof를 참조하여 질의한다.

- query type은 아래 중 하나가 올 수 있다.

a :  network address

any :  all query

mx :  mail exchanger

soa : zone file의 SOA 정보

hinfo :  host info

axfr : zone transfer

txt :  txt 값

 

3) 일단 해당 파일이 어느 디렉토리에 있는지 확인하기 위하여

find / -perm -4000 -user level4 2>/dev/null 를 입력한다

/bin/autodig 에 있는것을 확인할수 있다.

 

 

4) cd 명령어를 통해 /bin 디렉토리로 이동

 

 

5) 파일에 대한 정보를 확인한다.

 

6) 일단 autodig 의 인자값을 아무값이나 주게되면 다음과 같이 출력이 된다.

해당 파일은 level4권한으로 setuid가 걸려 있기 때문에

해당 파일이 실행되는동안 password를 알수있는 my-pass 명령어를 사용하면 비밀번호를 획득할수 있을것이다.

 

7) 따라서 다음과 같이 autodig 아무말;my-pass 

를 입력하여  ;  세미콜론으로 명령어 구분을 해주고 한번에 실행되도록 지정해 본다.

 

8) password 가 출력되긴 하지만, level4의 비밀번호가 아닌, level3의 비밀번호가 출력되었다.

이유는 다음과 같다.

hint 에서도 나와있듯, 문자열 형태로 전달하지 않는다면

개별적으로 실행되기 때문에 하나의 명령어 수행후, setuid를 반납하고, 이후의 my-pass 명령어를 수행하기 때문에

level4에 대한 권한을 잃게 된다.

따라서 

문자열 형태로 전달해주기 위하여 

autodig " 아무말 ; my-pass " 로 명령어를 실행해 본다.

 

9) 위와 같은 형태로 명령어를 입력하면

 

10) 해당 autodig 파일이 실행되는 동안, 이 파일은 level4에 대한 setuid가 걸려있기 떄문에,

level4의 권한을 얻게되며, 그에 따라 my-pass 명령어를 통해 

level4의 비밀번호를 도출해 낼수 있다.

 

"suck my brain"

+ Recent posts