Linux

bandit 7~14 level 풀이

cucu0417 2025. 5. 17. 12:03

 

level 7 -> 8

무심코 cat data.txt를 입력했다가 많은 양의 데이터들이 쏟아져 나왔다

 

파일 내용에서 특정 문자열을 찾고자 할 때 명령어 grep을 사용해야 한다

 

grep [옵션] [패턴] [파일]

grep millionth data.txt로 data.txt파일 안에 millionth가 포함된 문자열을 출력하였다

 

 

 

 

 

level 8 -> 9

범위에서 중복되지 않은 고유값을 추출하는 unique 함수를 사용해야 한다

그중에서도 2개의 방법이 있다.

 

1. cat 파일이름 | sort | uniq -u

sort : 파일 내용을 정렬할 때 사용

uniq - u : 연속적으로 반복되지 않은 행만 출력

| : 명령어를 이어주는 역할

--> data.txt 파일에서 반복되지 않은 내용을 정렬하여 출력하라

 

2. cat 파일이름 | sort | uniq - c

sort : 파일 내용을 정렬할 때 사용

uniq - c : 연속적으로 반복된 수만큼 행 앞에 표시된다

| : 명령어를 이어주는 역할

 

10번씩 반복되는 내용들 사이 1번만 반복된 내용이 눈에 띈다

 

(sort를 쓰지 않고 해봤다가 정렬되지 않은 내용들이 우르르 쏟아져 나오니 sort를 꼭 쓰도록 하자)

 

 

 

 

 

level 9 -> 10

문자열을 찾을 때 사용하는 grep을 사용했더니 바이너리 파일이여서 안된다는 문구가 뜬다

( 바이너리 파일 - 2진법의 형태로 글자를 저장한 파일)

 

사람이 읽을 수 있는 문자열을 출력할 때 strings 명령어를 사용한다

(strings는 바이너라 파일에서 텍스트를 추출할 때 사용한다)

 

strings을 사용하니 읽을 수 있는 문자열만 출력되었고 그 중에서 앞에 ==가 여러개 붙는 문자열들이 보인다

 

stings(텍스트를 찾는 명령어)과 grep(특정 문자열을 찾는 명령어)를 결합해서 깔끔하게 출력 해봤다

strings data.txt | grap "=="

--> data.txt에서 사람이 읽을 수 있는 문자열을 출력하고 그 내용중에서 ==가 포함된 문자열을 출력해라

 

 

 

 

 

 

level 10 -> 11

base64란?

이진 데이터를 기수-64 표현으로 변환하여 ASCII 문자열 형식으로 나타내는 유사한 이진 데이터를 텍스트로 인코딩 방식

 

인코딩이 되었으니 다시 디코딩을 해야한다

 

base64 인코딩 : base64 파일명

base64 디코딩 : base64 --decode 파일명

cat으로 인코딩 된 문자열을 확인하고 base64 --decode 파일명으로 데이터를 디코딩하였다

 

 

 

 

 

level 11 -> 12

처음에 읽었을 때 13자리씩 회전이 무슨 뜻인지 몰랐는데 참고 자료에 ROT13이 있어 확인을 했다

 

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

--> 즉 a를 입력하면 a로부터 13번째인 n이 출력인 된다는 뜻이다

입력
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
산출
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

 

cat을 통해 내용을 확인하고 rot13으로 문자를 변환 해보니

The password is 7k16JArUVv5LxVuJfsSVdbbtaHGlw9D4 라고 나온다

 

명령어 tr로도 디코딩이 가능하다

tr : 지정된 문자를 다른 문자로 변환 or 삭제하는 명령

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

(A부터 Z까지)를 (N부터 Z까지, A부터 M까지)로 치환, (a부터 z까지)를 (n부터 z, a부터 m까지)로 치환

 

 

 

 

 

level 12 -> 13

참고 파일에 헥스덤프라는 것이 있다

 

헥스 덤프(Hex Dump)란?

메모리나 컴퓨터 파일 또는 저장 장치에서 컴퓨터 데이터(종종 이진수이지만 반드시 이진수는 아님)를 화면이나 종이에 텍스트로 표현한 16진수 보기

 

mkemp

실행하면 /tmp 디렉토리에 임의의 파일이 생성되고 생성된 파일의 이름이 리턴

mkemp -d

임시 디렉토리 생성

