OverTheWire: Bandit - Level 4 → Level 5

full_accel·2020년 12월 13일
2

Over The Wire: Bandit

목록 보기
7/9
post-thumbnail

Bandit Level 4 → Level 5 - 문제 원문


https://overthewire.org/wargames/bandit/bandit5.html

Level Goal
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.

Commands you may need to solve this level
ls, cd, cat, file, du, find

해석


  • 패스워드는 inhere 경로의 인간이 읽을 수 있는(human-readable) 파일에 있다.

공략


이번 레벨 역시 쉽다.

상황 파악

bandit4@bandit:~$ ls
inhere
bandit4@bandit:~$ cd inhere/					[1]
bandit4@bandit:~/inhere$ ls					[2]
-file00  -file01  -file02  -file03  -file04  -file05  -file06  -file07  -file08  -file09
bandit4@bandit:~/inhere$ file ./-file01				[3]
./-file01: data
bandit4@bandit:~/inhere$ cat ./-file00				[4]
▒�/`2ғ▒%▒▒rL~5▒g▒▒ ▒▒▒▒▒bandit4@bandit:~/inhere$
  • [1] inhere 경로로 이동한다.
  • [2] ls로 확인하니 뭐가 많다.
  • [3] file ./-file01로 확인하니 data 파일이다.
  • [4] cat ./-file00으로 찍어보니 data 파일은 인간이 읽을 수 없다. human-readable 이 이런 뜻이였다.
  • 사이즈를 보아하니 저 여러개의 파일 중에 human-readable한 파일이 있긴 한가보다.
  • 0번파일부터 9번 파일까지 다 찍어보는건 수능 수리영역 주관식 수열 문제를 풀 때 100번째 항 찾기를 손으로 푸는 것 같은 근성을 부리는 것 같아 찝찝하다. 출제자의 의도를 존중해줘야 할 것 같다.

해결 방법: *(asterisk, 별표)를 사용한다.

bandit4@bandit:~/inhere$ file ./*				[1]
./-file00: data
./-file01: data
./-file02: data
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text						[2]
./-file08: data
./-file09: data

bandit4@bandit:~/inhere$ cat ./-file07				[3]
k??????????????????????????????
  • [1] file ./*를 입력하여 현재 경로의 모든 파일을 의미하는 ./*를 file을 인자로 넘겨 준다.
  • [2] 07번 파일만 ASCII text 이다.
  • [3] cat으로 열어보니 패스워드 같은 것이 보인다.

다음 단계로 넘어가자
ssh -p 2220 bandit5@bandit.labs.overthewire.org

조금 더 세련된 해결 방법: |(파이프라인)에 grep을 사용

bandit4@bandit:~/inhere$ file ./* | grep "text"			[1]
./-file07: ASCII text						[2]
bandit4@bandit:~/inhere$
  • human-readable 이라고 했으니 대충 text 파일이라고 넘겨 짚고 아래의 명령어를 사용해서 text 파일만 출력해 본다.
  • [1] file ./* | grep "text"
    • 현재 경로의 모든 파일에 대해서 file 명령어를 사용하면서 출력된 결과를
    • | (파이프라인) 을 사용하여 grep 명령어에 전달하고
    • grep은 전달받은 내용에서 text라는 문자열을 검색하여
    • [2] 해당되는 라인만 출력해준다.

TMI


  • 리눅스에서 ./*(asterisk, 별표)는 현재 경로의 모든 것을 의미한다.
  • 리눅스에는 sudo rm -rf /* 라는 지옥에서 온 명령어가 있다.
  • |(파이프라인)은 입출력의 방향을 바꾸어 준다.
    • ls | grep "mysql"의 경우 ls 명령어로 출력한 현재 디렉토리의 내용을 grep 명령어의 입력으로 전달해 준다. grep 명령어는 전달받은 내용에서 "mysql"이라는 텍스트가 포함된 라인만 출력해준다.
  • grep(global regular expression print): 위에서 사용한 예와 같이 입력으로 들어온 텍스트에서 원하는 텍스트가 포함된 라인만 출력할 수 있다.
profile
스스로 배운 것이 오래 간다.

1개의 댓글

comment-user-thumbnail
2023년 1월 15일

저는 그냥 하나하나씩 다 찍어봤는데 저런 방법이있었다니 나중에는 저런 방법으로 한번 해봐야겠어요!

답글 달기