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"