b01lers CTF Writeup

この大会は2020/3/14 9:00(JST)~2020/3/16 9:00(JST)に開催されました。
今回もチームで参戦。結果は 103点で660チーム中219位でした。
自分で解けた問題をWriteupとして書いておきます。

Welcome! (A WELCOME CHALLENGE 1)

問題にフラグが書いてあった。

pctf{all_ur_hack_are_belong_to_us}

Discord Flag (A WELCOME CHALLENGE 1)

Discordに入り、#announcementsチャネルのメッセージを見ると、フラグが書いてあった。

pctf{should_have_used_irc}

Harvesting Season (CRYPTO 100)

jpgが添付されている。EXIFを見てみる。

$ exiftool fr3sh_h4rv3st.jpg 
ExifTool Version Number         : 10.80
File Name                       : fr3sh_h4rv3st.jpg
Directory                       : .
File Size                       : 2.1 MB
File Modification Date/Time     : 2020:03:13 04:13:02+09:00
File Access Date/Time           : 2020:03:14 13:22:30+09:00
File Inode Change Date/Time     : 2020:03:13 04:13:02+09:00
File Permissions                : rwxrwxrwx
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Exif Byte Order                 : Big-endian (Motorola, MM)
X Resolution                    : 1
Y Resolution                    : 1
Resolution Unit                 : None
Artist                          : 1921754512366910363569105a73727c592c5e5701715e571b76304d3625317c1b72744d0d1d354d0d1d73131c2c655e
Y Cb Cr Positioning             : Centered
Image Width                     : 3456
Image Height                    : 4608
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                      : 3456x4608
Megapixels                      : 15.9

Artistの値が暗号になっているようだ。キーの長さは4バイトとのことなので、pctfから始まることを前提にキーを求め、XORで復号する。

enc = '1921754512366910363569105a73727c592c5e5701715e571b76304d3625317c1b72744d0d1d354d0d1d73131c2c655e'
enc = enc.decode('hex')

pre_flag = 'pctf'

key = []
for i in range(len(pre_flag)):
    code = ord(enc[i]) ^ ord(pre_flag[i])
    key.append(code)

flag = ''
for i in range(len(enc)):
    code = ord(enc[i]) ^ key[i%len(key)]
    flag += chr(code)

print flag
pctf{th3_wh331s_0n_th3_tr41n_g0_r0und_4nd_r0und}

Survey (A WELCOME CHALLENGE 1)

アンケートに答えたら、フラグが表示された。

pctf{s33_y0u_n3xT_Y34r_ch0o_chO0}