본문 바로가기

Bandit 원정대

Bandit 원정대 1주차

반응형

Level 0

The goal of this level is for you to log into the game using SSH. The host to which you need to connect is bandit.labs.overthewire.org, on port 2220. The username is bandit0 and the password is bandit0. Once logged in, go to the Level 1 page to find out how to beat Level 1.

 

 

여기서 첫번째로 할일은 ssh로 해당 사이트를 접속을 해야된다는 것을 알 수 있다.

 

SSH는 secure shell 로 telnet의 단점인 보안을 강화한 프로토콜이다.

강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공

다른 host와 통신시 암호화 기법을 사용하므로

통신이 노출되어도 text가 암호화된 문자로 보이게 되어 정보의 무결성을 지킬 수 있다는 특징을 갖고 있다.

port번호: tcp 22번(well-known port)

 

step 1. SSH를 사용할 수 있는 프로그램인 PUTTY를 사용해서 접속한다.

step2. 여기에 Host name(or IP address)라고 친 부분에 bandit.labs.overthewire.org 를 입력후

port 에 2220을 입력하고 open을 시도한다.

 

step3. login as: 라고 뜨는데 이제 여기에 bandit0를 치고나면 다음 문장에 pw를 입력하라고 나온다.

pw 역시 bandit0 이므로 아이디와 똑같이 입력해준다.

접속 완료

 

level1

Level Goal

The password for the next level is stored in a file called readme located in the home directory. Use this password to log into bandit1 using SSH. Whenever you find a password for a level, use SSH (on port 2220) to log into that level and continue the game.

 

step1. pwd 명령으로 지금 현재 위치를 파악해본다.

 

step 2. 어떤 파일들이 있는지 확인하는 명령인 ls -l 명령으로 확인한다.

readme라는 파일이 있다.

 

 

step 3. cat 이나 more 명령으로 파일을 읽는다.

찾았다! cat명령에서 나온 다음 스테이지 비밀번호같다.

 

step4. 암호를 복사해서 다음 단계인 bandit 1으로 로그인 후 붙여 넣는다.

접속완료

 

미션풀이에 필요한 리눅스 지식

1. pwd

print working directory의 줄인말로 현재 작업 중인 디렉터리의 이름을 출력할 때 쓰인다. 

home 디렉토리에 있는지 확인을 하기위해 썼다.

 

2.ls

list의 준말로 현재 자신이 속한 디렉토리 내에 어떤 파일들이 있는지 파일들을 확인할 때 쓰이는

명령어다.

ls option

-l(long): 상세 내용까지 출력을 한다. ex) permission(r/w/x), 포함된 file수, user,group,file size, 수정일자, 파일이름mtime(수정 시간)을 출력

-lu: atime(접근 시간)을 출력한다.

-lc: ctime(변경 시간)을 출력한다.

위의 세가지 옵션을 통해 파일의 수정, 접근, 변경 시간을 알 수 있다.( 줄여서 mac time이라고도 부른다.)

-al: 가장 자주 사용하는 option으로 숨겨져 있는 파일까지 모두 다 보여주는 옵션이다.

 

3.cat 

파일의 내용을 간단하게 출력할 때 사용한다.

뿐만 아니라 두 개 이상의 파일을 연결해서 출력할 때도 사용한다.

cat option

-n: 행 번호를 표시하여 파일 내용을 출력한다.(공백만 있는 줄 포함)

-b: 출력시 행 번호와 함께 출력한다.(공백만 있는 줄 제외)

-s: 인접한 여러 공백 줄을 하나의 공백 줄로 출력한다.

 

 

level2

level2

The password for the next level is stored in a file called - located in the home directory

접속 비밀번호: boJ9jbbUNNfktd78OOpsqOltutMc3MY1

 

step1.  level1에서 접속한 bandit1에 접속하여 ls -l로 파일을 확인한다.

 

step2. - file을 열어보기 위해 cat < -  을 입력한다.

해당 file의 내용을 찾았다.

 

step3. 해당 파일의 내용대로 bandit2에 접속을 해본다.

접속 완료

 

미션풀이에 필요한 리눅스 지식

--redirection 이란?

입출력의 방향을 바꾸는 것을 redirect라고 한다.

입출력을 바꾸는 역할을 하는 기호는 >,<,>>,<< 가 있다. 여기서 cat 명령을 예시로 들어 설명을 해보겠다.

 

1. <: 출력 전환

