메뉴 닫기

[FTZ] hackerschool level3

Level3 풀이

level3 계정으로 Login하면 마찬가지로 hint라는 파일이 존재한다.

열어보면 내용은 위와 같다.

코드 분석은 아래에서 따로 하기로하고.. 우선은 autodig라는 프로그램을 찾아서 level4 권한을 얻어야하는 내용인거같고 more hints에는 동시에 여러 명령어를 문자열로 전달하는 방법에 대해 알려주고있다.

우선은 autodig라는 파일을 찾아보자. 지금은 파일명이 있어서 find / -name으로 찾아도 되지만 이전 레벨들처럼 user와 perm으로 찾아도된다.

# find / -name autodig -ls
# find / -user level4 -perm -4000 -ls

그러면 같은결과가 나올것이다.

autodig 프로그램을 실행시키면 프로그램의 버전과 사용방법이 출력된다.
해당 프로그램은 dig라는 도메인 질의명령어를 조금 바꾼 프로그램인데
autodig [Host]를 입력하면 dig 명령어를 통해 해당 아이피에 대한 쿼리를 날린다.

중요한건 autodig 프로그램의 실행결과나 코드가 아니라 setuid가 걸려있는 실행파일이므로 해당 프로그램을 실행하는 동안에는 level4의 권한을 가지게된다.

위에서 확인했던 hints에서 답을 얻자면 아래와 같이 생각할 수 있다.

– 동시에 여러 명령어를 사용하려면?
명령어를 이어붙여주는 구분자를 사용해야한다. (; , || , && , | 등)
=> ;나 ||를 사용하면된다.

; = 앞의 명령어의 결과에 상관없이 뒤에 명령어를 실행한다
&& = AND의 의미로 앞의 명령어가 성공해야만 뒤에 명령어를 실행한다
|| = OR의 의미로 앞의 명령어가 실패하더라도 뒤에 명령어를 실행한다
| (파이프) = 특수기호로 앞의 명령어의 출력값을 뒤에 명령어의 입력값으로 사용한다

– 문자열 형태로 명령어를 전달하려면?
” ” 쌍따옴표로 명령어를 묶어준다 이유는 다음과 같다.

1# int main(int argc, char **argv) {
2#   char cmd[100];

4#   strcpy( cmd, "dig @" );
5#   strcat( cmd, argv[1] );
6#   strcat( cmd, " version.bind chaos txt");

8#   system( cmd );
}

아까 hint에서 봤던 코드이다. 간단하게 설명하겠다.

1. main 함수에 매개변수(argv)를 입력받는다
2. 문자형 변수 cmd를 cmd[0~99]까지의 배열로 선언한다
4. cmd변수에 “dig @” 문자열을 복사한다
5. cmd변수에 매개변수(argv[1])을 이어붙인다
– 여기서 argv[1]은 사용자가 입력하는 매개변수(Host)이다
6. cmd변수에 ” version.bind chaos txt” 문자열을 이어붙인다
8. cmd변수에 있는 내용을 쉘에서 실행한다

여기에 실행되는 매개변수(argv)를 입력하면되는데 autodig 프로그램상에서 쉘명령을 끼워넣는것이기 때문에 bash를 한번더 실행하고 원하는 명령어를 입력한다.

autodig 실행중.. -> level4 권한으로 bash 실행… -> my-pass나 다른명령어 입력

그런데 인자값을 큰따옴표로 묶지 않으면..? 중간에 세미콜론(;)이나 or(||)가 들어가면 현재 실행중인 쉘에서 해석하기때문에 bash;id로 인자를 주면 실행결과가 어떨까?

결과는 위에처럼 autodig가 종료되고 level4 권한을 반납한 상태에서 실행되기 때문에 level3의 권한으로 실행된다.

물론 큰따옴표로 묶으면 아래처럼 autodig가 실행중일때 bash쉘을 level4 권한으로 추가실행하기 때문에 uid가 level4로 표기되고 있음을 알 수 있다.

level4    9472  2053  0 07:17 pts/0    00:00:00 [autodig]
level4    9473  9472  0 07:17 pts/0    00:00:00 sh -c dig @bash;id # version.bind chaos txt

프로세스는 저렇게 뜬다.

그럼 결과적으로 my-pass를 실행하면 level4의 패스워드를 획득할 수 있다.

0 0 votes
Article Rating
구독
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x