이전 글 : [WarGames/Bandit] - Bandit : Level 0 ~ Level 5
다음 글 : [WarGames/Bandit] - Bandit : Level 11 ~ Level 15
[Level 6] 특정 조건을 만족하는 파일 찾기
6단계 문제는 5단계와 같이 human-readable 한 파일이면서 크기가 1033 bytes이고 executable 하지 않은 파일을 찾는 문제이다. 우선 inhere 디렉토리로 들어가니 20개의 폴더가 존재했다.
file ./*/*을 통해 현재 디렉토리의 모든 폴더 안의 모든 파일로 다시 검사를 해보니 한 폴더에 6개의 파일이 있었고, 그중에 file1과 file2로 끝나는 4개의 파일들이 모두 ASCII TEXT였다.
그런데 ls와 ls -a로 비교해 보니 file이 검사한 파일들은 .file1 ~ .file3을 뺀 파일들이었다. 실제로는 파일 당 6개가 아니라 9개의 파일이 존재했던 것이다. (어쩐지 $ du -b maybehere*/*로 파일 사이즈들을 체크했는데 1033 bytes 짜리가 안 나온다 했더니 .file들을 빼먹었기 때문이었다.) 그래서 우선 du 명령어와 find 명령어를 찾아보았다.
① du
du 명령어는 파일의 크기를 알려주는 명령어이다. 많은 옵션들이 있는데, -h 옵션은 파일 사이즈를 우리에게 친숙하게 KB 형태로 표시해 준다. 또 -b 옵션은 파일 사이즈를 bytes 형태로 표시해 준다. 위에 괄호치고 du -b로 파일을 찾았다고 한 것도 1033이 뜨는 파일을 찾기 위해서였다.
② find
find는 말 그대로 특정 파일을 찾고 싶을 때 사용하는 명령어이다. 파일 이름으로 찾을 수도 있고, 파일의 사이즈로 찾을 수도 있다.
size가 1033bytes인 파일을 찾기 위해 $ find -size 1033c를 사용했더니 파일이 딱 하나만 남았다.
size 만으로 이미 파일이 나왔지만, executable 하지 않은 파일은 $ find ! -executable로 찾을 수 있다.
[Level 7] 권한 알기
Level 7은 소유주와 소유 그룹의 개념을 묻는 문제였다.
마찬가지로 find 명령어로 user와 group을 찾을 수 있는 옵션을 찾아보니
$ find -user "user name"과
$ find -group "groupname으로 찾을 수 있었다.
그래서 $ find -user bandit7 -group bandit6 -size 33c로 파일을 찾았더니 permission denied 사이에 권한이 있는 파일을 하나 찾을 수 있었다.
혹시 저 permission denied를 빼고 출력할 수 있을지 찾아보니 2>/dev/null을 붙이면 표준 오류 출력을 버릴 수 있다는 것을 알게 되었다.
추가로 소유주, 그룹 등 권한에 관해 내용을 정리해 보자.
$ ls -al을 입력하면
위 사진처럼 파일에 대한 자세한 정보를 볼 수 있다. 처음의 drwxr-xr-x 부분이 읽기(r) 쓰기(w) 실행(d) 권한에 관한 내용으로, 3개씩 끊어서 user, group, other의 권한을 나타낸다. 읽기, 쓰기, 실행은 순서대로 4, 2, 1로 나타내는데, 예를 들어 읽기와 쓰기 권한만 있다면 6, 쓰기와 실행 권한만 있다면 3으로 나타낼 수 있는 것이다. 그래서 명령어 중에 권한을 부여하는 chmod가 있는데 chmod 777은 소유주, 그룹, 타인 모두에게 7(4+2+1)로 모든 권한을 부여한다는 의미이다.
[Level 8] 파일 읽기 및 파이프라인
8단계는 방대한 내용의 data.txt에서 millionth라는 단어 옆에 있는 패스워드를 찾는 것이다.
확인해 보니 "단어 - 패스워드"의 형태로 98576 줄이 존재하여($ cat data.txt. | wc -l 을 통해 알 수 있다.) grep 명령어를 통해 millionth가 적힌 줄만 출력해 주었다.
[Level 9] Uniqe line 찾기
이번 문제에서는 텍스트 안에서 한 번만 등장하는 라인을 찾는 것이어서 uniq 명령어를 찾아보았다.
uniq -u 옵션을 사용하면 unique lines만 출력되지만, 인접하지 않는 줄은 탐지하지 못한다. 그래서 sort를 먼저 사용해서 정렬한 후 uniq 옵션을 사용하였다. $ cat data.txt | sort | uniq -u
$ cat data.txt | sort -f | uniq -c를 사용했더니 (-f는 알파벳 대/소문자 구분 없이 정렬) 각 줄이 몇 개씩 존재하는지도 알 수 있었다.
[Level 10] 읽을 수 있는 문자만 출력하기
응? one of the few human-readable strings가 뭐지? 하고 파일을 살펴보니,
이런 식으로 우리가 읽을 수 없는 것이 혼잡하게 섞여있었다.
strings 명령어를 찾아보니 printable character를 출력해 준다고 하여, stirngs 명령어에 grep으로 =이 들어있는 문장을 출력하였더니
password is 어쩌고저쩌고를 얻을 수 있었다. 새삼 문제 정말 잘 만든 것 같다... 감탄..
'WarGames > Bandit' 카테고리의 다른 글
Bandit : Level 26 ~ Level 30 (0) | 2021.11.07 |
---|---|
Bandit : Level 21 ~ Level 25 (0) | 2021.11.03 |
Bandit : Level 16 ~ Level 20 (0) | 2021.11.01 |
Bandit : Level 11 ~ Level 15 (0) | 2021.10.30 |
Bandit : Level 0 ~ Level 5 (0) | 2021.10.24 |
댓글