본문 바로가기
WarGames/Bandit

Bandit : Level 11 ~ Level 15

by madevth 2021. 10. 30.
반응형

이전 글 : [WarGames/Bandit] - Bandit : Level 6 ~ Level 10

 

[Level 11] Base64로 encoded된 데이터 읽기

Bandit Level 11

base64로 encode 되어 있는 파일을 읽기 위해 base64 -d 옵션을 사용하여 decode 해주었다.

추가로 Base64에 대해 알아보니 인코딩 방식이 흥미로웠다.

우선 A ~ Z, a ~ z, 0 ~ 9, +, /를 0부터 63까지 매칭한 Base64 색인표를 만든다.

그 후 변환하고자 하는 문자의 ASCII 값을 8자리의 2진법으로 나타낸 후, 앞에 6자리만 떼서 다시 10진수로 바꾼 후 만들어놓은 색인표에 해당되는 문자를 쓰는 것이다. 남은 두 자리는 버리는 것이 아니라 뒤의 문자와 합쳐진다.

즉, 세 문자를 이진법으로 바꾸면 24개의 0과 1이 나열되므로 6자리씩 묶으면 네 문자로 변환되는 것이다.

 

 

[Level 12] Rot13

Bandit Level 12

이번 문제는 문자열 치환인데, Rot13을 찾아보니 간단하게 알파벳을 13칸 만큼 밀어서 사용한 것이라고 보면 된다. 카이사르 암호에서 암호 키를 13으로 쓴 것이라고 할 수 있다.

명령어 tr을 찾아보니 $ tr '변경 전' '변경 후'의 형태로 소문자를 전부 대문자로 바꾼다든지 공백을 전부 특정 문자로 바꾸는 형식으로 사용할 수 있다. 그래서 A-Z를 N-ZA-M으로 바꿔주었다. (소문자도)

$ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'

처음에는 13만큼 밀린 것을 다시 돌리는 거니까 'N-ZA-M'을 'A-Z'로 바꿔야 하는 거 아닌가? 했는데 생각해 보니 알파벳이 26자이니까 13만큼 이면 딱 매칭되는 짝이 있어서 순서가 상관 없어진다.

 

 

[Level 13] Hexdump 파일 읽기 + 압축 파일 풀기

Bandit Level 13

이번 단계는 Hex dump 파일을 변환하는 문제이다. ASCII 표를 보면 A를 65, a는 97로 나타내는데, 이는 십진법으로 나타낸 것이고, 16진법으로는 각각 41, 61로 나타낸다. 우선 파일을 살펴보았다.

16진법으로 표시된 열들을 일반 텍스트를 돌리기 위해 Hexadecimal to text를 검색해 보니 xxd 옵션을 사용하면 된다는 결과를 얻었다.

$ xxd -r data.txt를 통해 Hexdump 파일을 원래대로 돌릴 수는 있지만, 문제는 이 파일이 repeatedly compressed 되었다는 것이다. 어떤 형태로 몇 번 압축되었는지를 모르니 압축을 푸는 것이 매우 어려웠다.

우선 압축을 몇 번 풀어야 할지 몰라 그 과정에서 파일이 훼손될 수도 있기 때문에 문제에서 권장한 대로 /tmp/test123456 경로를 만들어 파일을 복사하였다.

file 명령어를 사용하면 압축 형식을 알 수 있다기에 $ file data.txt를 해보았지만 그냥 ASCII text라는 정보만 나왔다. 그런데 xxd reverse를 통해 돌려놓은 파일을 새로운 파일에 저장한 후 file을 사용하니 gzip으로 압축되었다는 정보를 얻을 수 있었다.

압축을 풀기 위해 파일 이름을 data에서 data.gz로 변경한 후 $gzip -d data.gz를 통해 압축을 풀어준 후 다시 data가 된 파일을 $file data를 통해 압축된 형태를 확인해 주었다.

그 후로는 압축된 형식 확인 → 형식에 맞게 이름 변경 → 압축 풀기의 반복이다.

tar 파일은 $ tar -xvf [filename]으로 압축을 풀어주었고, 그렇게 풀다 보면

드... 드디어...!

정말 어려운 문제였다.

다섯 문제를 풀고 정리하는데 걸리는 시간의 80%는 이 문제를 푸는데 썼을 정도로 복잡하고 어려웠다.

 

 

[Level 14] SSH 인증키

Bandit Level 14

역시 시작은 파일 확인!

RSA 개인키가 나왔다. 음, 그러니까 패스워드가 적혀있는 파일은 bandit14 권한으로만 확인할 수 있으니 ssh key를 사용하여 다음 레벨로 가야 한다. 요즘 GITHUB처럼 비밀번호 대신 SSH 인증키로 접속을 하는 경우가 많다.

ssh 명령어에 대해 살펴보니 -i 옵션을 통해 Private Key 파일로 접속이 가능하다.

그런데 이미 나는 bandit.labs.overthewire.org 서버에 있는 것이기 때문에 그 안에서 또 ssh를 사용할 수는 없었다. ssh는 원격 서버에 접속하는 프로그램이니까!

그래서 문제에서 주어진 private key를 새로운 파일로 저장한 후, 로컬 터미널에서 ssh를 사용하여 bandit14로 원격접속을 했다.

그런데 private key의 권한이 너무 낮아서 보안을 높일 필요가 있었다. 전 포스팅에서 설명했던 chmod를 사용해서 chmod 600 [filename]으로 권한을 변경해 주었다. (권한 변경이 잘 안돼서 파일을 아예 home으로 옮겨준 후 권한 변경을 해주었다.)

그런데 이번에는 invalid format이라고 해서 찾아보니 원 파일에 위아래로 붙어있던 ---BEGIN RSA ~~---를 지워서 인 것 같아 추가해 주었다.

접속 성공!

 

 

[Level 15] Port로 데이터 전송하기

Bandit Level 15

localhost의 30000 포트에 비밀번호를 전송해라.

nc(netcat) 명령어를 통해 30000 포트에 데이터를 전송하자.

(netcat를 사용하면 원하는 포트를 열거나, 원하는 포트로 데이터를 전송할 수 있어서 해킹에도 사용된다.)

드디어 Level 15까지 격파!!

 

반응형

'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 6 ~ Level 10  (0) 2021.10.27
Bandit : Level 0 ~ Level 5  (0) 2021.10.24

댓글