🌱초급

[Bandit] Level 4 → Level 5

Bandit Level 4 풀이 과정을 설명합니다.

4분 읽기

문제

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.

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

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


해결

  • bandit4 계정으로 접속해서 가장 먼저 해야하는 일은 ls 로 파일 및 디렉토리 리스트 확인하기입니다.

 

image.png
  • 이번 문제에도 inhere이라는 디렉토리가 존재하고 있습니다.

 

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

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

  • 이동했으면 inhere 디렉토리 속에는 어떤 파일과 디렉토리가 있는지 확인해봐야합니다.

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

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

    • 리눅스 명령어 중 file을 이용하면 빠르게 찾을 수 있습니다.

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

    • ASCII 나 data, text 등의 형식을 볼 수도 있고, 실행 파일의 경우 ELF~~~~ 이런식으로 나타난다거나, 압축 파일의 경우 압축 방식에 대해서도 파악할 수 있는 명령어입니다.

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

image.png
  • data 라는 단어가 보이시나요?

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

    • data 는 어떤 것을 말할까요?

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

  • file 명령어를 활용하는 방법은 다양합니다. 제가 시도한 방법들을 소개해드리도록 하겠습니다.


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

image.png
  • 생각만해도 끔찍합니다.

  • 지금이야 10개의 파일만 있으니 하나씩 봐도 볼 수 있지만... 파일이 100번까지 있다면 전 아마 키보드를 내려쳤을것 같네요.

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

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

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

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

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

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

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

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

  • 그 뒤는 1번 방법과 마찬가지로 -file07 파일을 cat 명령으로 읽으면 되겠습니다.

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

image.png
  • file ./* | grep "text" 명령을 통해 현재 경로의 모든 파일 중 text라는 문자를 가진 파일을 찾을 수 있습니다.

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

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

 파이프라인이란?

  • 파이프라인은 입출력에 관여하게 되고, 실제 파이프와도 비슷한 역할을 합니다.

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

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

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

  • 문제를 예로 들자면, 먼저 현재 디렉토리에 위치한 파일들의 종류를 파악하는 것이 필요하고 그 중에서도 인간이 읽을 수 있는 text 형식인 파일을 찾아야 됩니다.

    • 즉, file ./*grep "text" 두가지의 명령이 필요합니다.

image.png
  • 파이프를 사용하면 이렇게 두 명령어를 연결해주는 역할을 합니다.

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

  • 그럼 inhere 디렉토리 내부의 파일들의 type 들 중 text가 포함된 파일을 찾게 되는 결과가 나오게 됩니다.

image.png

4. sort 명령어 이용

  • sort 명령어는 파일의 내용을 정렬해주는 역할을 합니다.

  • sort ./*로 현재 디렉토리 내의 모든 파일들의 내용을 정렬하면 패스워드를 볼 수 있습니다.

  • 모든 파일이 text 형식이라면 어떤 것이 패스워드일지 파악하기 어렵겠지만, 현재 문제에서는 패스워드가 존재하는 파일을 제외하면 모두 data 형식의 사람이 읽을 수 없는 파일이기 때문에 sort 명령으로 쉽게 파악할 수 있습니다.

image.png
  • 파일의 이름까지 찾으려면 번거롭지만 내용만 필요한 지금과 같은 상황에서는 한눈에 파악할 수 있습니다.

5. strings 명령어 이용

  • 리눅스 명령어에는 strings라는 명령어도 있습니다.

    • 이 명령어는 파일의 내용 중에서 문자열만 추출해줍니다.

image.png
  • sort 명령어 보다 깔끔하게 패스워드를 한 눈에 파악할 수 있습니다.

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


댓글

이 글이 마음에 드셨다면 반응이나 댓글을 남겨주세요!

댓글을 작성하려면 로그인하세요

로딩 중...
공유
sikk

sikk

Author

보안을 공부하는 개발자입니다. Web2/Web3 보안과 시스템 해킹에 관심이 많습니다.

뉴스레터 구독하기

새로운 포스트가 올라오면 이메일로 알려드려요!