힌트가 무엇인지 보면 

 

The password for the next level is stored in the file data.txt, where all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 positions

 

이말은 data.txt안의 있는 파일의 내용을 13자리 대소문자를 포함하여 뒤로 보낸다면 패스워드가 나온다는 말이다. 

그리고 힌트의 자세한 내용을 보면 아래와 같은 관련된 내용이 나온다.

 

https://en.wikipedia.org/wiki/ROT13

 

ROT13 - Wikipedia

From Wikipedia, the free encyclopedia Simple encryption method ROT13 ("rotate by 13 places", sometimes hyphenated ROT-13) is a simple letter substitution cipher that replaces a letter with the 13th letter after it in the latin alphabet. ROT13 is a special

en.wikipedia.org

 

ROT13 이란?

ROT13 라틴 알파벳 에서 문자를 그 뒤의 13번째 문자로 바꾸는 간단한 문자 암호 라고한다. 

어떻게보면 3자리 뒤의 문자로 치환되는 카이사르 암호와 비슷해보인다. 

그럼 문자열을 13자리 뒤로 보내기만 하면될 것이다.

 

이 부분 같은 경우 tr 명령어를 통해서 치환을 해주면 될 것 같다. 

cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'

 

A는 ROT13을 사용하면 N이되기 때문에 대소문자를 포함하여 A~Z와 a~z를 치환을 해야 하기에 N부터Z까지 먼저 범위를

설정해주고, Z가 13자리 뒤로가면 M이 될 것이라서  A부터 M까지 범위를 설정했다.  

 

tr 명령어를 이용하여 문자를 치환하는 것이 문제의 관건 이었던 것 같다.

힌트를 확인해보면 

 

The password for the next level is stored in the file data.txt, which contains base64 encoded data

data.txt파일 안에 패스워드 정보가 저장이 되어있으나 base 64로 암호화가 되어있다.

그럼 이걸 복호화를 한 다음 실행하면 패스워드를 얻을 수 있을 거 같다. 

 

base 64로 인코딩이 되어있는것을 확인했으니 이걸 복호화를 하면 될거 같다.

base64 --decode data.txt

 

 

아주 쉽게 문제를 풀 수 있었다.

제일 먼저 힌트를 확인해보면 

The password for the next level is stored in the file data.txt in one of the few human-readable strings, preceded by several ‘=’ characters.

 

data.txt 파일에 저장되어있으며, 사람이 읽을 수 있는 파일이고 몇개의 '=' 문자가 있다고 한다. 

힌트를 확인했으니 접속을 해서 확인을 해본다.

 

이번에는 쉽게 읽을 수 없게 되어있는데 아스키코드가 아닌 코드들도 같이 섞여있는거 같다. 

그래서 cat을 사용하지 못하니 strings를 대신 사용하여 찾아내면 되지 않을까 한다.

그리고 힌트가 몇개의 = 문자열이 포함되어있다고 한다. 

그렇다면 data.txt 파일안의 몇개의 = 문자를 찾아서 확인해보면 될 것 같다. 

힌트 중에 또하나 유심히 볼 것은 사람이 읽을 수 있는 내용이라고 했으니 확인하면 볼 수 있을 것이다.

strings data.txt | grep '===='

 

 

= 문자가 포함된 것들만 출력을 해주는데 여기서 패스워드를 확인 할 수 있었다.

힌트를 확인해보자 

 

The password for the next level is stored in the file data.txt and is the only line of text that occurs only once

data.txt 1번만 실행되는 행이라고 한다. 

 

일단 접속을 해보자 

 

접속을 해서 확인을 해본 결과 여러가지 문자열이 막 나오는 것을 확인 할 수있다. 

하지만 힌트에서는 한번만 실행되는 문자열이라고 설명을 했으니 그럼 한번만 실행되는 행을 찾으면 될 것이다.

그래서 여기서는 sort와 uniq라는 명령어를 사용해 볼 수 있다. 

sort data.txt | uniq -u

 

sort 명령어로 정렬을 시켜준 다음 uniq -u로 중복되지 않은 행만 출력하게 해주면 된다. 

 

패스워드를 확인할 수 있었다. 

아니면 다른 방법도 있다. ( 조금 지저분 하지만)

sort data.txt | uniq -c

 

uniq 명령어에 옵션을 c 를 해주면  몇번 중복되었는지 갯수를 출력해준다.

 

 

