2023.11.20 - [워게임/Bandit (Linux 초보자들을 위한 워게임)] - [OverTheWire:Bandit] Level 11 → Level 12
Bandit Level 12
컴퓨터의 사용자 이름( 계정명 ): bandit12
호스트(접속해야 할 주소):bandit.labs.overthewire.org
포트 번호: 2220
비밀번호: JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv (2023.11 기준)
PS> ssh bandit12@bandit.labs.overthewire.org -p 2220
문제 및 해설
다음 레벨의 비밀번호는 data.txt 파일에 저장되어 있습니다. 이 파일은 여러 번 압축된 파일의 hexdump입니다. 이 레벨에서는 mkdir을 사용하여 /tmp 디렉터리 아래에서 작업할 수 있는 디렉터리를 만드는 것이 유용할 수 있습니다. 예를 들어 다음과 같이 하세요: mkdir /tmp/myname123. 그런 다음 cp를 사용하여 데이터 파일을 복사하고 mv를 사용하여 파일의 이름을 변경하세요.
풀이에 들어가기 앞서 우리가 가장 먼저 해볼 명령어를 실행시켜 보겠습니다.
$ cat data.txt
혹시 data.txt 내용에 대해 뭔가 보신 적이 있는 분이 계실 것 같습니다. 헥스에디터에서 자주 볼 수 있는데 이는 16진수로 표현된 이진파일을 사람이 읽을 수 있게 해주는 프로그램입니다.
저는 아래 HxD라는 소프트웨어를 주로 이용합니다.
https://mh-nexus.de/en/downloads.php?product=HxD20
Downloads | mh-nexus
Downloads I am looking for new translators, if you want to help, here is a list of unmaintained translations. Note: Starting with HxD 2.3, the portable edition is available as separate setup program, and can be run with minimal privileges (no admin rights
mh-nexus.de
즉, 이 내용은 hexdump와 관련이 있습니다. hexdump라고 문제에서 그랬습니다. 그러니 여기서 필요한 명령어는 xxd입니다.
xxd
xxd는 리눅스 및 유닉스 계열 시스템에서 사용되는 hex dump를 생성하거나 hex dump를 다시 원래의 바이너리 형식으로 변환하는 데 사용되는 명령어입니다. xxd 명령어를 사용하면 텍스트와 16진수 값으로 구성된 파일의 hex dump를 확인할 수 있습니다. 이것은 주로 디버깅이나 파일 형식을 이해하는 데 도움이 되는 경우에 사용됩니다.
예를 들어, 파일의 hex dump를 생성하려면 다음과 같이 사용할 수 있습니다.
$ xxd file.txt
반대로, hex dump를 원래의 바이너리 파일로 변환하려면 다음과 같이 사용합니다:
$ xxd -r hexdump.txt > newfile
그런데 문제에서 /tmp 디렉터리 아래에서 작업하는 것을 권고하고 있습니다. 이게 권한 문제 때문인데 이 권고에 따라서 풀이를 진행하겠습니다.
여기서 crypsec 대신에 여러분들이 임의로 정한 디렉터리 명을 적어주시면 됩니다. 아마 myname123로 디렉터리 명을 입력하면 이미 존재한다고 에러가 뜰 수 있는데 이 이유는 마지막에 설명하겠습니다.
$ mkdir /tmp/crypsec
$ cp data.txt /tmp/crypsec
$ cd /tmp/crypsec
이제 문제에서 권고한 환경은 준비하였고 이제 xxd를 이용하여 풀이를 진행하겠습니다. 저는 original이라는 파일이름으로 이진파일을 저장하겠습니다. 개인적으로 다른 이름으로 진행하시길 추천합니다.
$ xxd -r data.txt > original
이제 남은 문제에서 남은 조건은 여러 번 압축된 파일이라는 조건입니다. 파일이 여러 번 압축되었다고 했으므로, 압축을 해제하기 위해 해당 파일의 압축 해제 명령어를 사용해야 합니다. 그런데 어떤 식으로 압축되었는지 저희는 알고 가야 합니다. 왜냐하면 zip, gzip, tar 등 여러 압축 방법이 존재하기 때문입니다.
이때 사용할 수 있는 것이 바로 file 명령어입니다.
file 명령어는 주어진 파일의 형식과 속성을 식별하는 데 사용됩니다. 주어진 파일의 유형, 압축 여부, 텍스트 파일 여부 등을 확인하는 데 유용합니다.
$ file filename
여기서 `filename`은 확인하려는 파일의 이름입니다.
`file` 명령어의 출력은 파일 유형과 관련된 정보를 제공합니다. 예를 들어, 텍스트 파일인 경우 파일의 문자 인코딩과 관련된 정보가 표시됩니다. 압축 파일인 경우 해당 압축 형식과 압축을 푼 후의 파일 유형이 표시됩니다.
이 명령어를 사용하여 `data.txt` 파일이 어떤 종류의 파일인지 확인하고, 그에 따라 다음 단계를 수행할 수 있습니다.
$ file original
gzip으로 압축했다고 합니다. 이제 압축 해제를 해보겠습니다. 단 gzip의 파일 확장자는. gz이니 파일 이름을 다시 바꿔줘야 합니다.
$ mv original original.gz
$ gzip -d original.gz
여러 번 압축했다고 했으니 아직 끝은 아닐 것이라 생각이 들어 바로 file 명령어를 이용하였습니다.
$ file original
이번에는 bzip2로 압축한 파일이라고 합니다. 이제 그냥 감이 오셨겠지만 gzip이랑 방법은 비슷합니다. bzip2로 압축하게 되면 확장자는 bz2인데 여기서는 굳이 이름을 변경할 필요는 없습니다.
$ bzip2 -d original
이제 갑자기 original.out 파일이 생겼습니다. 이전과는 다르게 확장자명이 붙어서 결과가 나왔습니다.
$ file original.out
gzip으로 압축했다고 합니다. 앞 과정과 다를 게 없습니다.
$ mv original.out original.gz
$ gzip -d original.gz
다시 file을 해보겠습니다.
$ file original
이번에는 아카이브를 만드는 tar라는 게 보입니다. tar 명령어를 제일 많이 쓰셨거나 보셨을 텐데 앞으로도 자주 쓰일 테니 꼭 알아두고 가셔야 합니다. 각 옵션은 의미가 있는데 여러 조합을 만들어 사용하기보다는 보통 압축 or 압축해제에서 고정적으로 사용하는 옵션들이 있으니 금방 익숙해집니다.
$ tar -xvf original
이제부터 방법은 다 똑같으니 글은 생략하고 사진으로만 남겨두겠습니다.
읽을 수 있는 ASCII text 파일이 나왔고 이를 읽었더니 패스워드가 나왔습니다. 마지막으로 crypsec 디렉터리를 삭제해 주겠습니다. 삭제해 주는 이유는 Linux는 여러 사람이 이용할 것을 가정하고 만든 os이기 때문입니다. 여러분이 아마 myname123 이라는 예제 그대로 /tmp에 디렉터리를 생성을 시도했을 때 이미 있는 디렉터리라고 생성이 안되었다면 이전 문제 풀이자가 해당 디렉터리를 지우지 않아서 생긴 것입니다.
실제 myname123라는 디렉터리로 가보니 누군가 열심히 푼 흔적이 남아있었습니다.
Level 13 접속정보
컴퓨터의 사용자 이름( 계정명 ): bandit13
호스트(접속해야 할 주소):bandit.labs.overthewire.org
포트 번호: 2220
비밀번호: wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw(2023.11 기준)
bandit Level 13로 가기 위한 비밀번호: wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw
마지막으로 exit 명령어를 입력하여 서버에서 bandit12 계정을 로그아웃 하겠습니다.
'워게임 > Bandit (Linux Wargame)' 카테고리의 다른 글
[OverTheWire:Bandit] Level 14 → Level 15 (1) | 2023.11.26 |
---|---|
[OverTheWire:Bandit] Level 13 → Level 14 (1) | 2023.11.25 |
[OverTheWire:Bandit] Level 11 → Level 12 (1) | 2023.11.20 |
[OverTheWire:Bandit] Level 10 → Level 11 (1) | 2023.11.19 |
[OverTheWire:Bandit] Level 9 → Level 10 (0) | 2023.11.18 |