4주차 - [Bandit: Over the wire] Level 0 ~ Level 5
Level 0
https://overthewire.org/wargames/bandit/bandit0.html
OverTheWire: Level Goal
We're hackers, and we are good-looking. We are the 1%. Level Goal The goal of this level is for you to log into the game using SSH. The host to which you need to connect is bandit.labs.overthewire.org, on port 2220. The username is bandit0 and the password
overthewire.org
PuTTY를 이용해 OverTheWire 사이트에서 제공하는 호스트와 포트 번호로 로그인했다.
설정은 Bandit이라는 이름으로 저장해 두었다.
유저네임 bandit0 / 패스워드 bandit0을 입력하고 접속하면 아래와 같이 나온다.
Level0에서 1로 가기 위한 비밀번호는 home 디렉토리에 있는 readme 파일 안에 있다고 한다.
현재 디렉토리 위치를 알아내기 위해 먼저 pwd를 입력했고, /home/bandit0이라는 결과를 얻었다.
home 디렉토리에는 각 계정마다의 홈 디렉토리들이 쭉 들어있다. 그러니까 /home에는 bandit0부터 banditnn번까지의 계정이 쓸 수 있는 디렉토리들이 각각 존재하는 것이다. /home/bandit0에 있다면 bandit0 계정으로 접속한 나는 이미 나의 홈 디렉토리에 들어와 있는 것이 된다. (만약 홈 디렉토리에 있지 않다면 cd ~ 명령어로 바로 홈 디렉토리로 이동할 수 있다.)
ls로 확인해 보니 readme는 bandit0 안에 있는 것 같았다.
cat readme 명령어로 내용을 열람했더니 아래와 같은 비밀번호가 떴다.
위 비밀번호를 조심히 잘 입력해 주자.
+ PuTTY 창에서 복사 붙여넣기를 사용하는 방법
https://dololak.tistory.com/27
[PuTTy] 터미널 창에서 텍스트 복사하기
PuTTY 터미널 창에서 텍스트 복사하기 푸티를 사용하다 보면 텍스트 복사 붙여넣기를 해야할 때가 있습니다. 명령어나 경로명 또는 vi 에디터로 파일을 작성할 때 윈도우 -> PuTTY 터미널창 으로 또
dololak.tistory.com
Level1
이번 패스워드 역시 홈 디렉토리 안에 있는 '-' 이라는 파일 안에 있다는 것 같다.
하지만 이번에는 경우가 좀 다르다. cat - 명령어를 입력해도 무언가 결과가 나오지 않고 프로그램이 계속 돌아가기만 한다. 이유가 뭘까?
ls -al이라는 명령어를 기억할 것이다. 이것은 ls라는 명령어에 a와 l이라는 추가 기능을 -(대쉬)로 연결한 것인데,이처럼 리눅스에서는 '-'(대쉬) 기호가 옵션 인자를 입력하는 데 쓰인다. 때문에 대쉬만 달랑 입력한다면 리눅스는 이를 '대쉬 뒤에 옵션 인자가 곧 입력될 것' 으로 간주하여 당장 동작을 하지 않고 입력만을 기다리게 된다.
위의 경우에 걸려들었다면 일단 Ctrl + C 키를 눌러서 명령을 중단시켜 주자.
그러면 대쉬를 대쉬라는 파일명 자체로 인식되게 할 방법은 없을까?
간단하다. 파일명은 원래 /home/readme 와 같이 자신이 속한 디렉토리와 함께 묶여 다닌다.
여기서 앞의 /home은 현재 사용자가 위치한 디렉토리라면 ./ 이라는 형태로 축약하여 쓸 수 있고, 그마저도 생략이 가능하다. 그러니 생략했던 ./를 다시 파일명 앞에 붙여주어 ./- 와 같은 형태로 적어준다면?
컴퓨터는 대쉬를 파일명이라고 인식하게 될 것이다. 디렉토리가 앞에 붙어 있으니까.
cat ./-를 입력하면 파일이 정상적으로 열리고, 패스워드가 나온다.
Level2
이번에 열어봐야 할 파일 이름은 'spaces in this filename' 이다.
ls로 파일 목록을 열람해보니 과연 그게 파일 이름이 맞는 듯하다.
파일이름에 공백이 있으니 열람에 지장이 있을 것을 예상하고, cat spaces in this filename을 입력하면 역시나 옳은 결과가 나오지 않는다. 'spaces' 'in' 'this' 'filename' 이라는 각각의 단어를 파일이름으로 인식하고 열람을 시도하다 실패한다. (역으로 말하면 이것은 다수의 파일을 열 때 저런 식으로 공백으로 구분지어 넣으면 복수의 파일이 인식된다는 뜻이기도 할 것으로 추측된다. 일단은 기억하고 넘어가자.)
그러면 이 문제는 어떻게 해결하면 될까, 이것도 간단하다.
모든 공백 앞에 역슬래시(\)를 붙여주면 해결된다.
cat spaces\ in\ this\ filename 이런 식으로.
백슬래시와 결합된 공백은 문자열을 분리하는 delimiter로 작용하지 못하는 모양이다.
역시나 패스워드가 나왔고, Level3로 넘어가겠다.
Level3
이번 레벨은 다른 레벨보다 절차가 몇 개 더 있을 뿐 오히려 배운 것 안에서 처리할 수 있어 쉬웠다.
inhere이라는 디렉토리 안의 숨겨진 파일에 패스워드가 있다고 한다. 다음과 같은 절차로 처리했다.
1. ls -al 명령어로 숨겨진 파일과 디렉토리까지 나오도록 리스트를 뽑는다.
inhere이라는 숨겨진 디렉토리가 홈 디렉토리 안에 있는 것을 볼 수 있었다.
2. cd inhere로 inhere 디렉토리 안으로 들어간다.
3. ls -al 명령어로 다시 한 번 숨겨진 파일/디렉토리를 포함한 리스트를 뽑는다.
.hidden이라는 숨겨진 파일을 볼 수 있었다.
4. cat .hidden 명령어로 파일을 연다.
패스워드 획득 성공.
Level4
이번 레벨도 Level3과 마찬가지로 inhere 디렉토리에서 파일을 찾는 것이 목표이다.
단, 유일하게 사람이 읽을 수 있는 파일(only human-readable file)에 패스워드가 있다. 그것을 찾아야 한다.
ls -al 명령어로 숨겨진 디렉토리/파일을 포함한 리스트를 열람하면 inhere 디렉토리가 있다.
cd inhere 명령어로 해당 디렉토리에 들어가서 다시 ls -al 명령어를 입력한다.
그러면 위와 같은 리스트가 보여진다.
저 중 단 한 개의 파일에 패스워드가 있다는 것이다.
별다른 수가 생각나지 않아 파일을 그냥 하나씩 차례차례 열어보기로 했다.
모든 파일의 이름이 대쉬로 시작하기 때문에 파일 이름 앞에는 항상 ./ 을 붙여서 입력하도록 했다.
대부분의 파일 내용이 인간이 읽을 수 없는 형식으로 깨져서 나오는 반면, -file07에서 유일하게 읽을 수 있는 문자열이 나왔다.
이것을 패스워드로 하여 Level5를 열어 보겠다.
Level5
이번 레벨도 inhere 디렉토리에서 파일을 찾아내는 문제다. 다만 이번에는 조건이 세 개 붙었다.
- 인간이 읽을 수 있게끔 쓰여 있을 것 (human-readable)
- 크기가 1033바이트일 것
- 실행파일이 아닐 것 (not executable) (<- 임의로 번역한 것이라 오역일 수 있다)
여차하면 Level4에서처럼 일일이 열어봐가며 풀 생각으로 inhere 디렉토리로 이동해 요소 목록을 뽑았더니, 세상에...
이건 너무 많다. 디렉토리만 20개이니 그 안에 속한 파일들까지 세면 더 많을 것이다. 이 많은 걸 일일이 열어볼 수는 없다... 분명 더 똑똑한 해결 방법이 있을 것이다. 가령 위에 있는 단서들을 이용해 위의 특징들을 가진 파일을 검색해 본다던지. 그래서 구글링을 해본 결과,
find . -size 1033c
위의 명령어를 쓰면 크기가 1033인 파일을 찾을 수 있다고 한다.
(저 명령어 옵션의 세부사항에 대한 정확한 정보를 마땅히 찾지 못한 고로 추측해 보건대,
c는 char 타입을 의미할 것 같다. 실행파일이 아니라고 했으니 해당 파일은 txt 파일일 것이고, 문자(char)는 한 글자당 1바이트이므로 1033c는 1033자짜리 txt파일을 의미하는 옵션이 아닐까 하는 생각인데... 다음에 이와 비슷한 옵션을 워게임에서 사용해볼 일이 있다면 아마 그때 알게 되겠지 싶다.)
명령어 사용 결과 maybehere07 디렉토리의 file2가 유일한 결과값으로 나왔고,
나온 경로대로 파일을 열어 보니 패스워드가 나왔다.
패스워드가 복잡한 문자열인 고로, 다음에 Level6을 열 때 복사 및 붙여넣기를 할 수 있도록
바로 아랫줄에 흰색 글씨로 기입해 두겠다.
DXjZPULLxYr17uwoI01bNLQbtFemEgo7