본문 바로가기

Bandit 원정대

Bandit 원정대 2주차

반응형

Bandit Level 7 → Level 8

Level Goal

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

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

 

 

 

step1. ls-al로 파일 확인후 data.txt 파일 열기 

step2. cat data.txt 결과 데이터가 계속해서 나오므로 ctrl+c로 실행을 멈추도록 한다.

 

step3. millionth 단어가 포함되어 있는 문자열을 찾아야하므로,

grep -w 'millionth' ./data.txt 로 찾는다.

 

미션에 필요한 리눅스 지식

1.grep 

grep은 파일이나 표준입력(stdin)으로부터 패턴을 찾아주는 역할을 한다.

grep은 파일의 문자열 검색시, 단순 문자열 매칭이 아닌 정규 표현식에 의한 패턴 매칭 방식을 사용한다.

위의 예제처럼 파일내에 원하는 문자열을 찾고 싶을 때 쓰면 유용한 명령어이다.

명령어 형식: grep option '문자열' '해당 파일'

문제풀이에서 썼던 grep -w option은 단어(word) 단위로 매칭을 시켜주는 option이다.

 

 

 

다음단계로 넘어갈 비밀번호: cvX2JJa4CFALtqS87jk27qwqGhBM9plV

 

 

Bandit Level 8 → Level 9

Level Goal

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

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Helpful Reading Material

piping and redirection

 

 

step1. ls-l로 파일을 확인후 cat 으로 data.txt 파일을 열어본다.

 

step2. 너무 많은 정보들이 들어가있으므로 유일하게 갖고 있는 한 라인을 찾기 쉽지않다.

sort data.txt로 정렬을 하고 이 결과를 파이프로 연결하여 uniq -u로 유일한 라인 하나를 찾는다.

 

 

미션에 필요한 리눅스 지식

1.sort : 사용자가 지정한 파일의 내용을 정렬하거나, 정렬된 파일의 내용을 병합할 때 사용한다.

sort data.txt  ---> data.txt 파일을 알파벳 순으로 정렬

 

2.uniq: 중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제한다.

전체적으로 분산된 중복은 찾아내지 못하는 단점이 있다. 따라서 정렬하여 순차적으로 만든 뒤 적용한다.

uniq -u ---> 중복 라인이 없는 것만 보여주는 명령.

 

3. pipe: 여러개의 명령어를 실행할 때 이전 명령어의 결과를 다음 명령어의 입력값으로 사용하고 싶을 때 

           사용되는 방법이다.

ex) sort data.txt | uniq -u

 

왼쪽의 sort data.txt의 결과를 다음 명령어인 uniq -u 의 입력값으로 사용되는 것이다. 

좀 더 자세하게 설명을 덧붙여보겠다.

 

우리는 지난주차에 redirection에 대해 배우면서 stdin/stdout/stderr (standard input/output)를 언급했다.

1.  sort data.txt ---> stdin--> stdout: sort data.txt 명령을 입력 받고 이를 출력한다.

2.  sort data. txt | uniq -u ---> sort data.txt 명령이 stdin 형태로 바뀌면서 uniq -q에서 stdout이 실행된다.

 

stdin stdout의 형태로 위의 명령은 이뤄진다고 볼 수 있다. 

파이프를 경계로  sort process | uniq process 같이 process가 나뉘어져 있다.

이렇게 나뉘어져 있는 process 사이에 pipe로 연결을 해주어 여러 명령어를 한번에 수행할 수 있게 한다.

 

다음 단계로 넘어갈 비밀번호: UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

 

 

 

Bandit Level 9 → Level 10

Level Goal

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.

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

 

 

문제에서 힌트로 비밀번호는 사람이 읽을 수 있는 문자들로 되어 있고 앞에 '=' 문자들이 선행되어 나올 것이라고 한다.

 

step1. ls -l로 파일을 확인후 file의 형태를 알아본다. data.txt는 data 파일임을 알 수 있다.

 

 

step2. data 파일이므로 해당 파일을 우리가 읽을 수 있는 파일로 변환시켜야 한다.

 

step3. strings ./data.txt 명령으로 해당 파일을 읽어낸다.

 

=== password is truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

문제 설명처럼 앞에 '====...'이 붙어서 정답을 알려주고 있다.

 

 

미션에 필요한 리눅스 지식

 

1.strings

strings 명령어는 실행파일의 ascii문자를 찾아 화면에 출력한다.

바이너리 파일 or 오브젝트 파일에 있는 모든 인쇄 가능한 문자열을 추출하여 출력한다.

 

2.ASCII code

여기서 ASCII code라는 개념이 나온다. ASCII code란 무엇인가.

 

ASCII code는 숫자를 이용하여 문자를 표현하도록 숫자를 문자에 연결시키도록 하는 일종의 약속 코드다.