이렇게도 확인 할 수 있으며 물론 둘다 패스워드 값은 동일한 결과를 볼 수 있다.

힌트를 확인해보자 

The password for the next level is stored in the file data.txt next to the word millionth

data.txt 안에 있는 millionth라는 문자열 옆에있는 문자가 패스워드라고 한다.

 

확인해보자 

 

data.txt가 있긴한데 이렇게 간단하게 풀 수있는 문제는 아닌거 같다. 

일단 data.txt의 내용을 확인해봐야 할 거 같다. 

cat data.txt

 

 

뭔가 굉장히 많은 문자들이 들어있는데 여기서 millionth 라는 문자열의 옆에 패스워드가 있다고 했으니, 

해당 파일내부에서 million이라는 문자열을 검색하면 되겠다.

grep -r millionth data.txt

 

이번 문제는 생각보다 간단했던 거 같다, 

grep 명령어를 알고 있고 사용할 줄 아는가에 대한 문제였던것 같다.

힌트를 확인해 보았다.

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

owned by user bandit7 // 유저이름이 bandit7

owned by group bandit6 // 그룹이름이 bandit 6

33 bytes in size // 파일크기가 33바이트

 

저번처럼 3가지의 조건들이 있는데 힌트대로 한번 찾아보기로 했다.

그렇다면 서버의 어딘가에 파일이 있다는 이야기인데 정확하게 어딘가에 있는지는 모른다.

하지만 서버의 어딘가에 있기때문에 최상위 디렉토리 안에 있을것이며 힌트를 참고해 검색을 하면 될것이다.

find / -user bandit7 -group bandit6 -size 33c

 

 

검색을 해봤지만 다른파일들 및 디렉터리들과 함께 Permission denied가 나오는데 권한이 없다는 뜻이다.

하지만  힌트에서는 어딘가 저장이되어있다고 했으니 접근하여 알아내면 된다는 뜻이다..

문제를 분석해보면 리눅스에서는 파일 디스크립터라는것이 있다 .

다른것들도 있지만, 대표적으로 이렇게 쓰인다.

 

stdin(표준입력) : 0

stdout(표준출력) : 1

stderr(표준에러) : 2

 

여기서 나오는 Permission denied는 표준에러이므로 해당 에러들을 다른곳으로 보낸다면?

/dev/null을 사용해서 오류를 null 공간에 리다이렉션을 해볼 수 있다.

/dev/null은 Null 공간으로 대부분 리눅스에서 오류를 보내면 오류를 출력하지 않을 것이다.

find / -user bandit7 -group bandit6	-size 33c 2>/dev/null

 

 

생각했던 방법대로 권한이 필요해서 접근을 하지 못했던 다른 디렉토리와 파일들 때문에 나왔던 오류들은 더 이상

나오지 않고 힌트를 참고해서 검색했던 파일의 경로가 보인다. 

해당 경로로 이동하여 파일의 유형을 확인 해보았다.

cd /var/lib/dpkg/info
file bandit7.password

 

아스키 코드로 만들어진 텍스트 파일이다. 

cat로 실행해보면 패스워드가 나온다.

 

해결!

힌트를 확인해보면...

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

human-readable // 사람이 읽을 수 있음 

1033 bytes in size // 1033 바이트 크기

not executable  // 실행권한이 없음 

라는 힌트를 얻을 수 있다. 

 

확인을 해보면 여러가지 디렉토리들이 보인다. 

여기서 우리가 확인해야할 것은 힌트에 나온 3가지이다. 

3가지 조건을 모두 가지고 있다면 그것이 패스워드가 될 것이다. 

그래서 권한을 확인하기로 했다.

 

여기서 알 수 있는 것은 inhere 디렉토리 안에 있는 maybehere00~19까지 모두 실행권한이 없다.

그러므로 inhere 안에 있으면서 실행권한이 없다는 조건을 가지기 위해선 이들 중 하나가 패스워드와 관련이 있을 것이다.

그렇기에 다음조건을 가지고 있는지 확인 해보면 되는데 파일의 크기를 알아보기로 했다. 

첫번째로 파일인지 디렉토리인지 유형을 확인해 봤다.