cat 명령을 사용하게 되면 해당 파일이 내용을 화면에 출력하는데 이를 표준 출력(stdout)이라고 합니다.

쉘 I/O 에서 표준 input/ouput/error은 크게 세가지로 나뉩니다.

stdin(0), stdout(1), stderr(2)

프로그램은 리눅스에서 보통 default로 세개의 입/출력을 나누게 됩니다.

여기서 살펴볼 것은 program < file_name 입니다.

 

program< file_name

이 뜻은 'file_name의 파일 내용을 program의 표준 입력으로 사용하겠다' 라는 뜻입니다.

 

 

-- dash(-) 특수문자의 의미

 

리눅스 명령어에서 dash(-) 특수문자는 보통 명령어 뒤에 옵션 입력시 사용한다.

그렇기 때문에 위의 파일 같은 경우 dash(-) 특수문자로 된 파일이므로 cat - 을 칠 경우

프로그램은 이를 cat명령에 넣을 옵션으로 인식하게 된다.

따라서 위의 redirection을 통해서 오류 발생을 방지하여 파일을 열어야 된다.

 

level 3

The password for the next level is stored in a file called spaces in this filename located in the home directory

접속 비밀번호: CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

 

step1. bandit2에 접속 후 ls -l로 file을 확인한다.

 

step2. 해당 파일을 열어보기 위해 cat 명령을 치고 

cat spaces 까지 입력후 tab을 눌러 자동완성을 시킨다.

 

step3. bandit3으로 접속해 해당 문자로 접속해본다.

접속완료

 

미션풀이에 필요한 리눅스 명령어 지식

tab 키

문제풀이를 할 때 단순히 cat 명령 이후 파일의 이름을 자동 완성해주는 tab키를 눌러 확인을 했기 때문에

이 미션을 풀면서 필요한 리눅스 지식이 있을까 생각을 해봤다. 

overthewire 문제에서도 힌트로 '띄어쓰기가 있는 파일'이라고 나와있길래 띄어쓰기가 있는 파일의 처리는 어떻게 

해야될 것인지 찾아보았다.

 

"\" 키보드에는 왼쪽과 같이 표현되어 있지만 리눅스 상에서는 이 키를 역슬래시로 받아드립니다.

파일 이름에 공백이 있을 경우 \ 키를 사용하여 띄어쓰기도 해당 파일의 이름이란 것을 받아드리도록 

처리하면 된다.

만약 띄어쓰기가 있는 파일을 처리하고 싶다면 , 다음과 같이 써도 된다.

cat 'spaces in this filename'

귀찮게 \를 띄어쓰기마다 쓸 필요없이 작은 따옴표로 묶어도 가능하다.

 

 

level 4

level goal

The password for the next level is stored in a hidden file in the inhere directory.

접속 비밀번호:UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

 

 

step1. ls -l로 bandit3의 파일을 확인 해본다.

 

 

step2.cd 명령으로  inhere directory로 이동을 한다. 이동 후 해당 디렉토리의 파일내용을 찾아본다.

total 0라고 뜬다

the next level is stored in a hidden file

파일은 hidden file에 있다.

즉 숨겨진 파일 까지 보여주도록 하는 명령을 넣어야한다.

 

 

step3.

ls -al 로 해당 디렉토리의 숨겨져 있는 파일을 확인한다.

 

step4.

.hidden 파일을 열어본다.

해당 파일의 내용을 찾았다.

 

 

미션풀이에 필요한 리눅스 명령어 지식

 

inhere의 글자 색이 조금 다르다는 것을 봤을 것이다.

그리고 맨 앞글자 drwxr-xr-x라고 표시된 부분에 맨 첫글자에 d라고 붙어있다.

앞서 level2에서 설명을 하다 만 file에 대한 permission에 대해 설명을 하고 가려고 한다.

 

 

permission

permission(r/w/x), 포함된 file수, user,group,file size, 수정일자, 파일이름

ls -l 명령을 쳤을 때 나오는 파일에 대한 정보를 표시해주는 형식이다.

여기서 알아볼 부분은 permision이다.

맨 앞글자 d는 directory를 뜻합니다. 일반 file일 경우에는 d 대신 "-"이 붙어서 나오게 된다.

다음은 rwxrwxrwx 라고 적힌 이 부분인데,

이 부분은 크게 세개로 나뉠 수 있다.

 

file owner permission / group permission / etc permission

      rwx                       rwx                   rwx

