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"

Vi 편집기의 모드

입력 모드 : 문서의 수정을 텍스트로 입력하여 수정하는 모드

(최초 문서로 진입하여 입력모드로 전환)

입력모드 진입 명령어(대소문자 구분)

i

현재 커서(초록색)위치에 텍스트 입력

I

커서가 있는 줄의 맨 앞에 텍스트 입력

a

커서 위치의 다음 칸부터 텍스트 입력

A

커서가 있는 줄의 맨 뒤에 텍스트 입력

o

커서가 있는 줄(line)의 다음 줄을 추가

O

커서가 있는 줄(line)의 이전 줄을 추가

명령(편집) 모드 : 텍스트의 입력이 방식이 아닌 단축키등을 이용하여 문서를 수정하는 모드

(최초 문서로 진입하였을 때 해당 모드로 진입 또는 입력 모드 상태에서 ESC 키를 입력하여 전환)

 

명령(편집) 모드 명령어

u

문서 수정중 실수 하였을 때 한단계씩 되돌리는 명령어

V+방향키

방향키로 커서를 이동하여 범위지정

gg

문서의 맨 처음으로 커서 이동

G

문서의 제일 마지막 행으로 커서 이동

y(복사)

지정된(V+방향키)범위 복사

yy

커서가 위치한 줄 복사

d(잘라내기)

지정된(V+방향키)범위 잘라내기

dd

커서가 위치한 줄 잘라내기

p(붙여넣기)

커서가 위치한 줄의 다음줄에 붙여넣기

P

커서가 위치한 줄의 이전줄에 붙여넣기

/[입력]

입력한 텍스트 검색

n

[검색된 텍스트] 다음 일치 항목 확인

N

[검색된 텍스트] 이전 일치 항목 확인

x

커서가 위치한 글자 삭제

콜론모드 : vi 편집기에서 지원하는 명령어를 사용할 수 있는 모드

(편집 모드 상태에서 콜론(:) 입력 후 명령어 입력)

 

콜론(:) 모드 명령어(대소문자 구분 // 기호 : ! 를 명령어 끝에 붙일 경우 명령어를 강제 수행)

w

변경사항 저장

q

현재 문서를 저장없이 shell으로 나가기

wq

변경사항 저장 후 나가기

ZZ

변경사항 저장 후 나가기

Set nu

문서의 줄번호 출력

:줄번호

입력시 해당 줄 번호로 커서 이동

 

출처 : https://2cpu.co.kr/PDS/12890

ID : level2

password : hacker or cracker

1) id 명령어를 입력하여 현재 자신의 정보를 확인해 본다.

" 나의 이름은 level2 이며, 그룹아이디 명은 level2 이고, 그룹은 level2 에 속해있다 "

 

2) ls 명령어를 통하여 파일 목록을 확인한다

 

3) " 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데... "

문구가 출력되었다. 

Trainer 에서 편집기에 대한 내용은 학습되지 않았던거 같아 자료를 찾아보았다.

 

* 텍스트 파일 편집기 설명 *  - 링크를 눌러 내용을 확인할수 있습니다.

 

4) level3 권한으로 일단 setuid 가 걸려있는 파일을 찾기 위하여

find / -perm -4000 -user level3 2>/dev/null

를 입력하면

/user/bin/editor 파일이 나온다.

 

5) 해당 디렉토리로 이동하여 보자 cd /usr/bin

 

6) ls -al ediotor 를 입력하여 해당 파일에 대한 정보를 확인하면 다음과 같다.

" level3 유저이며, level2 그룹해 속해있고, level3는 모든 권한을 사용 할수 있으며, level2 그룹은 읽기 및 실행 만 가능하고, other 에 대해서는 아무권한도 부여되지 않는다"

 

7) 해당 파일을 실행하면 VI편집기가 실행된다.

위의 링크를 토대로 명령어를 강제수행 하면 된다.

다음 권한의 프롬프트 및 쉘을 띄워야 하기 때문에 , :!bash 를 입력하면 bash 명령어가 실행될것이다.

 

8) 편집기에서 esc 를 한번 누르고 :!bash 라고 입력하면 사진과 같이 아래쪽에 입력이 된다.

enter를 누르면

 

9) editor 파일이 level3 권한이기 때문에, level3 의 프롬프트와 쉘이 출력되게 된다.

level3의 password를 알아보기 위해 my-pass 를 입력하면

 

10) 다음 관문의 비밀번호가 출력되었다.

can you fly?

 

ID : level1

passward : level1

 

