🌿중급

[Bandit] Level 12 → Level 13

Bandit Level 12 풀이 과정을 설명합니다.

8분 읽기

문제

Level Goal

The password for the next level is stored in the file data.txt, which is a hexdump of a file that has been repeatedly compressed. For this level it may be useful to create a directory under /tmp in which you can work. Use mkdir with a hard to guess directory name. Or better, use the command “mktemp -d”. Then copy the datafile using cp, and rename it using mv (read the manpages!)

  • 이번 password 역시 data.txt에 포함되어 있으나, hexdump로 본 결과가 여러 번 압축되어 있다고 합니다.

  • 저희가 서버에서 마음대로 파일을 생성하고, 삭제할 권한이 없기 때문에 문제에서도 tmp 폴더를 활용하라고 하네요.


해결

image.png
  • ls -al 명령어로 data.txt 파일을 확인해봅니다.

image.png
  • file 명령어를 통해 data.txt가 text 형식임을 알 수 있습니다.

  • cat 명령어를 통해 data.txt 파일을 확인해보면 hexdump 명령어를 실행한 값이 저장되어 있는 것을 알 수 있습니다. hexdump는 바이너리에 대해서 내용을 hex 값으로 변환해서 보여주는 역할을 수행합니다. 가운데 섹션이 hex 값이고, 오른쪽 섹션이 원래 저희가 이전 문제에서 읽었던 단순 파일의 내용들을 나타내는 부분입니다.

    • 원래라면 data type일때 저희가 읽지 못하는 글자들이 있는데, 이들에 대해서도 모두 hex 값은 할당되어 있기 때문에 이를 확인해볼 수 있는 명령어라고 할 수 있겠습니다.

    • data type에 대해서 모두 눈으로 읽지 못하는 이유는 hex 값에 대해서 ASCII text로 매핑할 값이 없어, 치환할 문자가 없기 때문에 보이지 않는 것이라고 할 수 있겠습니다. 실제로는 모두 값을 갖고 있습니다.

image.png
image.png
  • 어쨌든 문제에서 제공해준 것에 따라 압축 해제를 하기 위해서는 mkdir 명령어를 통해 /tmp 디렉토리 아래에 myname123이라는 디렉토리를 형성해야 합니다.

    • 참고로 /tmp 폴더는 임시 폴더이기 때문에, 영구적으로 파일이 남지 않습니다. 그리고 저희는 bandit12 홈디렉토리에 write 권한이 부여되지 않아서 압축 해제와 같은 작업을 할 수 없는데, /tmp에 권한이 부여되어 있기 때문에 여기서 작업이 가능한 것입니다.

  • 어쨌든 cp 명령어를 통해 data.txt 파일을 새로 만든 myname123 디렉토리에 복사해봅니다.

    • cp는 명령어에서 유추해볼 수 있듯, copy의 약어 입니다. 파일/디렉토리를 복사하는 기능을 갖고 있습니다.

  • ls -al 명령어를 통해 /tmp/myname123data.txt파일이 들어있음을 확인할 수 있습니다.

 

이제 실제로 /tmp 폴더로 이동해서 작업을 진행해보겠습니다.

image.png
image.png
  • cd 명령어를 통해 /tmp/myname123 으로 이동합니다.

  • xxd 명령어를 통해 hexdump 결과를 가지고 있는 data.txt 파일을 16진수로 읽을 수 있습니다.

    • 원본 파일을 유지하기 위해서 data라는 새로운 파일로 표준 출력을 redirect 하였습니다.

  • ls -al 명령어를 통해 data 파일이 새롭게 만들어졌음을 확인할 수 있습니다.

1단계 압축 파일: gzip

이제 data 파일에 대해서 file 정보를 출력해보겠습니다.

image.png
  • file 명령어를 통해 data의 파일 형식을 확인한 결과, gzip으로 압축되어 있는 것을 확인해볼 수 있습니다.

  • gzip 으로 압축된 파일을 해제하기 위해서는 반드시 파일의 확장자가 .gz으로 설정되어야 합니다.

    • 즉, data인 파일명을 data.gz으로 변경해야 합니다.

