bandit Write-up

Bandit Level 11 ~ 15

부산영롱 2023. 12. 4. 23:25

Bandit Level 11 → Level 12

역시 data.txt 파일 안에 패스워드가 있는데 모든 소문자와 대문자가 13 위치만큼 회전되었다???

제대로 해석한건지 번역기도 돌려보고 했는데 무슨 말인지 도통 이해할 수 없다.

 

'Helpful Reading Material'에 적혀있는 'Rot13 on Wikipedia'가 힌트인 것 같다.

음.. 퀴즈 같은 곳에서 이런 암호방식으로 푸는 걸 본 적 있는 것 같다. 알파벳 순으로 13번 뒤 문자로 치환해야한다는건데.. 어떻게하징??

 

명령어 힌트 중에 tr 명령어가 일반적으로 길이가 동일한 두 문자 집합을 허용하며 첫 번째 세트의 문자를 두번째 세트의 해당 문자로 대체한다고 한다.

 

그럼 'a-z' 문자세트를 알파벳 순으로 13번 뒤로 이동한 'n-m'으로 대체하면 해결될 것 같다.

음.. 'n-m'이 역방향으로 정렬되있다고 하는데..알파벳 끝 z 에서 a로 자동으로 넘어가지 않는 듯한 느낌이 든다.

'n-m'이 아닌 'n-za-m'으로 입력하니 정상적으로 출력된다. 파이프를 이용하여 대소문자 모두 적용시키니 패스워드 겟!


Bandit Level 12 → Level 13

 

다음 패스워드는 반복적으로 압축된 hexdump 파일형식인 data.txt 안에 있다고 한다.

먼저 hexdump를 binary로 바꾸고 압축해제하는 식으로 진행해야 할 것 같다.

 

여기서 잠깐 궁금증이 들었다. hex파일은 어디에 쓰이는 걸까? 굳이 16진수 파일을 만드는 이유가 있을까?
잠깐 검색을 해본 바로는 '리버싱' 과정에서 hex로 변환하는 작업이 필요하다고 한다.
실행파일은 binary(2진수) 파일로 되어있는데 이걸 hex(16진수)로 변환하고 디스어셈블 과정을 거쳐 어셈블리 코드로 변환시켜줘서 동작원리에 대한 분석을 할 수 있다고 한다.

 

문제에 적혀 있는 것처럼 /tmp아래에 임의의 폴더를 생성하고 data.txt 파일을 복사해왔다.

hex(16진수)를 binary(2진수)로 바꾸는 명령어는 xxd -r 이라고 한다.

binary로 변경된 파일을 data1.txt로 저장하고 file 명령어를 이용하여 파일형식을 확인해보니 gzip으로 압축된 것을 알 수 있었다.

gzip 명령어와 decompress 옵션인 -d를 활용하여 압축해제를 할 수 있었다.

 * 'data1.txt' 파일을 바로 압축해제하면 에러가 발생하니 cp 명령어를 이용해서 파일이름 뒤에 .gz을 붙이고 진행해야한다.

 

이후 bzip2, gzip, tar 명령어를 이용하여 반복적으로 압축해제 노가다를 해주면 된다.

 

문제풀이를 하면서 tar와 나머지 gzip, bzip2가 다르게 동작한다는 것을 알 수 있었다. gzip, bzip2는 파일명 뒤에 .gz이나 .bz를 반드시 붙여야 압축해제를 할 수 있었지만 tar는 그냥 .bin, .txt 파일도 압축해제를 할 수 있었다.

 

좀 더 알아보니 tar는 압축도 아닌 파일을 묶고 푸는 명령어 인걸 알 수 있었다.

* 이미지 출처 - 제타위키

 리눅스에서 여러 파일을 한 파일로 묶은 것을 아카이브(archive)라 하며 확장자는 .tar (tape archives)이다.

그리고 보통 위에서 생성된 tar(아카이브) 파일을 다시 gzip을 사용하여 압축해서 .tar.gz의 확장자를 가지는 압축 아카이브파일을 실무에서 많이 사용하고 있다.


Bandit Level 13 → Level 14

다음 패스워드는 /etc/bandit_pass/bandit14 라는 파일 안에 있는데 이 파일은 bandit14 계정만이 읽을 수 있다고 한다.

이번 레벨에선 다음 패스워드를 얻을 수 없지만? 다음 레벨로 로그인 할 수 있는 private SSH key를 얻을 수 있다고 한다. 

'ls -al' 명령어로 확인해보니 다음 단계인 bandit14의 ssh 개인키가 내 손안에 주어져있다.

ssh 명령어와 -i 옵션으로 개인키를 지정하고 -p 옵션으로 접속포트를 지정하기만 하면 아래와 같이 bandit14 계정으로 접속을 할 수 있다.

이번 레벨을 통해 다른 계정의 개인키를 탈취하기만 한다면 해당 계정으로 손쉽게 접속이 가능하다는 것을 알 수 있었다.


Bandit Level 14 → Level 15

다음 패스워드는 localhost의 30000번 포트로 현재 패스워드를 제출하는 것으로 다음 패스워드를 회신받을 수 있다고한다.

localhost의 30000번 포트로 접속을 해야하는데 nc 또는 telnet 명령어로 해결할 수 있다.


Bandit Level 15 → Level 16

이전 단계와 매우 비슷하지만 이번에는 SSL 암호화를 사용하여 접속하라고 한다.

openssl 명령어를 사용해서 접속해보자

인증서, 세션정보 등 아직은 잘모르는 어떤 정보들이 길게 나온다.

차차 알게되겠지... 마지막에 현재 비밀번호를 입력하면 다음 레벨 패스워드를 얻을 수 있다.

 

'bandit Write-up' 카테고리의 다른 글

Bandit Level 26 ~ 30  (0) 2023.12.10
Bandit Level 21 ~ 25  (0) 2023.12.05
Bandit Level 16 ~ 20  (1) 2023.12.05
Bandit Level 6 ~ 10  (0) 2023.12.01
Bandit Level 0 ~ 5  (1) 2023.11.27