🌱초급

[Bandit] Level 5 → Level 6

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

4분 읽기

문제

Level Goal

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

  • 문제를 보니 이번에도 inhere 디렉토리 속에 password 가 존재하네요.

  • 그런데 몇 가지 조건이 생겼습니다.

 인간이 읽을 수 있고, 1033 바이트이면서, 실행 불가능한 파일을 찾아야 한다.

 무엇을 의미할지 문제를 통해 살펴보겠습니다.


해결

image.png
  • ls -al 명령어를 통해 inhere 디렉토리를 확인할 수 있고, 바로 inhere 디렉토리로 이동해보겠습니다.

 

image.png
  • 지난 레벨과 달리 이번에는 inhere 디렉토리에 다수의 디렉토리들이 존재합니다.

  • 여기서 다시 한 번 문제의 조건을 떠올려보겠습니다.

 인간이 읽을 수 있고, 1033 바이트이면서, 실행 불가능한 파일을 찾아야 한다.

  • '검색'이 필요하다는 생각이 드는데요.

    • 리눅스에는 검색 기능을 지원하는 명령이 있습니다.

    • 바로 findgrep 입니다. (명령어에 대한 설명은 [핵심]을 참고해주세요)

1. find 명령
image.png
  • find의 다양한 옵션 중에서도 파일의 크기 단위로 검색할 수 있는 -size 옵션이 있습니다.

  • *주의해야하는 것은 1033바이트인 파일을 찾고 싶을 때 그냥 1033을 적는 것이 아니라 1033c라고 적어줘야 합니다.

  • 다행스럽게도 1033바이트인 파일이 하나가 존재하네요.

image.png
  • ./maybehere07/.file2 파일을 읽었더니 password가 존재하는 것을 알 수 있었습니다.

image.png
  • 해당 파일을 읽을 수 있었던 이유는 bandit5 계정이 갖는 권한 중 읽기 권한이 있기 때문입니다.

 

image.png
  • find의 옵션을 다르게도 사용할 수 있습니다.

  • 각각의 옵션에 대한 내용은 man 페이지에 있는 것을 가져왔습니다.

-executable 옵션

Matches files which are executable and directories which are  searchable  (in  a  file  name  resolution sense).   This  takes  into account access control lists and other permissions artefacts which the -perm test ignores.  This test makes use of the access(2) system call, and so can be  fooled  by  NFS  servers which  do UID mapping (or root-squashing), since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information held on the server.  Because this  test  is  based only  on  the result of the access(2) system call, there is no guarantee that a file for which this test succeeds can actually be executed.

-readable 옵션

Matches files which are readable. This takes into account access control lists  and  other  permissions artefacts which the -perm test ignores.  This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing), since many systems  implement  access(2) in the client's kernel and so cannot make use of the UID mapping information held on the server.

  • 이 외에도 find 옵션이 매우 많기 때문에 관심있으시다면 man 페이지를 참고해주세요!

2. du 명령어 사용

image.png
  • du 명령어는 디스크의 사용량에 따라 나열하는 명령어입니다.

  • 파일 명 앞에 숫자들이 바로 해당 파일이 디스크를 얼마나 사용하는지 나타낸 것입니다.

    • 즉, 디스크 사용량은 파일의 크기라고 볼 수 있습니다.

  • 문제에서 파일의 크기가 1033 바이트라고 했으니, 이 중에서 1033 사이즈인 파일을 찾으면 됩니다.

image.png

3. file 명령어 사용

image.png
image.png
  • find -size 1033c만 해도 바로 찾을 수 있긴 하지만, file 명령어를 활용하면서 찾을 수 있는 방법을 소개해드리도록 하겠습니다.

  • 1번째와 2번째의 차이점은 grep text죠? 명령을 각각 해석해보겠습니다.

  • 우선 file maybehere*/* 은 현재 inhere 디렉토리 내부에 존재하는 maybehere로 시작하는 모든 디렉토리의 아래에 있는 모든 것에 대해 file 정보를 알려달라는 명령인데요.

  • 다시 말하자면, 

image.png
  • 주황색 박스로 표시된 파일들에 대한 file 명령어를 적용시키고자 사용한 명령이라고 할 수 있겠습니다.

  • grep text 는 text라는 글자가 있는지 살펴보는 것이니, file 명령어에 대해 text형식인 파일을 찾아주게 됩니다.

  • 여기까지만 진행하고 출력된 결과를 한번 살펴보겠습니다.

image.png
  • 출력 결과의 일부만 가져왔는데도 너무 길어 파악하기 어렵습니다. 여기에 grep 명령어까지 써보면,,

image.png
  • 약간 정리되긴 하였지만, text 파일이 대부분이라 찾기 어렵습니다.

  • 그래서 find 명령을 사용하여 파일 명을 기준으로 필터링을 진행합니다.


핵심

find 명령어

image.png
  • find 명령어로 파일의 크기를 사용해 파일을 검색할 경우 -size 옵션을 사용한다.

  • -size 는 기본적으로 512B의 크기를 사용하게 되어 있는데, 파일 크기 값 뒤에 'c' 또는 'k'를 붙여 크기 값을 지정할 수 있다.

  • b:block, c:bytes, w:2bytes, k:kbytes, M:mbytes, G:gbytes

  • 파일 크기를 비교 시, 크기 값 앞에 +(초과) , -(미만) 기호로 표현 가능

  • 예) -size +1024c -size -2048c: 1024 바이트보다 크고 2048바이트보다 작은 파일 검색

[+추가] du 명령어

  • 디렉토리 별 디스크 사용량을 알려주는 명령어

  • 하위 디렉토리부터 거꾸로 용량 표시

  • 기본단위 : 1024 byte (= 1KB)

  • du [option] [file 이름] 형태로 사용

image.png

[출처]


댓글

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

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

로딩 중...
공유
sikk

sikk

Author

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

뉴스레터 구독하기

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

[Bandit] Level 5 → Level 6 | func(sikk)