mktemp -d 명령어를 이용해 임시 디렉토리를 만든 후 cp [복사 파일 or 디렉토리] [복사될 파일 or 디렉토리]를 사용해서 파일 data.txt 를 디렉토리 /tmp/tmp.yEv7dL4tLh 로 복사했다

 

(위에 사진의 디렉토리 이름은 무시해 주길 바람)

 

ls로 잘 복사된 것을 확인 후 cat을 이용해 내용을 확인해 봤더니 헥스 덤프 내용이 나왔다

 

처음에는 xxd -r [파일명]을 이용해 data.txt 파일의 내용 바이너리 데이터로 변환해서 출력했지만

내가 필요한건 바이너리로 변환된 파일이다

 

그래서 touch [파일명]을 이용해 name 이라는 새 파일을 만들었고

xxd -r data.txt > name 을 이용해 바이너리로 변환된 내용을 name에 저장했다

 

파일 압축을 해제할 때 2가지 명령어가 있다

1. gzip -d [파일명.gz]

2. bzip -d [파일명.bz2]

 

2개의 차이점은 어떤 명령어로 압축을 했냐에 따라 확장자가 다르다는 것이다

  1. gzip [파일명]으로 압축을 했으면 확장자는 .gz
  2. bzip [파일명]으로 압축을 했으면 확장자는 .bz2

 

압축된 파일을 풀기 위해선 확장자에 따른 알맞은 명령어를 사용해야한다

 

일단 어떤 방법으로 압축을 했는지 알아보기 위해

file [파일명] : 파일의 종류를 알려주는 명령어

를 사용하여 확인했다

확인해 보니 gzip으로 압축된 파일이다

 

mv name name.gz로 이름을 name.gz로 바꾸고 gzip 압축 푸는 명령어를 이용해 풀었다

 

그렇게 계속 유형을 확인하고 이름바꾸고 압축 풀고를 반복했다

 

중간에 gzip으로 압축된 파일인데 bzip2로 풀려고 해서 경고 메시지가 나왔다

다시 잘 확인하고 알맞은 명령어를 사용해서 풀었다

 

중간에 오류 메시지는 오타 때문에 발생한 것이다

 

마지막에 file 유형을 확인했더니 tar이 나왔다

 

tar

여러개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령어

 

tar cvf [파일명.tar] [폴더명] : tar로 압축하기

tar xvf [파일명.tar] : tar 압축 풀기

 

tar의 확장자는 .tar 이다

파일명을 name.tar로 바꾸고 계속 풀었다

계속 압축을 풀때 -d를 빼먹는다

 

그렇게 계속 반복하면서 풀다가 마침내 사람이 읽을 수 있는 문자열 ASCII text가 나왔다

cat으로 문자를 읽어보니 다음 level의 비밀번호가 나왔다

 

 

 

 

 

leve13 -> 14

 

ls를 입력하고 sshkey.private가 있길래 cat으로 내용을 확인해 봤지만 별다른 내용이 없다

 

RSA : 공개키 암호 알고리즘

 

 

cd /etc/bandit_pass로 들어가서 ls로 확인하니 많은 파일이 나왔다

 

예전 단계에서 file ./*로 파일이 많을 때 모든 파일의 유형을 확인한 것이 기억나 입력했더니

bandit13 파일만 유일하게 사람이 읽을 수 있는 내용이였다

 

cat으로 확인해보니 bandit13 비밀번호였다..

 

그러다 ssh 명령어를 구글링하다보니 ssh key로 접속하는 방법이 나왔다

ssh [ip 주소]

 

ssh 키가 다른 경로에 있는 경우

ssh -i [ssh키 파일 위치] [계정]@[ip 주소] -p [포트]

ssh -i sshkey.private bandit14@bandit.labs.overthewire.org -p 2220 입력하고 yes라고 입력하니 연결이 되었다

 

다시한번 cd /etc/bandit_pass 입력하고 file ./*를 입력하였더니

이번엔 bandit14가 ASCII text으로 변해있다

cat ,/bandit으로 ASCII text인 파일 내용을 확인하니 비밀번호가 나왔다

 

'Linux' 카테고리의 다른 글

[PHP] Dockerfile, Docker-compose.yml 만들기  (0) 2025.08.04
리눅스 관리 권한 체계 및 /etc/passwd 와 /etc/shadow  (0) 2025.05.23
bandit 0~7 level 풀이  (0) 2025.05.17
vi 사용법 정리  (0) 2025.05.17
리눅스 기본 명령어 정리  (0) 2025.05.17