image.png
  • 이는 mv 명령어를 통해 가능합니다.

    • mv 명령어는 명령어에서 유추할 수 있듯, move의 기능을 수행합니다.

      • 구체적으로 1) 파일 이동, 2) 파일명 변경을 수행할 수 있습니다.

  • mv [현재 파일명] [변경할 파일명] 형태로 사용하면 파일명을 변경할 수 있습니다.

    • 이와 같은 형태로 data파일을 data.gz로 변경한 뒤, ls -al 명령어를 통해 파일명이 변경된 것을 확인할 수 있습니다.

여기까지 진행하면, 압축파일에 확장자가 붙어있지 않았던 것을 확장자까지 붙였습니다. 이제 압축파일을 해제하는 과정을 거쳐야합니다. .gz 파일에 대해서 어떻게 압축을 해제할 수 있을까요?

image.png
  • 바로 gzip 명령어를 통해 data.gz 파일의 압축을 해제할 수 있습니다.

  • 앞선 문제에서 base64를 decoding 할 때 option -d를 붙였듯, 여기서도 동일하게 -d 옵션을 활용하면 압축이 해제 됩니다.

    • 확인해보면 압축이 해제되어 .gz 확장자가 사라지게 된 것을 알 수 있습니다.

2단계 압축 파일: bzip
image.png
  • 압축이 해제된 파일에 대해서 file 명령어로 data 파일의 형식을 확인한 결과, 이번에는 bzip2 로 압축되어 있는 것을 확인해볼 수 있습니다.

  • 이 역시 압축 파일의 한 형태입니다.

image.png
  • bzip2 명령어에서 마찬가지로 -d 옵션을 통해 data 파일의 압축을 해제한 결과, data.out 이라는 파일이 생성된 것을 확인할 수 있습니다.

3단계 압축 파일: gzip
image.png
  • file 명령어를 통해 data.out 파일의 형태를 확인하니, gzip으로 압축되어 있습니다.

image.png
  • 앞선 과정과 동일하게 data.out 파일에 .gz 확장자를 붙여준 후 압축을 해제해봅니다.

4-5단계 압축 파일: tar
image.png
  • file 명령어를 통해 data.out 파일의 형식을 확인하니 tar 아카이브로 묶여져 있습니다.

image.png
  • tar 명령어를 통해 data.out 파일의 묶음을 해제한 결과, data5.bin이라는 파일이 생성되었습니다.

    • tar는 압축을 해제할 때 -d를 사용하지 않습니다. 자세한 내용은 [핵심] 파트 참고해주세요.

  • 이후 동일하게 file 명령어를 통해 data5.bin 파일의 형태를 확인한 결과, 동일하게 tar 아카이브로 묶여져 있습니다.

  • 동일하게 압축을 해제해보면 data6.bin 파일이 생성되고, file 명령어를 통해 bzip2 로 압축되어 있는 것을 확인해볼 수 있습니다.

6단계 압축 파일: bzip
image.png
  • bzip2 명령어를 통해 data6.bin 파일의 압축을 해제한 결과, data6.bin.out 이라는 파일이 생성된 것을 확인할 수 있습니다.

7-8단계 압축 파일: tar, gzip
image.png
  • file 명령어를 통해 data6.bin.out 파일의 형태를 확인하니, tar 아카이브로 묶여 있었고, tar 명령어를 통해 해제한 결과 data8.bin 파일이 생성되었습니다.

  • file 명령어를 통해 data8.bin 파일의 형태를 확인한 결과, gzip으로 압축되어 있습니다.

 

image.png
  • gzip 확장자에 맞게 파일명을 변경한 후 압축을 해제한 결과, data8.bin 파일이 생성되었습니다.

image.png
  • file 명령어를 통해 data8.bin 파일의 형태가 text 형식임을 확인할 수 있습니다.

  • 최종적으로 cat 명령어를 통해 data8.bin 파일을 확인해보면 패스워드를 획득할 수 있습니다.


핵심

tar (Tape ARchiver) 명령어

  • 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령

  • 파일 저장 및 전송 시, 다수의 파일 존재할 경우 관리 복잡 여러 파일을 하나로 합쳐 처리하기 위한 목적으로 만든 프로그램

  • Tape: 과거 사용되었던 저장 장치

  • ARchiver: 여러 개의 파일을 하나의 파일로 합치는 프로그램

테이프에 파일을 백업하기 위해 만들어진 프로그램