첫번째는 파일 소유자 권한, 두번째는 그룹 권한, 세번째는 기타 권한으로 나뉘는데

이 권한에는 세가지 권한으로 나뉘게 된다.

읽을 권한(read) / 쓸 권한(wirte) / 실행할 권한(execute) 

ls 명령을 통해서 우리는 파일 혹은 디렉토리에 대한 각 사용자들이 어떤 권한을 갖고 사용가능한지

알 수 있게 된다.

번외로 우리가 root권한으로 이 프로그램에 접속을 하고 해당 파일 혹은 디렉토리에 대한 권한을 바꾸고 싶다면

chmod 명령으로 해당 permission을 변경을 할 수 있다.

 

cd

change directory의 준 말로 directory의 위치를 바꾸기 위해 사용한 명령어다.

여기서도 하나 살펴보고 갈 부분은 directory에 대한 개념이다.

windows에서는 여러 파일을 저장할 수 있게 만든 것을 '폴더'라고 한다.

linux에서도 windows의 '폴더' 와 비슷한 개념을 가진 것이 있으니 이를 '디렉토리'라고 부른다..

windows에서도 폴더 내에 파일을 찾으려면 해당 폴더를 gui 기반으로 아이콘을 클릭하여 움직이듯이

linux에서 cli 기반으로 디렉토리를 변경하여 파일을 찾고자 할 때는 cd 명령을 통해서 원하는 파일을 찾을 수 있다.

 

 

level5

level goal

The password for the next level is stored in the only human-readable file in the inhere directory. Tip: if your terminal is messed up, try the “reset” command.

접속 비밀번호:pIwrPrtPN36QITSp3EQaw936yaFoFgAB

 

step1. inhere로 디렉토리를 바꾸고 ls -al로 해당 프로그램의 파일을 확인한다.

 

step2. 사람이 읽을 수 있는 파일을 찾아야하므로 파일들이 어떤 파일인지 확인을 해봐야한다.

file 명령으로 파일 하나씩 파일의 종류를 찾아보았다.

Commands you may need to solve this level

ls, cd, cat, file, du, find

 

file 명령을 가지고 풀어보도록 하겠다

file명령으로 해당 디렉토리의 모든 파일을 찾아보고 -file07 파일에 파일 형식만 다른 파일과 달랐다.

다른 파일은 data형식인 반면 -file07 파일만 ascii text로 나와있다.

 

 

step3. -file07 파일을 읽는다. cat ./-file07 결과

해당 파일의 내용이 나왔다. 이 파일의 내용이 다음 step의 pw가 맞는지 확인한다.

 

step4. bandit5로 접속을 한다.

접속완료

 

 

미션풀이에 필요한 리눅스 지식

 

file

file 명령어는 지정된 파일의 종류를 확인하는 명령어다.

위의 풀이에서는 file ./-file0* 식으로 해당 파일들을 하나하나씩 다 찾아가보면서 파일 형식을 확인했지만

이러한 번거로움을 줄이기 위해 해당 디렉토리의 모든 파일의 형식을 확인해보려고 한다.

 

