SwampCTF 2019 Writeup

この大会は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になり、フラグが書いてある。
f:id:satou-y:20190415215045j:plain

flag{FR33_Y0UR_M1ND}