혜랑's STORY

[2021 겨울 시스템 2주차 : Bandit:Over the wire Level5 -> Level10] 본문

2021 SISS 21기 활동/겨울방학 System

[2021 겨울 시스템 2주차 : Bandit:Over the wire Level5 -> Level10]

hyerang0125 2021. 1. 17. 21:54

Level 5 -> 6

문제를 해결하기 위해 전 레벨을 통해 얻은 비밀번호를 사용하여 로그인 해 주었다.

주어진 문제를 통해 비밀번호가 들어있는 파일은 inhere 디렉토리 안에 있으며, -human-readable한 파일이며, 1033 바이트에 실행 불가능한 파일이라는 것을 알 수 있었다. 

따라서 나는 정말 inhere 디렉토리가 있는지 확인해 보았고 inhere 디렉토리로 이동하여 크기가 1033 바이트 이상인 파일을 검색해 보았다.

그 결과 maybehre07 디렉토리의 file2 파일에 비밀번호가 담겨 있다는 것을 알 수 있었고, 비밀번호는 다음과 같이 알아낼 수 있었다.

 

Level 6 -> 7

앞서 알아낸 비밀번호를 통해 6레벨로 이동할 수 있었다.

주어진 문제에 따라 find 명령어를 통해 소유자가 bandit7이면서 그룹이 bandit6이고 크기가 33바이트인 파일들을 찾아 보았다.

많은 파일 중 접근권한 없는 파일을 제외하면 "/var/lib/dpkg/info/bandit7.password"라는 파일을 찾을 수 있었다. 이 파일을 열어본 결과 7레벨로 가는 비밀번호를 얻을 수 있었다.

 

Level 7 -> 8

앞서 알아낸 비밀번호를 통해 7레벨 문제에 접속해 주었다.

문제에서 주어진 힌트를 통해 비밀번호가 data.txt 파일에 millionth 단어 다음에 존재한다는 것을 할 수 있었다. 따라서 ls 명령어를 통해 data.txt 파일이 정말 존재하는지 알아보았다. 그 후 grep 명령어를 통해 'data.txt'에 'millionth' 단어를 찾아 보았다.

문제에서 주어진 힌트대로 역시 'millionth' 단어 뒤에 비밀번호가 있는 것을 알 수 있었다.

 

Level 8 -> 9

앞서 얻은 비밀번호를 통해 8레벨에 접속해 주었다.

문제를 통해 9레벨로 가는 비밀번호는 data.txt에 존재하는데 딱 1번만 출현하는 문장이라는 것을 알 수 있었다. cat 명령어를 통해 data.txt 파일을 그냥 실행시켜 보았더니 이런 문장이 나왔다.

너무 길어서 이정도만 잘라왔음.

주어진 "grep, sort, uniq, string, base64, tr, tar, gzip, bzip2, xxd" 명령어를 사용해야 하는데 uniq 명령어가 쓸모있을 거 같아서 uniq 명령어에 대하여 알아보았다.

uniq

- 중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제한다. 전체적으로 분산된 중복은 찾아내지 못하기 때문에 정렬하여 순차적으로 만든 뒤에 적용한다.

옵션 설명
-c 같은 라인이 몇 번 나오는지를 표시
-d 중복되어 나오는 라인 중 한 라인만 표시
-D 중복되는 모든 라인을 표시
-N 필터링은 무시할 라인을 설정.
시작 라인으부 N번째 라인까지는 검사하지 않는다.
-i 중복 라인을 한 라인으로 생각하고 출력
-u 중복 라인이 없는 것만 출력
-w N번째 문자까지만 비교대상으로 하여 uniq 명령을 수행
-s N번째 문자까지는 비교대상에서 제외하고 uniq 명령을 수행
-f N번째 필드를 비교대상에서 제외하고 uniq 명령을 수행

역시 uniq명령어가 사용되는 것 같다. sort 명령어를 사용하여 파일의 내용을 정렬한 뒤, uniq 명령어를 통해 유일한 문장(비밀번호)를 찾아 주었다.

 

Level 9 -> 10

앞서 얻은 비밀번호를 통하여 9레벨에 접속하였다.

문제를 통해 다음 비밀번호는 data.txt 파일에 저장되며, 사람이 읽을 수 있으며 여러개의 '='문자 앞에 나오는 문자열 중 하나라는 것을 알 수 있었다.

ls -al 명령을 통하여 파일을 확인해 본 결과 홈디렉토리에 data.txt 파일이 있는 것을 확인할 수 있었다. 문자열을 찾기 위해 grep 명령어를 사용하는데 strings 명령어를 사용하면 프로그램 안에서 사용된 문자열을 출력해준다고 하여 같이 사용하였다. 그 실행 결과는 다음과 같다.

총 4개의 문자열을 얻어낼 수 있었다. 이제 비밀번호를 찾기 위해 하나씩 대입해 보기로 하였다. 차례대로 입력해본 결과 맨 마지막 문자열인 "truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk"가 비밀번호라는 것을 알 수 있었다.