file ./*

 

 

전부 다 디렉토리인것을 확인했다. 

그럼 해당 디렉토리들 중 디렉토리 안에 있는 파일중 하나가 될 것이다.

inhere 안에 있으면서 실행권한이 없어야 하고 크기는 1033 바이트 여야 한다. 

find를 통해서 찾아보았다.

find -size 1033c

 

 

/home/bandit5/inhere/maybehere07 안에 있는 .file2라는 파일의 크기가 1033바이트라고 한다/

그럼 다시 조건을 생각해보면 아래와 같다.

1. inhere 디렉토리 안에 있음

2. 실행 권한이 없음 

3. 사람이 읽을 수 있는 파일

4. 파일 크기는 1033 바이트

그렇다면 3가지는 확인을 했고, 사람이 읽을 수 있는파일인지 아닌지만 확인하면 될 것이다.

그래서 해당 경로로 이동 후 확인을 해봤다.

 

확인을 해보니 우리가 봤던 파일이 보이는데 실행권한이 없다는 것을 알 수 있다.

그리고 inhere 디렉토리 안에 있었던 것도 경로를 통해 확인 할 수 있다.

그리고 find를 사용하여 크기가 1033 바이트인 것도 확인을 했다.

이제 사람이 읽을 수 있는 파일인지 아닌지만 확인하면 된다.

 

아스키코드로 되어있는 텍스트파일이다. 그렇다는 것은 사람이 읽을 수 있다는 이야기가 되면서 

힌트에서 말했던 조건들을 모두 가지고 있기에 이것이 패스워드가 된다는 것을 알 수 있다.

그래서 cat으로 한번 확인해주면 된다.

 

패스워드를 얻을 수 있었다.

힌트를 확인해보자.

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

 

음...  사람이 읽을 수 있는 파일이고 inhere 디렉토리 안에 있다고 한다. 

 

일단 한번 확인해보기로 했다.

 

힌트에서 말했던 디렉토리가 보인다.

한번 들어가 보았다.

cd /home/bandit4/inhere

 

여기서 확인을 해보면 여러가지들이 나오는데 힌트대로라면 이중에 있다는 이야기가 된다

 

그렇다면 여기서 사람이 읽을 수 있는 파일이 무엇인지 파일 유형을 살펴봐야 할 것이다. 

그래서 file 명령어를 활용하기로 했다.

file ./*

 

-file07이 패스워드 인것 같지만 권한을 확인해 봐야 하기 때문에 ls -al을 확인해서 권한을 보았다.

 

level5의 권한을 가지고 있고 읽을 수 있는 권한을 가지고 있었다. 

그래서 -file07이 패스워드일 것이다. 

cat 으로 확인해봤다.

cat < '-file07'

 

문제가 해결되었다.

일단 힌트부터 확인을 해보면 

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

디렉토리안에 숨겨진 파일이 있다고 한다. 

그러면 먼저 해당경로로 이동을 한번 해보기로 했다. 

ls 
inhere

pwd 
/home/bandit3

cd /home/bandit3/inhere

 

해당 경로로 이동 후 ls를 통하여 안에 있는 파일들을 확인해보려고 했으나 아무것도 나오지 않았다.

여기서 힌트를 보자면 숨겨진 파일이라고 했기 때문에 숨겨진 파일을 확인 하면 될 것 같다.

그래서 숨겨진 파일을 확인하려면 해당 옵션을 주면 된다.

ls -a

 

 

.hidden 파일이 보이는데 아마도 이게 다음레벨로 올라가는 패스워드 인것 같다.

열기전에 해당 파일의 권한과 유형을 확인해봐야 하기 때문에 확인해봤다.

file .hidden

 

 

역시나 예상대로 아스키 코드의 텍스트 파일이었다. 

그럼 권한은 어떻게 되는가??

ls -al

 

 

bandit4의 권한을 가지고 있는 .hidden 파일을 볼 수 있다. 

따라서 이게 패스워드 인것 같다. 

cat으로 한번 실행해봤다.

cat .hidden

 

 

아주 쉽게 해결되었다. 

이번문제는 매우 간단하게 풀었던 거라 사실 풀이를 적을게 있었나 모르겠다

사실 그정도로 쉽게 풀었다.

 

일단 뭐가 있는지 확인하기 위해서 ls 명령어를 사용했다.

 

해당 파일이 하나밖에 없는데 혹시 몰라 힌트를 확인해 보았다.

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

이말인 즉슨,  ls로 확인했던 것의 내용이 정답의 단서를 가지고 있을것이라고 생각했다.

그래서 cat 명령어로 내용을 확인해 보았다.

cat 'spaces in this filename'

 

 

아주 쉽게 풀렸다.

+ Recent posts