image.png
  • tar 자체는 파일 압축을 수행하지 않음. 단순히 여러 파일을 하나의 파일로 묶는 용도로 사용됨

  • tar을 통해 하나로 합쳐진 파일을 gzip이나 bzip2 방식을 사용해 압축할 수 있음

    • 이 때, gizp이나 bzip2 명령을 따로 수행하지 않고 tar 명령의 옵션으로 처리 가능함

  • 단순 아카이버 기능 + tar로 묶여지기 전 파일들의 속성과 심볼릭 링크, 디렉토리 구조 등을 그대로 가져갈 수 있음

  • 리눅스 용 프로그램, 데이터, 소스 및 라이브러리 등을 배포하는 용도로 많이 사용

tar 명령을 통해 만들어지는 파일의 확장자

  • ".tar" 사용

gzip 또는 bzip2으로 압축된 경우

  • 파일 뒤에 ".gz" 또는 ".bz2" 확장자 추가 => ".tar.gz" 또는 ".tar.bz2"로 파일 이름을 지정

  • 간략하게, tar + gzip을 ".tgz"로, tar + bzip2를 ".tb2", ".tbz", "tbz2" 등으로 지정 가능

image.png

옵션 사용

  • 1. tar 아카이브 묶기: cvf 사용

  • 2. tar 아카이브 풀기: xvf 사용

  • 3. tar로 묶고 gzip으로 압축하기: zcvf 사용

  • 4. gzip으로 압축된 tar 아카이브 풀기: zxvf 사용

  • 5. tar로 묶고 bzip2로 압축하기: jcvf 사용

  • 6. bzip2로 압축된 tar 아카이브 풀기: jxvf 사용

 

gzip(GNU zip) 명령어

  • 파일 압축 명령어

  • gzip [option] 압축할 파일 형태로 사용

  • .gz의 확장자를 가져야 해제 가능

  • zcat 명령어로 압축 파일 내용 확인 가능

  • 여러 파일을 하나의 파일로 모을 수 없음

  • 여러 파일을 하나의 파일로 압축하기 위해 보통 tar 명령어와 함께 사용

  • 압축 → gzip 사용, 압축 해제 → gunzip 사용 (= gzip -d)

image.png
image.png

bzip2 명령어

  • 파일 압축 명령어

  • gzip, zip 보다 압축률 좋지만 느린 속도

  • .bz2 의 확장자를 가져야 함

  • bzip2로 압축하 파일이 손상된 경우 bzip2recover [손상된 압축 파일명] 형태로 복구 가능

  • 압축 → bzip2 사용, 압축 해제 → bunzip2 사용 (= bzip -d)

  • bzcat 명령어로 압축 파일 내용 확인 가능

    image.png

xxd 명령어

  • 주어진 파일이나 표준 입력으로 들어온 문자들을 16진수로 보여줌

image.png

mkdir (make directory) 명령어

  • 새로운 디렉토리를 만들 때 사용

  • 파일을 만들고자 하면 touch 명령어 사용할 것

  • rmdir 명령어로 비어있는 디렉토리를 삭제 가능 (파일이 들어있는 디렉토리 삭제 불가)

  • 파일이 들어있는 디렉토리 삭제 시, rm -r [filename] 으로 가능함 (위험한 명령이니 주의!)

image.png

cp 명령어

  • 파일, 디렉토리 복사

  • 데이터 백업 시 유용

  • cp file1 file2 형태로 사용

  • 파일을 디렉토리 안으로 복사할 경우, cp file1 dir1/ 의 형태로 사용

  • 한번에 여러 개의 파일을 디렉토리 안으로 복사할 경우, cp file1 file2 dir/의 형태로 사용

image.png

mv 명령어

  • 파일 이동

  • 같은 폴더에서 파일, 디렉토리 이동하는 경우 이름 변경 효과 있음

image.png
image.png
image.png


댓글

이 글이 마음에 드셨다면 반응이나 댓글을 남겨주세요!

댓글을 작성하려면 로그인하세요

로딩 중...
공유
sikk

sikk

Author

보안을 공부하는 개발자입니다. Web2/Web3 보안과 시스템 해킹에 관심이 많습니다.

뉴스레터 구독하기

새로운 포스트가 올라오면 이메일로 알려드려요!