Wargame/bandit

[리눅스] Bandit Level 4 -> Level 5

핏디 2021. 4. 3. 23:15
SMALL

[문제]

문제의 핵심은 inhere 디렉토리에서 사람이 읽을 수 있는 파일을 찾아야 하는 것입니다!

아마 그 파일 속에 password가 존재하겠죠?

 

바로 시작해보겠습니다--!


[풀이]

bandit4 계정으로 접속해서 가장 먼저 해야하는 일은 뭐다??

--> ls 로 파일 및 디렉토리 리스트 확인하기!

 

확인해보겠습니다 ㅎㅎ

이번 문제에도 inhere이라는 디렉토리가 존재하는데요!

 

cd 명령어를 통해 inhere 디렉토리로 이동해보겠습니다.

 

지난 레벨에서 현재 경로 확인하는 법 알려드렸는데 기억나시나요?

기억 안나시는 분은 bandit level 3 -> level 4 를 참고해주세요!

 

pwd 명령어를 통해 현재 위치가 inhere 디렉토리에 있음을 확인할 수 있습니다.

 

무사히 이동했으면 inhere 디렉토리 속에는 어떤 파일과 디렉토리가 있을지 확인해봐야겠죠??

 

ls -al 명령어를 통해 확인하니 -file 형태의 파일들을 확인할 수 있는데요!

> 이 파일들 중에서 인간이 읽을 수 있는 파일을 찾아야 할 것 같네요.

 

그렇다면 또 한가지 의문이 들 수 있겠죠?

 

인간이 읽을 수 있는 파일..?
파일 형태를 어떻게 찾는거지?

리눅스 명령어를 이용하면 빠르게 찾을 수 있답니다 ㅎㅎ

 

그 명령어는 바로바로 file 입니다!

 

 file 명령어를 사용하면 파일들의 종류와 속성을 파악할 수 있는데요.

 

ASCII 나 data, text 등의 형식을 볼 수도 있고,

실행 파일의 경우 ELF~~~~ 이런식으로 나타난다거나

압축 파일의 경우 압축 방식에 대해서도 파악할 수 있는 명령어입니다.

 

예제를 보시면 이해가 잘 되실 것 같아요 ㅎㅎ

 

문제의 파일 목록 중에서 -file00을 한 번 살펴볼까요?

파일 이름에 -가 있는 경우 어떻게 사용해야 하는지 기억나시죠??ㅎㅎ

(기억이 안나신다면 bandit level 1 -> level 2 를 참고해주세요! )

 

data 라는 단어가 보이시나요??!

 

-file00의 타입이 data라고 하는데요!

 

data 는 어떤 것을 말할까요?

직접 보는 것이 좋겠죠?!

 

data 형식의 파일은 우리가 읽기에는 어떤 것을 말하는지 알기 어렵게 나온답니다.

 

ascii 파일도 확인해볼까요?

 

 

이렇게 파일들의 종류와 내부를 확인해보았습니다.

 

file 명령어를 활용하는 방법은 다양한데요!

제가 시도한 방법들을 소개해드릴게요.

 

 

1. 모든 파일 하나씩 확인하기

생각만해도 끔찍하죠?

지금이야 10개의 파일만 있으니 하나씩 봐도 볼 수 있지만...

파일이 100번까지 있다면 전 아마 키보드를 내려쳤을거에요..

 

우선 이렇게 하나씩 file 종류를 확인해서 ASCII text가 나올 때까지 보는 방법도 있습니다!

 

 

2. 와일드카드(*)를 이용해 확인하는 방법

* 은 와일드카드로 ./* 는 현재 경로의 모든 파일을 가져오라는 명령이 되는데요.

와일드카드는 쉽게 말하면 모든 것을 가져오라! 라고 말할 수 있을 것 같아요.

 

무엇이 되었던 가져오는 특수 문자입니다.

만약 file ./-f* 이렇게  사용했다면 -f로 시작하는 모든 파일에 대한 타입을 알려주게 됩니다.

-f 뒤는 어떤 것이 오더라도 상관없다는 것을 의미하죠 ㅎㅎ

 

이렇게 *를 사용하므로써 현재 경로에 위치한 모든 파일들의 파일 종류를 한 눈에 확인할 수 있답니다~

 그 뒤는 1번 방법과 마찬가지로 -file07 파일을 cat 명령으로 읽으면 되겠죠?

 

 

3. 파이프라인(|)와 grep 명령 이용하기

file ./* | grep "text" 명령을 통해 현재 경로의 모든 파일 중 text라는 문자를 가진 파일을 찾을 수 있는데요!

 

file ./* 이 명령은 2번과 동일하니 생략하도록 하겠습니다.

 

파이프라인은 생소하실 것 같은데요!

 

그렇지만 리눅스에서 빠질 수 없는 파이프!

알고 계셔야 해요!

 

파이프라인은 입출력에 관여하게 되는데요..!

실제 파이프와도 비슷한 역할을 합니다.

 

좋은 이미지가 있어 가져왔는데요!

출처 https://gracefulprograming.tistory.com/92

이렇게 어떠한 입력(예 file ./-file00)에 대해 출력 결과를 반환(예 data)하는 것이 여러 개가 있다고 가정해볼까요?

 

문제를 예로 들자면,

먼저, 현재 디렉토리에 위치한 파일들의 종류를 파악하는 것이 필요하고

그 중에서도 인간이 읽을 수 있는 text 형식인 파일을 찾아야 겠죠!

 

즉, file ./* 과 grep "text" 두가지의 명령이 필요해요!

 

 

출처 https://gracefulprograming.tistory.com/92

파이프를 사용하면 이렇게 두 명령어를 연결해주는 역할을 한답니다!

file ./* 명령의 결과를 파이프로 연결된 grep "text"의 입력으로 연결하게 되는 것이죠.

 

그럼 inhere 디렉토리 내부의 파일들의 type 들 중 text가 포함된 파일을 찾게 되는 결과가 되겠네요!

이렇게 말이죠!

 

그런 다음에는 어떻게 해야할 지 감이 오시나요??ㅎㅎ

cat 명령어를 통해 -file07번의 내용을 읽기만 하면 패스워드를 확인할 수 있답니다~

 

 

4. sort 명령어 이용

sort 명령어는 파일의 내용을 정렬해주는 역할을 하는데요!

역시나 sort ./*로 현재 디렉토리 내의 모든 파일들의 내용을 정렬하면 패스워드를 볼 수 있겠죠?

 

모든 파일이 text 형식이라면 어떤 것이 패스워드일지 파악하기 어렵겠지만

현재 문제에서는 패스워드가 존재하는 파일을 제외하면 모두 data 형식의 사람이 읽을 수 없는 파일이기 때문에

sort 명령으로 쉽게 파악할 수 있답니다 ㅎㅎ

이렇게 말이에요~

그렇지만 파일의 이름까지 찾으려면 번거롭지만

내용만 필요한 지금과 같은 상황에서는 한눈에 파악할 수 있습니다.

 

 

5. strings 명령어 이용

리눅스 명령어에는 strings라는 명령어도 있는데요!

이 명령어는 파일의 내용 중에서 문자열만 추출해주는 명령어랍니다~

 

구해야 하는 것도 text 형식인 문자열이니 유용할 것 같지 않나요??ㅎㅎ

짠!

sort 명령어 보다 깔끔하게 패스워드를 한 눈에 파악할 수 있답니다~

 

또 다른 방안이 있다면 댓글로 알려주세요 : ) 

 

이번에도 ~~~~~~~~

성! 공!

 

다음 level에서 만나요~

 

LIST