[OverTheWire:Bandit] Level 9 → Level 10
2023.11.17 - [워게임/Bandit (Linux 초보자들을 위한 워게임)] - [OverTheWire:Bandit] Level 8 → Level 9
Bandit Level 9
컴퓨터의 사용자 이름( 계정명 ): bandit9
호스트(접속해야 할 주소):bandit.labs.overthewire.org
포트 번호: 2220
비밀번호: EN632PlfYiZbn3PhVK3XOGSlNInNE00t (2023.11 기준)
bandit9 계정으로 Linux 서버에 접속하겠습니다. 그동안 문제를 풀기 위해 여러 디렉터리를 이동해 본다던가 아니면 계정만 바뀌는 걸 보고 눈치채셨을 수도 있는데 항상 접속하는 서버는 같습니다. 다만 계정만 달라져서 로그인을 하고 있습니다. 이는 리눅스가 여러 사용자가 로그인해서 사용하는 것을 전제로 만들어졌기 때문입니다. 이 내용은 앞으로 계속 넣도록 하겠습니다.
PS> ssh bandit9@bandit.labs.overthewire.org -p 2220
문제 및 해설
문제 - 다음 단계로 가기 위한 비밀번호는 data.txt 파일에 저장되어 있으며 사람이 읽을 수 있는 문자열이고 앞에 여러 개의 '=' 문자가 나온다.
이제 홈 디렉터리에 어떤 파일이 존재하는지 확인해 보고 그 파일을 읽어보겠습니다.
$ ls
$ cat data.txt
어 그런데 사실 저는 분석하기 위해 글을 다시 올리던 중에 너무나 떡하니 패스워드가 보여서 패스워드를 찾아버렸습니다.
아마 간단하게 생각해서 다음과 같이 정답을 생각했을 거라 생각합니다.
$ cat data.txt | grep =
하지만 다음과 같은 방법은 경고 메시지를 출력합니다.
grep: (standard input): binary file matches는 `grep` 명령어가 이진 파일에서 일치하는 내용을 찾았을 때 나타나는 경고 메시지입니다. `grep` 명령어는 주로 텍스트 파일에서 특정 패턴을 검색하는 데 사용되지만, 이진 파일과 같이 텍스트가 아닌 파일에서도 동작할 수 있습니다.
경고 메시지는 `grep`가 이진 파일에서 일치하는 내용을 찾았으며, 해당 파일은 텍스트 파일이 아니라는 것을 나타냅니다. 이 경우, `grep`는 이진 파일의 텍스트 부분을 읽어 들이지 않고 이진 데이터로 간주합니다.
이진 파일에서 특정 패턴을 찾고자 할 때는 `grep`의 `-a` 또는 `--binary-files=text` 옵션을 사용하여 이진 파일을 텍스트로 취급하도록 지시할 수 있습니다. 예를 들면 다음과 같습니다.
$ grep -a "pattern" binary_file
이렇게 하면 `grep`가 이진 파일에서도 텍스트로 간주하고 패턴을 찾을 수 있습니다. 다만, 이렇게 사용할 때는 이진 파일에 텍스트로 해석되기 어려운 데이터가 있을 수 있으므로 주의가 필요합니다. 응용하자면 다음과 같이 가능합니다.
$ grep -a === data.txt
맨 아래에 패스워드 같아 보이는 게 있습니다. 우리가 찾는 조건과도 일치합니다. 여기서 끝내지 말고 더 나가보겠습니다.
사실 이렇게 하면 너무 많은 결과물이 나타납니다. 우리는 문자열을 원하는데 사림이 읽을 수 없는 것들까지 출력되어 버리죠. 이럴 때 필요한 건 strings라는 명령어입니다. 간단하게 차이점을 정리하자면
cat
"cat"은 concatenate(연결)의 줄임말로, 파일의 내용을 표시하거나 파일을 합치는 데 사용됩니다. 예를 들어, `cat filename` 명령어는 "filename"이라는 파일의 내용을 표시합니다.
예를 들어, cat file1.txt file2.txt는 "file1.txt"와 "file2.txt"의 내용을 연결하여 화면에 출력합니다.
strings
"strings"는 다른 목적을 가진 명령어 또는 함수입니다. 대부분의 경우, "strings"는 이진 파일에서 텍스트 문자열만을 추출하는 데 사용됩니다. 예를 들어, 실행 파일이나 라이브러리와 같은 이진 파일에는 텍스트 문자열이 숨겨져 있을 수 있는데, "strings" 명령어를 사용하면 이러한 문자열을 추출할 수 있습니다.
간단히 말하면, "cat"은 파일의 내용을 표시하거나 연결하는 데 사용되는 명령어이며, "strings"는 이진 파일에서 텍스트 문자열을 추출하는 데 사용되는 도구 또는 명령어입니다. 따라서 다음과 같이 풀이할 수 있습니다.
$ strings data.txt | grep =
"strings"라는 명령어가 생소했을 수도 있는데 사실 실제 Linux를 사용하면서 모든 명령어를 기억하고 맞게 사용하는 건 쉽지 않기 때문에 필요할 때마다 검색을 잘하는 방법을 키우시길 권장합니다.
Level 10 접속정보
컴퓨터의 사용자 이름( 계정명 ): bandit10
호스트(접속해야 할 주소):bandit.labs.overthewire.org
포트 번호: 2220
비밀번호: G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s(2023.11 기준)
bandit Level 10로 가기 위한 비밀번호: G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s
마지막으로 exit 명령어를 입력하여 서버에서 bandit9 계정을 로그아웃 하겠습니다.