min8282

Bandit Level 8 -> Level 9 본문

Wargame/Bandit

Bandit Level 8 -> Level 9

min8282 2024. 5. 13. 20:28

Level Goal

The password for the next level is stored in the file data.txt and is the only line of text that occurs only once

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Helpful Reading Material


이번 문제는 data.txt에 유일하게 하나만 존재하는 text가 다음 레벨로 올라가는 password다. 힌트 명령어 중에서 grep, sort, uniq 등을 사용하면 정렬, 유니크한 값을 찾을 수 있을 것 같다. 추가로 파이핑과 리다이렉션 하면 값을 찾고 볼 때 도움이 된다고 한다. 여기서 얻을 수 있는 힌트는 두 개 이상의 명령어를 파이핑해서 사용하면 찾을 수 있을 것 같다. sort와 uniq 명령어에 대해 찾아보자.

 

sort

> sort [-옵션] [파일명]

먼저 sort 명령어와 옵션에 대해서 알아 보겠다. sort 명령어는 사용자가 지정한 파일의 내용을 정렬하거나, 정렬된 파일의 내용을 병합(Merge)할 때 사용할 수 있다. 옵션에 대한 정리는 아래 표에서 확인하자.

옵션 설명
-n 라인의 각 필드를 비교하는 대상을 숫자로 한정
-f 영어를 정렬할 때, 대소문자 구별 안 함
-r 결과를 역순으로 출력
-b 앞에 붙는 공백 무시
-t 필드 구분자 지정
-m 정렬된 파일을 병합
-u 정렬 후, 중복행 제거
-o 저장할 파일명을 명시, 명시하지 않으면 화면에 출력됨

uniq

> uniq [-옵션] [파일명]

uniq명령어는 연속적으로 반복되는 행을 한행으로 줄여주는 명령어다. 중복된 내용이 행이 연속으로 있으면 하나만 남기고 삭제한다. 전체적으로 분산된 중복은 찾아내지 못하기 때문에 정렬하여 순차적으로 만든 뒤 적용하는 게 일반적이다. (sort와 같이 사용하면 좋을 듯하다.) uniq 옵션 설명은 아래 표에 정리했다.

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

 

 

home에는 data.txt 파일이 있다.

data.txt 를 cat 명령어로 확인해 보면 여러 text가 있다. 이것만 봐서는 중복된 텍스트와 중복되지 않은 텍스트를 구별할 수 없을 것 같다.

이번에는 sort 명령어로 파일을 정렬시켜 확인해 보면 중복된 텍스트를 확인하기 쉽다. 정렬이 됐기 때문에 uniq 명령어를 사용하면 중복된 텍스트들이 몇 번 나왔는지 확인하기 쉽다. 이때는 uniq 명령어에서 카운트 옵션을 사용하면 중복되는 라인이 몇 개인지 확인 가능하다.

sort 명령어로 먼저 정렬을 진행하고 uniq 명령어를 사용해서 중복된 텍스트가 몇 번 나오는지 확인해 본 결과 위와 같다. 여기서 중요한 것은 data.txt 파일을 sort 명령어로 먼저 정렬시킨 후에 uniq 명령어를 사용하는 것이다. 위 그림에서 다른 텍스트들은 전부 10번씩 나왔지만 1번 나온 텍스트를 확인할 수 있다. sort | uniq -c는 정렬시킨 후 텍스트마다 중복된 횟수를 볼 수 있어 로그를 확인해 한 번만 나온 텍스트를 찾을 수 있지만, 중복되지 않은 값을 찾기에는 100% 적합한 명령은 아니다. 중복된 라인이 없는 것만 즉, 한 개만 있는 값을 출력하려면 uniq 명령어의 u 명령어를 사용하면 보다 간단하게 찾을 수 있다.

sort data.txt | uniq -c 의 결과에서 확인할 수 있는 결과와 동일한 결과가 나온 것을 확인 가능하다. 이게 다음 레벨에 로그인을 위한 패스워드인지 확인해 보자.

level 9에 로그인하기 위한 패스워드가 맞다. 굳굳

EN632PlfYiZbn3PhVK3XOGSlNInNE00t

 

요약)

- uniq 명령어는 연속적으로 반복되는 행을 한 행으로 줄여주는 역할을 한다. 즉, sort 명령어와 같이 사용해서 정렬시킨 후에 사용해야 한다. 분산된 데이터에서 사용하기 어렵다.

- sort와 uniq 명령어를 사용하면 파일에서 중복된 데이터 횟수와 유니크한 데이터를 찾을 수 있다.

'Wargame > Bandit' 카테고리의 다른 글

Bandit Level 7 -> Level 8  (1) 2024.04.30
Bandit Level 6 -> Level 7  (0) 2024.04.11
Bandit Level 5 -> Level 6  (1) 2024.04.11
Bandit Level 4 -> Level 5  (1) 2024.04.11
Bandit Level 3 -> Level 4  (0) 2024.04.11