2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level2 풀이과정
level3의 힌트를 보자.
앞서 푼 문제들과 달리 긴 힌트문이 출력되었다.
하나의 소스코드가 보이고, 'more hints'라 하여 2개의 힌트가 더 보인다.
소스코드를 보니 간단한 프로그램이다.
1. 하나의 인자값을 받는다. 2. 100바이트의 cmd배열을 만든다. 3. cmd에 "dig @"문자열을 복사한다. 4. 입력받은 인자값을 cmd에 붙여넣는다. 5. " version.bind chaos txt"문자열을 cmd에 붙여넣는다. 6. cmd의 문자열을 실행한다. |
아주 간단한 소스코드이다.
예를들어 "./autodig helloworld"라고 실행을 하면,
cmd라는 배열에 "dig @helloworld version.bind chaos txt"라고 값이 들어갈것이고, 해당 문자열을 실행 하게 되는 것이다.
그렇다면 dig라는 프로그램이 해당 옵션들이 들어간 상태로 실행된다는 것인데..... dig가 뭐지? 라는 생각을 했다.
일단 autodig 라는 파일의 위치와 정보를 보기로 했다.
역시나 level1, level2와 마찬가지로 다음 level의 소유권으로 setuid가 설정되어 있었다.
그렇다면 역시 autodig를 이용해서 'my-pass'명령어를 실행시키면 되겠군?
그러면 어떻게 실행시키지?
이제 dig라는 명령어가 뭘하는 명령어인지, 또 2가지의 힌트에 대해서도 생각해보게 되었다.
일단 2가지 힌트중 1가지를 이미 알고 있어서 먼저 접근해 보기로 했다.
동시에 여러 명령어를 사용하려면 ';(세미콜론)'를 사용하면 된다는 것을 알고 있었다.
예를 들어서 'cd /tmp' 명령어와 'ls -l'명령어를 한번에 실행 시켜보자.
먼저 'cd /tmp'명령어가 실행되고 'ls -l'명령어가 실행되는 것을 볼 수 있다. 이렇게 ';'를 이용하면 한번에 두가지 이상의 명령어를 실행 시킬 수 있다.
그렇다면 문자열 형태로 명령어를 전달한다는 것이 뭘까? 문자열이라고 해서 보통 문자는 작은따옴표로 묶고 문자열은 큰따옴표로 묶기 때문에 큰 따옴표로 묶으면 되나? 싶었다.
일단 'autodig'를 실행 시켜 보았다.
'Hello'라는 인자를 넘겨주었더니, 아무런 반응을 하지 않았다. 'my-pass'명령어를 넘겨볼까?
역시나... 그럼 힌트를 종합해서 문자열 형태로 2개의 인자를 넘겨볼까?
응? 뭐지? 아무런 반응이 없나 싶어서 Ctrl+C를 누르니 갑자기 암호가 출력 되었다.
먼가 싶어서 다시 해보니 값을 입력하고 어느정도 시간이 지나야 실행이 완료 되는것이였다. (성격이 급해서 아무값이나 막 넣었다는...)
먼가 얻어 걸려서 풀린거 같은 기분이 들어서 다시 풀어 보기로 했다. =_=;;
다시 'hello'라는 인자를 넣고 차분히 기다려 보기로 했다.
역시... 기다려보니 하나의 에러 메시지가 출력되었다. 뭔가 서버를 찾을수 없는데 서버 이름이 hello(?)
여기서 dig라는 명령어가 어떤 서버를 찾는(?) 뭐 그런...? 건가 싶어서 dig를 검색해 보았다.
dig 명령어 : http://www.sosnote.com/58
dig 명령은 DNS 네임서버 구성과 도메인 설정이 완료된 후, 일반 사용자의 입장에서 설정한 도메인네임에 대한 DNS 질의응답이 정상적으로 이루어지는 지를 확인 점검하는 경우에 사용된다... 라고 한다...
결구 이번 문제는 'autodig'라는 파일에 setuid가 설정되어 있었고, 해당 프로그램을 level4로 실행되어 있는 상태에서 'dig'명령어와 'my-pass'명령어를 동시에 실행시키면 되는 그런 문제 였던거 같다... (뭔가.. 얻어 걸린 느낌...)
2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level2 풀이과정