Bandit 0~14
Bandit 0->1
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.
ls : 현재 디렉토리에 있는 내용을 출력
cat : cat 명령 뒤에 파일 이름을 입력하면 그 파일의 내용을 출력합니다
ls를 사용하여 디렉토리에 무엇이 있나 확인해보니 readme라는 파일이 있었고 cat(파일 내용 출력)을 하면 비밀번호
boJ9jbbUNNfktd78OOpsqOltutMc3MY1 가 나온다!
Bandit 1->2
The password for the next level is stored in a file called - located in the home directory
home 디렉토리에 '-'라는 이름의 파일에 비밀번호가 저장되어 있다.
cat -를 쳐보니 계속 입력값을 똑같이 출력하는 오류에 걸렸다. 파일명이 대시기호이기 때문이다. 이럴때는 그 파일의 경로까지 작성해주면 된다. cat ./- 을 입력하면 -파일의 내용이 출력된다. 비밀번호는!
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9 가 나온다.
Bandit 2->3
The password for the next level is stored in a file called spaces in this filename located in the home directory
파일명이 'spaces in this filename'이다.... cat spaces in this filename을 입력해보니 오류가 난다. 파일명에 공백이 있기 때문이다. 파일명을 ""따옴표로 감싸주면 된다. cat "spaces in this filename"을 입력해서 나온 비밀번호는!
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK 다!
Bandit 3->4
The password for the next level is stored in a hidden file in the inhere directory.
cd : cd 명령어 뒤의 폴더로 이동한다.
ls로 home 디렉토리에 있는 파일 혹은 폴더를 찾아보니 inhere이라는 디렉토리가 있다. cd inhere를 사용해 inhere 디렉토리로 이동한다.
ls를 쳐보니 아무것도 없다..ㄷㄷ 문제를 보니 hidden file 이였다. ls 명령어에서 옵션을 넣을 수 있다. 그 수많은 옵션중 -a(숨겨진 파일이나 디렉토리까지 보여준다)를 사용하면 .hidden이라는 파일이 존재하고, cat .hidden으로 파일 내용을 출력시키면 비밀번호가 나온다.비밀번호는!
pIwrPrtPN36QITSp3EQaw936yaFoFgAB 다!
Bandit 4->5
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.
file : 파일의 종류 확인 및 파일 속성 값을 확인할때 사용하는 명령어
human-readable..사람이 읽을 수 있는..? 사람이 읽을 수 없는 파일이 존재하나 싶었다.
cd inhere로 inhere 디렉토리로 이동하고 ls -a로 inhere 디렉토리 안의 파일을 모두 나열하니 -file00부터 -file09까지 10개의 파일이 있다. file 명령어로 하나하나 다 파일의 종류를 확인해보니 다 data 타입의 파일이다가 -file07이 ASCII text 타입이었다. 그래서 이걸 열어보니!!! 비밀번호가!!!
koReBOKuIDDepwhWk7jZC0RTdopnAYKh 다!!
다 끝나고 file 명령어의 옵션을 찾아보다가,, 모든 파일을 하나하나 file ./-file0n 할 필요 없이 file ./*하면 모든 파일의 종류가 나온다는걸 알았다.
Bandit 5->6
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
- not executable
find : 리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령입니다
find의 명령어 옵션 중에는 -size가 있다. 파일의 크기로 검색할 수 있는 건데, 문제에서 준 속성 중 1033 bytes in size가 있으니 cd inhere로 inhere 디렉토리로 이동한 후 find -size 1033c를 입력하니
./maybehere07/.file2라고 떴당. cd maybehere07을 사용해 이동후 cat./.file02로 file02의 내용을 출력하니 비밀번호는!!!
DXjZPULLxYr17uwoI01bNLQbtFemEgo7 다!
Bandit 6->7
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
모든 조건을 충족하는 파일을 찾기 위해서는 file 명령어에 옵션으로 위의 속성을 다 넣어주면 된다.
'file -user bandit7 -group bandit6 -size 33c' 이렇게! 그런데 로그인만 한 상태에서 find 명령어를 돌려주면 검색결과가 없다. 현재 디렉토리 내에서는 존재하지 않다는 말이다. 그래서 'cd ..'를 이용해 이전 디렉토리로 이동해 똑같이 find 명령어를 입력한다. 위 조건을 충족하는 6개의 파일이 결과로 출력됐다. 하지만 6개 파일 모두 Permission denied.. 권한이 없다! 그럼 다시 한 번 이전 디렉토리로 이동해 find 명령어를 돌려본다. 와우.. 적어도 25개..? 정도의 파일이 결과로 출력되었다. 여기서 매의 눈으로 하나하나 보고 있으면 단 하나의 파일만 Permission denied라는 재수없는 문구가 없다! 바로 ./var/lib/dpkg/info/bandit7.password 이 파일이당.
cat ./var/lib/dpkg/info/bandit7.password 을 입력하묜은!? 출력된 비밀번호는!
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs 다!
Bandit 7->8
The password for the next level is stored in the file data.txt next to the word millionth
grep : 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어
data.txt에서 millionth라는 단어 다음에 비밀번호가 있다고 하니 'grep millionth data.txt'를 입력해주니!
millionth cvX2JJa4CFALtqS87jk27qwqGhBM9plV라고 출력이 되었고 여기서 비밀번호는!
cvX2JJa4CFALtqS87jk27qwqGhBM9plV 다!
Bandit 8->9
The password for the next level is stored in the file data.txt and is the only line of text that occurs only once
sort : 사용자가 지정한 파일의 내용을 정렬하거나, 정렬된 파일의 내용을 병합할 떄 사용
uniq : 중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제한다.
data.txt에 단 한 번만 나온 텍스트 한 줄이 비밀번호라고 하니 sort와 uniq를 같이 써보자.
'sort data.txt | uniq -c' 여기서 뒤에 붙은 -c는 uniq 명령어의 옵션이다. count의 c로 같은 라인이 몇번 나오는지를 표시해준다.
위 명령의 출력값중 단 하나 있는 라인이 있다! 비밀번호는!
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR 다.
Bandit 9->10
The password for the next level is stored in the file data.txt in one of the few human-readable strings, beginning with several ‘=’ characters.
strings : 파일에서 출력 가능한 문자들을 보여주는 리눅스 명령어 ex. 바이너리 파일에서 문자열 출력
주어진 힌트는 몇 개의 읽을 수 있는 문장 중 여러개의 '=' 기호로 시작하는 문장이다.
data.txt는 바이너리 파일이므로 strings data.txt를 입력해주면 여러 줄이 출력이 되는데 그 중에서 =======뒤에 있는 비밀번호는!!!
truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk 다!
Bandit 10->11
The password for the next level is stored in the file data.txt, which contains base64 encoded data
base64 : 문자열을 base64로 언코드 또는 디코드 해주는 명령어
base64란 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념
문제에서 data.txt에는 base64로 인코딩된 데이터가 들어있다고 하니 디코딩(옵션 -d) 시켜주면 되겠다.
base64 -d data.txt를 입력해주면 The password is IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR가 출력되므로 비밀번호는!!
IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR다!!
Bandit 11->12
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
tr : translate의 약어로써, 지정한 문자를 바꿔주거나 삭제하는 명령어. 특정한 문자를 다른 문자로 바꾸거나 또는 특정 문자를 제거하는데 쓰인다.
A는 13 뒤로 간 N, M은 Z으로 저장된 data.txt를 원상복구 시켜 읽으려면 tr 명령어를 사용하면 된다.
'cat data.txt| tr a-mn-zA-MN-Z n-za-mN-ZA-M' 이 명령어를 해석해보면 "a~m은 n~z로 바꿔주고 n-z는 a-m으로 바꿔주고! 대문자도 ~~ 바꿔준 다음 출력해줘봐봐"다. 출력값은 The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu. 비밀번호는!!
5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu 다!
Bandit 12->13
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!) 문제가 ㅈㄴ 길다.
cp : 파일을 복사하는 명령어 cp (파일명) (복사할 곳)
xxd : 바이너리 데이터를 16진수로, 16진수 데이터를 바이너리 데이터로 변환해주는 명령어
gzip : 리눅스에서 압축을 담당하는 명령어
mv : 파일 및 디렉토리를 다른 경로로 이동하는 역할, 파일명과 확장자, 디렉토리 이름을 바꿀 수도 있당
bzip2 : 압축 소프트웨어, gzip, zip보다 압축률이 좋지만 약간 느림 ㅎㅎ
tar : 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령어
일단 문제가 조언해준대로 mkdir을 사용해 /tmp 디렉토리 내에 내 디렉토리를 만들어주고 그 곳에 data.txt를 복사해보자.
xxd -r data.txt gun -r은 16진수 데이터를 바이너리 데이터로 변환할때 사용하는 xxd 명령의 옵션이다. 뒤에 오는 파일 이름은 변환 후의 값을 저장하는 파일이다. 그 후 gun 파일의 종류를 알고자 file gun을 입력하였더니
gun: gzip compressed data, was "data2.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix라고 출력이 된다. 뭐,...gzip 압축 데이터 뭐시기 인것 같으니 gzip 명령어를 사용해본다. gzip -d gun 야레야레,, 오류 발생. 구글링 결과 gzip으로 압축을 풀려면 .gz 확장자여야만 하는거 같다. 'mv gun gun.gz'를 입력해 gun 파일을 gun.gz파일로 바꿔준다. 그리고 다시 gzip -d gun.gz를 입력하면 gzip: ./gun.gz: decompression OK, trailing garbage ignored이 출력된다. OK 이 두 글자만 봐도 뭐,, 성공적이닷
ls를 쳐보니 gun.gz가 아닌 gun이 있다. 압축이 풀리면 .gz는 사라지는거 같다. file gun을 입력하니 세상에나,, gun: bzip2 compressed data, block size = 900k.. 아까와 비슷하게 mv ./gun ./gun.bz로 바꿔준다.(bzip 확장자는 .bz) bzip2 -d ./gun.bz 해주고 다시 file gun 하면 와 이 망할것 이번에는 gzip이래 ㅎㅎ 다시 확장자 바꿔주고~ gzip -d gun.gz해주고~ file gun 하면~gun: POSIX tar archive (GNU)
ㅎㅎㅎㅎ뭔 소리야ㅎㅎㅎtar은 뭔가 많이 본 것 같다. 다시 mv ./gun ./gun.tar로 확장자 바꿔주고 tar -xvf ./gun.tar (-xvf는 압출 풀때! -cvf는 압축 할때!) 를 입력하면 data5.bin이 나온다. 뭔가 아이템을 얻은 느낌이다. file ./data5.bin 으로 파일 확인해주면 이것도 tar~ 똑같이 압축해제 해주면~data6.bin이 나오고 이건 또 bzip 압축 파일이다. 또 풀어주고 ~ 나온 data6는 tar 압축 파일이고~ 풀어주면 data8.bin~ 또 이건 gzip 압축 파일~ 이걸 풀어주면 뚜둥..data8 이 생긴다. file data8을 입력하니 data8: ASCII text. 하 눈물난다ㅠㅠㅠㅠ
cat data8 => The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL 비밀번호는!!
8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL 이다!
Bandit 13->14
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
도대체 뭐라는걸까. 사이트가 추천해준 명령어들을 검색해보자. ssh는 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용프로그램 또는 그 프로토콜을 가리킨댄다,, 뭐라는거냐. ls를 입력하였을때 sshkey.private라는게 있다.. 저게 비번인거 같다. bandit14계정으로 로그인을 하며 암호키는 요기 있는 sshkey.private을 사용한다. @뒤에는 저기 문제에 나와있듯이 localhost를 붙여주면 지금 내가 있는 서버 그대로 로그인을 할 수 있다 . 즉 ssh bandit14@localhost 하고 그 뒤에 공개 키 인증을 위한 id가 읽히는 파일을 선택하는 옵션! -i를 사용해 저 암호키를 넣어주면 될거 같다
ssh bandit14@localhost -i ./sshkey.private를 입력하면 뭐시기 영어가 나오고 yes를 치면 bandit14으로 접속이 된다.
bandit14으로 접속하고 나서 문제에서 bandit14만 읽을 수 있는 파일에 비밀번호가 있다고 했으니 cat /etc/bandit_pass/bandit14 을 입력하면 비밀번호가 출력된다. 비밀번호는!!
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e 다!
댓글
이 글 공유하기
다른 글
-
포너블 스터디 6주차 과젯! [Dreamhack wargame off_by_one 000-001]
포너블 스터디 6주차 과젯! [Dreamhack wargame off_by_one 000-001]
2020.05.29 -
포너블 스터디 2주차 과제 제출
포너블 스터디 2주차 과제 제출
2020.04.10 -
포너블 스터디 2주차(달고나 문서 요약)
포너블 스터디 2주차(달고나 문서 요약)
2020.04.10 -
포너블 2주차 과제 드림핵 요약
포너블 2주차 과제 드림핵 요약
2020.04.09