file ./*:  여기서 ./* 이 명령어에 대해서 조금 알아볼 필요가 있다.

./: 해당 디렉토리를 뜻하는 문자로 / 뒤에는 파일 이름을 입력한다. 

*: 해당 디렉토리 내의 모든 파일을 뜻하는 문자

file ./* 를 해석하자면 

해당 디렉토리 내의 모든 파일의 종류를 확인해라 라는 명령어가 된다.

위 명령의 결과는 다음과 같다.

ASCII CODE: 아스키 코드는 무엇인가?

컴퓨터는 숫자를 이용해서 인식하고 표현한다. 결국 문자 또한 숫자를 이용해서 표현할 수 밖에 없다.

아스키코드는 숫자를 문자에 연결(mapping)시키는 것이 유일한 방법이다.

따라서 우리가 해석할 수 없는 숫자로 표기되어 있을 떄 아스키 코드를 통해서 문자를 표현할 수 있게된다.

아스키 코드는 알파벳과 일부 특수문자를 포함하여 총 128개의 문자로 이뤄져있다.

간단한 예시로 이렇게 표현된다.

ex) A : 65  B : 66  C: 67  ~ :126 

 

 

level6

level goal

The password for the next level is stored in a file somewhere under the inhere directory and has all of the following properties:

접속 비밀번호: koReBOKuIDDepwhWk7jZC0RTdopnAYKh

 

human-readable

1033 bytes in size

not executable

 

Commands you may need to solve this level

ls, cd, cat, file, du, find

 

step1.

bandit5로 접속 후 ls-al로 확인 후 inhere directory로 이동한다.

 

 

step2.

ls -l로 해당 directory내의 파일을 확인한다.

 

step3.

해당 조건에 맞는 명령을 입력한다. 여기서는 find 명령어를 사용하여 해당 파일을 찾아본다.

 

 

step4.

해당파일이 문제의 조건에 맞는 파일인지 확인한다.

 

접속완료.

 

 

미션풀이에 필요한 리눅스 지식

1.find

find 명령은 현재 directory부터 하위 directory까지 주어진 여러조건을 가지고 file 및 directory를 

찾아주는 명령어다.

위의 문제풀이를 위해선 추가적인 option설명도 필요하다.

 

-size:

size 옵션은 찾으려고 하는 파일의 크기가 얼마인지 설정하고 찾기 위해 설정하는 옵션이다.

위의 문제 같은경우 1033byte size in 으로 조건을 줬기 때문에 1033c 로 설정을 하여 해당 파일을 찾았다.

여기서 뒤에 붙은 c는 byte를 단위로 하여 나타낸 문자이다. 단위 따라 달라지므로 이를 꼭 확인해야한다.

 

※사이즈 단위

b: 블록 

c: 바이트 

k: 킬로 바이트

m: 메가 바이트

g: 기가 바이트

 

2.permission

해당 파일을 찾고 난 이후 ls -al로 해당 파일의 권한을 확인한 이유는 문제의 조건에 부합한지 알아보기 위해서다.

 

not executable

다음은 실행할 수 없는 파일임을 확인 하기 위해 permission을 확인할 필요가 있다.

ls -l 명령을 할 경우 맨앞에 -rw-r--r--과 같은 permission이 등장한다.

여기서 x가 없어야 해당 파일의 조건에 만족한다. 

r= read권한 w=write권한 x=execute권한

다행이 찾은 해당 파일은 x 없이 읽기와 쓰기만 가능한 파일이므로 위 문제에서 원하는 파일이다.

 

 

 

level7

Level Goal

The password for the next level is stored somewhere on the server and has all of the following properties:

 

owned by user bandit7

owned by group bandit6

33 bytes in size

 

접속 비밀번호: DXjZPULLxYr17uwoI01bNLQbtFemEgo7

 

 

step1. 해당 서버내에 어딘가에 있기 떄문에 find / 명령으로 전체 서버내에 위의 조건에 맞는 파일을 찾는다.

 

step2. find명령으로 찾은 파일 중에 bandit7.password라는 파일이 보인다. 이 파일을 확인해본다.

 

 

미션에 필요한 리눅스 지식

 

find 옵션: 

-user: 특정 사용자 이름을 가진 파일 찾기 위한 옵션

-group: 특정 그룹 이름을 가진 파일 찾기 위한 옵션

 

 

다음 미션으로 가기위한 비밀번호: HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

 

 

1주차 지식 키워드 

위에서 설명하지 못한 두가지를 여기서 정리하고자 합니다.

1.리눅스 파일 타입

-일반파일: -rwxrwxrwx --> 앞에 dash가 붙는 파일은 일반파일.

-디렉토리파일: drwxrwxrwx --> 앞에 d가 붙는 파일은 디렉토리 파일

이번주차에 배운 파일 종류들은 이렇게 크게 두가지 파일들을 볼 수 있었다.

 

2. 리눅스 /etc/passwd 파일

 

이 파일은 시스템에 등록된 사용자의 정보들이 담겨있는 파일이다.

이 파일을 통해 사용자의 계정과 인증을 관리하게된다.

과거에는 이 파일에서 사용자의 pw를 저장 했으나 요즘은 /etc/shadow에 따로 암호화 한다.

 

해당파일의 필드 구성

사용자 로그인계정, 암호화된 비밀번호, user id, group id,이름,홈 디렉토리,로그인 쉘

ex)

root : x: 0: 0: root: /root: /bin/bash
사용자 계정 비밀번호 user id group id name home directory shell

 

반응형

'Bandit 원정대' 카테고리의 다른 글

Bandit 원정대 4주차  (0) 2021.07.15
Bandit 원정대 3주차  (0) 2021.07.08
Bandit 원정대 2주차  (0) 2021.06.30