컴퓨터는 1과 0으로 이뤄진 기계이므로 우리가 사용하는 언어와 문자들 또한 컴퓨터는 숫자로 인식한다.

따라서, 문자와 언어를 숫자로 인식하기 위해 각 문자마다 ASCII code를 부여하여

컴퓨터가 인지할 수 있게만든 code라고 볼 수 있다.

ASCII code는 알파벳과 일부 특수문자를 포함하여 총 128개의 문자로 이뤄져 있다.

ex)

A=65

B=66

C=67

`=96

~=126

 

다음 단계 비밀번호: truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

 

 

 

 

Bandit Level 10 → Level 11

Level Goal

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

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

 

 

step1. ls -l로 파일 확인 후 file data.txt로 해당 파일의 type을 확인한다.

 

step2. cat data.txt 명령으로 해당 파일을 읽어본다. 참고로 data.txt 파일 형태는 ASCII 문자로 이뤄진 파일이다.

 

step3. 해당 파일은 base64로 encoding 되어있다고 했으므로 이를 decoding을 해야된다.

         base64로 decoding하도록 한다. (base64 -d ./data.txt)  

 

미션에 필요한 리눅스 지식

1. base64

base64란 8비트 이진데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이뤄진

일련의 문자열로 바꾸는 인코딩 방식을 뜻한다.

즉, binary data를  test로 변경하는 64진법을 통한 encoding방식이다.

 

base64 -d ./data.txt  

base64 -d 는 base 64 를 디코딩 하는 것으로 해독하는 명령이다

여기서는 endcoded data를 decoding해서 풀어야 하므로 위의 -d 옵션을 넣어서 해석하도록 한다.

 

2. encoding vs decoding

encoding:  string -----> bytes

decoding:  bytes ------> string

 

인코딩은 사람이 인지할 수 있는 형태의 데이터를

약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정이다.

 

반대로, 디코딩은 컴퓨터의 언어를 사람이 인지할 수 있는 형태의 데이터로 바꿔주는 과정이다.

base64는 이러한 인코딩을 하는 방법 중에 하나라고 볼 수 있다.

 

 

다음 단계 비밀번호: IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

 

 

Bandit Level 11 → Level 12

Level Goal

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

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

 

 

step1. ls -l,  file data.txt, cat data.txt 명령으로 해당 파일의 type과 내용을 확인한다.

 

step2. file의 내용이 무엇인지 해석할 수 없다. 문제에서 rot13을 적용한 파일 같다.

         rot13에 대한 설명과 tr명령에 대한 설명은 아래에서 하도록 하겠다.

         cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m' 명령으로 해당 파일을 읽어낸다.

 

 

미션에 필요한 리눅스 지식

 

1. rot13

rot13 알파벳 순서를 13개씩 당겨서 순서를 뒤바꾸는 암호화 방법

알파벳의 개수는 총 26개. 여기서 가운데 13번째 알파벳까지를 기준으로 하여

13개씩 순서를 당겨서 순서를 바꾸는 것이다

 

A B C D E F G H I J K L M 

               ↕

N O P Q R S T U V W X Y Z

 

A->N  B->O  C->P ...  L->Y M->Z 

위의 tr명령어를 pipe하기전의 data.txt 파일의 내용은 위와 같은 방식으로 처리가 되었다고 볼 수 있다.

 

 

2. tr 명령어

지정한 문자를 변환하거나 삭제하는 명령어로써

특정한 문자를 다른 문자로 변환하거나 특정문자를 제거하는데 사용되는 명령어이다. (translation의 약자)

 

명령어 사용법

# tr [option] string1 string2

string1의 내용을 string2의 내용으로 바꾸는 형태라고 볼 수 있다.

우리는 여기서 rot13으로 encoding된 것을 decoding하고 싶다.

tr 'A-Za-z' 'N-ZA-Mn-za-m'

A-Za-z : a-z까지 해당 파일에 있는 모든 알파벳 대소문자들을 변경 대상으로 설정을 해놓았다.

N-ZA-Mn-za-m : rot 13을 적용하는 부분으로 n-z까지 부분을 a-m으로 변환.(대소문자 포함)

N-ZA-M     n-za-m 이렇게 나눠서 보면 좀 더 이해하기 편할 것이다.

 

 

다음 단계 비밀번호: 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

 

 

 

 

 

Bandit Level 12 → Level 13

Level Goal

The password for the next level is stored in the file data.txt, which is a hexdump of a file that has been repeatedly compressed. For this level it may be useful to create a directory under /tmp in which you can work using mkdir. For example: mkdir /tmp/myname123. Then copy the datafile using cp, and rename it using mv (read the manpages!)

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd, mkdir, cp, mv, file

 

 

step1. 해당 파일의 type과 내용을 확인해본다.

위와 같이 16진수형태로 파일들이 저장되어 있음을 확인했다.

 

2. /tmp 밑에 문제풀이에 사용할 directory를 생성해보도록 하겠다. 그리고 data.txt 파일을 해당 directory로 옮겨본다.

 

step3. data.txt파일이 hexdump로 이뤄져 있으므로 이를 binary형태로 변환시킨다.

xxd -r data. txt의 결과를 password라는 파일을 만들어 저장시킨다.

password 파일의 type은 gzip으로 압축된 파일이라고 나온다.

 

step4. gzip으로 압축된 파일인 password를 압축해제 해보도록 하겠다.

참고로 password 파일을 gzip 해제를 하려면 해당 파일을 gz파일 형식으로 변환시켜야 한다.

변환 후에 password 파일을 압축 해제하도록 하자.

 

step5. gzip으로 해제한 파일을 열어봤지만 알 수 없는 문자들만 나온다. 해당파일의 type을 확인해보자.

bzip2로 압축된 파일이라고 나온다. 그러면 해당 파일을 bzip 파일로 바꾼 후에 bzip으로 압축 해제해보도록 한다.

 

step6. 중간에 bzip 명령을 헷갈려서 헤매다가 정상적으로 bzip 압축을 해제했다.

file 명령으로 password 파일 type을 확인했다. 이번엔 gzip으로 압축되어있다고 한다. 또 풀어주자

 

step7. password 파일을 gz 형태로 바꾼 후 압축해제하고 type을 확인했다. 이번엔 tar로 archive되어있다.

tar 명령어로 또 풀어주자

 

step8. 여기서부터도 계속 똑같은 방식으로 bzip과 gz tar를 이용한 파일의 압축 풀기 방식으로 문제를 풀도록 한다.

 

 

 

미션에 필요한 리눅스 지식

 

1. tar (tape archiver)

tar는 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령이다.

archiver는 여러 개의 파일을 하나의 파일로 합치는 프로그램을 뜻한다.

tar는 데이터의 크기를 줄이기 위한 파일 압축을 수행하는 것이 아니라

여러 파일들을 하나의 파일로 묶어주는 역할을 하는 것이다.

 

 

2. gzip, bzip

위의 명령은 파일을 압축할 때 사용하는 명령으로 데이터의 크기를 줄이기 위한 압축 명령이다.

문제 풀이에서 사용한 option 중에 -d option은 압축 해제시 사용하는 option이다.

 

bzip option

-d : 파일 압축 해제

-z  : 파일 압축하기

-k  : 원본파일을 보존하며 압축하거나 해제

 

gzip option

-d : 파일 압축 해제

-f : 강제 압축

-v : 압축 혹은 해제시 자세한 정보 출력

-l : 압축 파일의 정보 출력

 

 

 

 

Bandit Level 13 → Level 14

Level Goal

The password for the next level is stored in /etc/bandit_pass/bandit14 and can only be read by user bandit14. For this level, you don’t get the next password, but you get a private SSH key that can be used to log into the next level. Note: localhost is a hostname that refers to the machine you are working on

Commands you may need to solve this level

ssh, telnet, nc, openssl, s_client, nmap

 

 

step1. 

ls -al 로 file 확인 후 sshkey.private 파일을 cat 명령으로 확인한다.

step2.

file 명령으로 해당 file이 rsa private key임을 파악한 후 ssh 명령으로 bandit14로 접속을 시도한다.

ssh의 i옵션은 RSA 인증을 위한 private 키를 읽어 올 아이덴티티 파일을 선택 한다는 뜻이다.

 

step3. yes로 대답하면 bandit14로 접속이 되고 문제에서 언급한 /etc/bandit_pass/를 찾아본다.

 

step4. bandit 14 파일이 존재한다. 이를 열어보고 해당 파일 내용을 확인한다.

 

 

미션에 필요한 리눅스 지식

 

1.비밀번호 없이 ssh 로그인 하는 방식

 

출발지 login server                                            목적지 server

1. ssh-keygen-t rsa (rsa key 생성)                        3. authorized_key 등록 ( 인증키를 등록하는 과정)

2. id_rsa.pub file 전송              -------------------->

4. login 실행시 비밀번호 없이 접속 가능

 

출발지 server에서 rsa kyey를 생성한 후 id_rsa.pub 파일을 목적지 서버에 전송을 한다.

그 이후 목적지 server에서 인증키로 등록을 하고,

출발지 server에서 목적지 server로 로그인을 하게 되면 비밀번호 없이 접속이 가능해진다.

 

 

 

반응형

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

Bandit 원정대 4주차  (0) 2021.07.15
Bandit 원정대 3주차  (0) 2021.07.08
Bandit 원정대 1주차  (0) 2021.06.23