1) ls 명령어를 통해 파일 및 디렉토리 목록 리스트 출력

 

2) cat 명령어를 통하여 hint 파일의 내용 출력

" level2 권한에 setuid가 걸린 파일을 찾는다."

 

3) find 명령어를 통하여 setuid 가 걸린 파일 찾기 ( level2 권한 )

==> find / -perm -4000 -user level2

---> "/(루트) 부터 시작하여 최소한의 -4000(setuid) 가 걸린 파일을 -user level2 (level2 권한으로 찾는다)"

* pemission denied ==> 접근 권한 제한목록까지 모두 출력이 됨을 확인할수 있다. 

이러한 접근 권한 제한 목록을 없애기 위하여

2>/dev/null 를 입력하여 접근 권한 제한 목록들을 없앨수 있다.

결과적으로 하나의 파일

/bin/ExecuteMe 파일이 setuid가 걸린 파일임을 알수 있다.

 

4) cd 명령어를 통하여 /bin 디렉토리로 이동한다

 

5) ls -al ExecuteMe 를 입력하여 해당 파일의 정보를 보면 다음과 같다

 

"-" 로 시작하는것을 보아 디렉토리 가 아닌 파일임을 알수 있다.

user(level2) 에 대해서는 모든 권한이 부여되며, S로 끝나는것으로 보아 setuid가 걸린 파일임을 알수 있다.

group(level1) 에 대해서는 읽기 권한 과 실행 권한만 부여된다

other 에 대해서는 어떠한 권한도 부여되지 않는다.

 

" user 는 level2 이며 , 해당 그룹은 level1 이고, 파일의 크기는 12868bit, 생성된 날짜는 2011년 10월 10일 파일명은 ExecuteMe 이다. "

 

* r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1) 

 

6) ExecuteMe 를 입력하여 파일을 실행하면 다음과 같은 문구가 뜬다.

password 를 확인할수 있는 my-pass 와, 

권한을 변경할수 있는 chmod 명령어는 사용이 불가능 하며, 이외의 명령어에 의해서는 level2 권한으로 딱 한번 사용할수 있다.

 

7) 실험을 위해 my-pass를 입력하면 다음과 같은 문구가 출력됨을 알수 있다.

 

8) bash 를 입력하여, level2 권한의 프롬프트와 쉘을 출력하도록 할수 있다.

 

이제 level2 권한의 프롬프트와 쉘을 이용할수 있게 되었으므로 이상태에서

다음 단계의 비밀번호를 확인할수 있는 my-pass 를 입력하면된다.

 

9) my-pass 를 입력하면, level2 권한으로 이동하게 되며, password 는 " hacker or cracker" 이다.

 

Trainer 1 ( trainer1)

1) 프롬프트

[ trainer1 @ ftz trainer1 ]$

  접속ID           서버  현재위치

리눅스에 접속하게 되면 제일 처음 위와 같은 형태의 메세지 가 출력되게 되는데 이를"프롬프트" 라고 하며, 정상적으로 출력된다면 오류없이 서버에 정상적으로 접속했다! 는 의미를 갖게된다.

- 프롬프트 : 항상 대기 상태에서 어떠한 명령을 기다림

2) ls 명령어

- 일반적으로 사용하는 Windows 의 '폴더' 는 리눅스의 '디렉토리' 와 같은 의미이다.

- ls 명령어는 현위치를 기준으로 설치된 디렉토리 및 프로그램을 보여준다.

* 리눅스는 기본적으로 대소문자를 구분하기 때문에 'LS' 또는 'Ls' 가 아닌 소문자 'ls'를 입력해야함

ls : 여러 디렉토리 혹은 파일 목록 출력

ls -l : 디렉토리 와 파일을 구분

파일의 mode 및 성격                   권한                          용량             생성된 날짜                  파일명

-rw-rw-r--                          1 trainer1 trainer1           779               9월 24 11:52                start.txt

drwxr-xr-x                         2 trainer1 trainer1         1024               9월 24 12:59                tmp

* 파일의 성격의 시작이 ' - ' 로 시작하면 파일 , ' d '로 시작하면 디렉토리 임을 의미

- 실행파일과 같은 중요한 파일들은 ' 숨겨진 파일 ' 상태로 저장이 된다. 이러한 ' 숨겨진 파일 ' 을 보기위해 [-a] 옵션을 사용하면 된다

 

ls -a : 숨겨진 파일 및 디렉토리 목록 출력

ls -al : 숨겨진 파일 및 디렉토리를 구분하여 출력

 

+ Recent posts