본문 바로가기

5. 방학 활동/Write UP

[2021/02/16] bandit wargame Level9 ~ Level13

level9 → level10

data.txt 파일 내부에 몇개의 읽을 수 있는 ‘=’문자로 시작하는 문장중 하나라고 한다.

data.txt 를 file명령어를 사용하여 확인하면 data파일이라는 것을 알 수 있다.

cat 명령어를 이용해서 이 파일을 확인해 보면 읽을 수 없는 파일이 나온다.

strings 명령어를 이용하여 문자열을 추출하여 출력시킨다.

그러면 우리가 읽을 수 없는 기호들은 사라지고 읽을 수 있는 문자열만 출력된다.

그리고 grep명령어를 사용해서 우리가 원하는 ‘=’문자가 있는 라인만 찾아보자

strings data.txt | grep = 명령어를 이용하면 패스워드를 획득할 수 있다!

 

 

level10 → level11

다음 레벨의 패스워드는 base64로 인코딩된 데이터를 포함하고 있는 data.txt 파일에 저장되어 있다고 한다.

 

base64란, 8비트 이진 데이터를 문자 코드에 영향을 받지 않는

공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리킨다.

 

base64 명령어는 문자열을 base64로 언코드 or 디코드 해주는 명령어이다.

 

base64명령어에서 -d 옵션을 줘서 base64 디코드를 해준다.

이렇게 해서 패스워드를 찾아냈다.

 

 

level11 → level12

문제 해설)

다음 레벨의 패스워드는 data.txt파일에 저장된다.

여기서 모든 소문자 (az) 및 대문자 (AZ) 문자가 13자리씩 회전되어있다.

 

카이사르 암호인점과 tr 명령어를 이용해서 13자리씩 회전된 소문자 및 대문자를 풀어주면 된다.

tr 명령어는 translate의 약어로 지정한 문자를 바꾸어주거나 삭제하는 명령어이다.

특정한 문자를 다른 문자로 바꾸거나 또는 특정 문자를 제거한다.

 

$cat ./data/txt

 

$ cat data.txt | tr ‘[A-Za-z]’ ‘[N-ZA-Mn-za-m]’

5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

 

 

 

level12 → level13

문제 해설)

다음 레벨의 패스워드는 data.txt에 저장되어 있고, 그것은 반복적인 압축이 된 파일을 헥사코드로 바꾸어 놓은 것이다. 이 레벨을 위해, 너가 mkdir 명령어를 사용하여 작업할 /tmp 아래에 디렉토리를 만드는 것이 유용할 것이다.

예: mkdir /tmp/myname123

그리고 데이터파일을 cp 명령어를 사용해 복사하고,

mv 명령어를 사용해 이름을 다시 지어준다. (manpage를 읽어라!)

 

문제 풀이)

우선 ls로 파일을 확인하고 cat으로 데이터.txt의 내용을 읽으면 다음과 같이 나온다.

mkdir를 이용해 (임의로) gomin이라는 디렉토리를 만들어 주었다.

cp를 이용해 데이터.txt를 /tmp/gomin에 복사해주고,

gomin디렉토리로 이동해 작업을 했다.

ls를 쳐보면 이 디렉토리에 데이터.txt가 복사되어있는 것을 확인할 수 있다.

 

xxd -r 명령어와 리다이렉션(>)을 이용해 파일을 바이너리 파일로 변환시켜 준다.

임의로 question이라는 파일에다가 data.txt를 바이너리 파일로 변환시켜 넣어주었다.

ls를 쳐보면 이 디렉토리에 question파일이 생성된 것을 확인할 수 있다.

 

file명령어를 이용해 question파일의 종류를 확인한다.

gzip으로 압축된 형태라고 뜬다.

 

gzip이란?

리눅스에서 제공하는 압축기법 중 하나인데, gzip을 이용해 생성되는 압축파일의 이름은 '파일이름.gz' 이다.

 

mv 명령어를 이용해 파일의 이름을 ‘파일.gz’ 로 바꾸어주고,

gzip -d 를 입력해 압축을 풀어준다.

또 question의 파일종류를 출력시켜본다.

bzip 압축된 형태라고 뜬다.

확장자명을 바꾸어 주고 bzip2 -d로 압축을 풀어준다.

file 로 파일형태를 확인해 보니 tar 라고 나온다.

 

tar란?

여러 개의 파일을 하나로 합쳐놓은 것인데, 리눅스에서는 압축할 때에 하나의 파일만 압축할 수 있기 때문에 여러 파일을 한꺼번에 압축할 땐 tar 명령어를 이용해 합치고 압축한다.

 

tar -xvf 명령어로 풀어준다.

 

이런 식으로 계속 확장자명 바꾸고 압축 풀어주고 하다보면 data8.bin에 패스워드가 있는 것을 확인할 수 있다.

 

 

 

level13 → level14

문제 해설)

/etc/bandit_pass/bandit14 에 구하고자 하는 password가 저장되어 있는데,

이는 user가 bandit14여야만 읽을 수 있다고 한다.

지금 level13에서는 password를 못 얻지만, 다음 level에서는 log할 수 있는 private ssh key를 얻을 수 있다고 한다. 

 

bandit13에 로그인해 ls를 입력해 보니

 

sshkey.private이 있음을 알 수 있다.

ssh -i 옵션을 이용하여 bandit 14에 로그인을 해보자. 

yes를 입력하면 bandit 14로 로그인 된다. 

이제 /etc/bandit_pass/bandit14를 cat으로 열어보자

 

다음과 같이 password를 얻을 수 있다.