この大会は2019/4/6 7:00(JST)~2019/4/8 7:00(JST)に開催されました。
今回もチームで参戦。結果は850点で772チーム中72位でした。
自分で解けた問題をWriteupとして書いておきます。
Welcome! (Misc)
問題にフラグが書いてある。
flag{w3lc0m3_t0_th3_SwAmP}
We Three Keys (Crypto)
スクリプトの処理概要は以下の通り。
・key選択(1/2/3) ・処理選択 ■1: Encrypt a message ・メッセージ入力(hex) iv = key key = key AES-CBC暗号 ■2: Decrypt a message ・メッセージ入力(hex) iv = key key = key AES-CBC復号 ■3: Choose a new key ・key変更(1/2/3)
key1~3を求めればよさそう。
平文1ブロック目:\x00*16 平文2ブロック目:\x10*16(パディング)
上記の形式で暗号化する。この結果をC1+C2とする。以下の形式の暗号文を復号する。
暗号文1ブロック目:\x00*16 暗号文2ブロック目:C1
この結果をP1+P2とすると、CBCモードの特性によりP2はIVになり、KEYでもある。これをkey1~3に対して繰り返し行い、連結するとフラグになる。
import socket from base64 import b64encode from Crypto.Util.number import * def recvuntil(s, tail): data = '' while True: if tail in data: return data data += s.recv(1) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('chal1.swampctf.com', 1441)) flag = '' for k in range(1, 4): if k == 1: data = recvuntil(s, '<= ') print data + str(k) else: data = recvuntil(s, '<= ') print data + '3' s.sendall('3\n') data = recvuntil(s, '<= ') print data + str(k) s.sendall(str(k) + '\n') data = recvuntil(s, '<= ') print data + '1' s.sendall('1\n') send_data = '0' * 32 data = recvuntil(s, '<= ') print data + send_data s.sendall(send_data + '\n') data = recvuntil(s, '\n').strip() print data enc = '0' * 32 + data[:32] data = recvuntil(s, '<= ') print data + '2' s.sendall('2\n') send_data = enc data = recvuntil(s, '<= ') print data + send_data s.sendall(send_data + '\n') data = recvuntil(s, '\n').strip() print data key = data[32:].decode('hex') flag += key print flag
flag{w0w_wh4t_l4zy_k3yz_much_w34k_crypt0_f41ls!}
Leap of Faith (Forensics)
jpgが添付されている。EXIFを見てみる。
$ exiftool leap_of_faith.jpeg ExifTool Version Number : 10.10 File Name : leap_of_faith.jpeg Directory : . File Size : 41 kB File Modification Date/Time : 2019:04:06 07:38:44+09:00 File Access Date/Time : 2019:04:06 07:39:26+09:00 File Inode Change Date/Time : 2019:04:06 07:38:44+09:00 File Permissions : rwxrwxrwx File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg Exif Byte Order : Little-endian (Intel, II) X Resolution : 72 Y Resolution : 72 Resolution Unit : inches Modify Date : 2019:04:04 09:22:27 Exif Version : 0210 Date/Time Original : 2019:04:04 09:22:27 Flashpix Version : 0100 Color Space : Uncalibrated Thumbnail Offset : 226 Thumbnail Length : 25217 Image Width : 720 Image Height : 480 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 720x480 Megapixels : 0.346 Thumbnail Image : (Binary data 25217 bytes, use -b option to extract) $ exiftool -b leap_of_faith.jpeg > extract
extractの先頭のごみを削るとjpgになるので、またEXIFを見てみる。
$ exiftool extract_fix.jpg ExifTool Version Number : 10.10 File Name : extract_fix.jpg Directory : . File Size : 25 kB File Modification Date/Time : 2019:04:06 08:12:20+09:00 File Access Date/Time : 2019:04:06 08:14:04+09:00 File Inode Change Date/Time : 2019:04:06 08:12:20+09:00 File Permissions : rwxrwxrwx File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg Exif Byte Order : Little-endian (Intel, II) X Resolution : 72 Y Resolution : 72 Resolution Unit : inches Modify Date : 2019:04:04 09:23:36 Exif Version : 0210 Date/Time Original : 2019:04:04 09:23:36 Flashpix Version : 0100 Color Space : Uncalibrated Thumbnail Offset : 226 Thumbnail Length : 5199 Image Width : 334 Image Height : 302 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 334x302 Megapixels : 0.101 Thumbnail Image : (Binary data 5199 bytes, use -b option to extract) $ exiftool -b leap_of_faith.jpeg > extract2
extract2の先頭のごみを削ると、またまたjpgになり、フラグが書いてある。
flag{FR33_Y0UR_M1ND}