무슨 파일인고 보니, TAR이기도 하고, Zip이기도 하고, bzip2, gzip 등... 정말 많습니다.
아무래도 저렇게 해서 txt파일을 매우 압축한 것 같습니다.
위와 같이 손으로 하는 건 문제가 있습니다....
이건 프로그래밍을 해야 할 문제 같았습니다.
문제는 POSIX tar, bzip2, XZ, gzip, Zip 으로 총 다섯 가지 방식으로 압축되어 있습니다.
Python의 모듈이 있는 것들만 있군요...
코드를 작성하여 문제 파일을 쭉 풀어보면 총 723회 압축되어 있었음을 알 수 있었습니다...(숫자를 잘못 세어서 720회 내외일 수 있습니다.)
#!/bin/python3 import bz2 import gzip import tarfile import zipfile import lzma import magic import os def decompress_bz2(filename): with open(filename, "rb") as file_rb: tmpData = file_rb.read() with open('flag.txt', 'wb') as file_wb: file_wb.write(bz2.decompress(tmpData)) def decompress_gzip(filename): with gzip.open(filename, "rb") as gzip_rb: tmpData = gzip_rb.read() with open('flag.txt', 'wb') as file_wb: file_wb.write(tmpData) def decompress_zip(filename): with zipfile.ZipFile(filename) as zip_decompress: zip_decompress.extractall() def decompress_tar(filename): with tarfile.TarFile(filename) as tar_decompress: tar_decompress.extractall() def decompress_xz(filename): with lzma.open(filename) as xz_decompress: tmpData = xz_decompress.read() with open('flag.txt', 'wb') as file_wb: file_wb.write(tmpData) def find_compress_type(filename, cnt): ret = magic.from_file(filename) if "POSIX tar" in ret: return "tar" elif "bzip2" in ret: return "bz" elif "XZ compressed" in ret: return "xz" elif "gzip" in ret: return "gz" elif "Zip archive" in ret: return "zip" else: print("[-] ret : ", ret) return None def file_rename(filename, compress_type, cnt): tmpFileName = "flag_%03d" % cnt os.rename(filename, tmpFileName + "." + compress_type) return tmpFileName + "." + compress_type def decompress(filename, compress_type): if compress_type == "tar": decompress_tar(filename) elif compress_type == "bz": decompress_bz2(filename) elif compress_type == "xz": decompress_xz(filename) elif compress_type == "gz": decompress_gzip(filename) elif compress_type == "zip": decompress_zip(filename) else: print("[-] Error ") exit() Done = False cnt = 0 while not Done: cnt += 1 FileName = "flag.txt" compress_type = find_compress_type(FileName, cnt) print("[=] Compress Type : %s" % compress_type) if compress_type == None: print("[+] None Done !") Done = True break FileName = file_rename(FileName, compress_type, cnt) print("[=] Rename Name : %s" % FileName) decompress(FileName, compress_type)
압축을 쭉 풀어 txt파일을 보면 플래그가 튀어 나옵니다.
FLAG{matri0sha256}
'CTF > 2020_SarCTF' 카테고리의 다른 글
SarCTF2020 - Crossw0rd (Rev) (0) | 2020.02.18 |
---|---|
SarCTF2020 - Layout (Misc - Programming) (0) | 2020.02.17 |
SarCTF2020 - Car for Sherlok (Web - Race Condition) (0) | 2020.02.17 |
SarCTF2020 - Some bot (Web - Command Injection) (0) | 2020.02.17 |