CyBRICS CTF 2020 Writeup

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

Mic Check (Cyber, Baby)

ルールのページにフラグの例が書いてある。

cybrics{Na5JRe_g0_G3u_Z1P_Pu3PX}

{}の中をrot13でデコードする。

cybrics{An5WEr_t0_T3h_M1C_Ch3CK}

Broken Invitation (Cyber, Baby)

同じメッセージのRSA暗号にn, cのペアが3組あり、eはすべて3。Hastad's broadcast attackで復号する。

#!/usr/bin/env python3
import functools
from Crypto.Util.number import *

def chinese_remainder(n, a):
    sum = 0
    prod = functools.reduce(lambda a, b: a*b, n)
    for n_i, a_i in zip(n, a):
        p = prod // n_i
        sum += a_i * mul_inv(p, n_i) * p
    return sum % prod
 
def mul_inv(a, b):
    b0 = b
    x0, x1 = 0, 1
    if b == 1: return 1
    while a > 1:
        q = a // b
        a, b = b, a%b
        x0, x1 = x1 - q * x0, x0
    if x1 < 0: x1 += b0
    return x1

def inv_pow(c, e):
    low = -1
    high = c+1
    while low + 1 < high:
        m = (low + high) // 2
        p = pow(m, e)
        if p < c:
            low = m
        else:
            high = m
    m = high
    assert pow(m, e) == c
    return m

NA = 924506488821656685683910901697171383575761384058997452768161613244316449994435541406042874502024337501621283644549497446327156438552952982774526792356194523541927862677535193330297876054850415513120023262998063090052673978470859715791539316871
NB = 88950937117255391223977435698486265468789676087383749025900580476857958577458361251855358598960638495873663408330100969812759959637583297211068274793121379054729169786199319454344007481804946263873110263761707375758247409
NC = 46120424124283407631877739918717497745499448442081604908717069311339764302716539899549382470988469546914660420190473379187397425725302899111432304753418508501904277711772373006543099077921097373552317823052570252978144835744949941108416471431004677
c1 = 388825822870813587493154615238012547494666151428446904627095554917874019374474234421038941934804209410745453928513883448152675699305596595130706561989245940306390625802518940063853046813376063232724848204735684760377804361178651844505881089386
c2 = 4132099145786478580573701281040504422332184017792293421890701268012883566853254627860193724809808999005233349057847375798626123207766954266507411969802654226242300965967704040276250440511648395550180630597000941240639594
c3 = 43690392479478733802175619151519523453201200942800536494806512990350504964044289998495399805335942227586694852363272883331080188161308470522306485983861114557449204887644890409995598852299488628159224012730372865280540944897915435604154376354144428
N = [NA, NB, NC]
C = [c1, c2, c3]
e = len(N)
a = chinese_remainder(N, C)
for n, c in zip(N, C):
    assert a % n == c
m = inv_pow(a, e)
flag = m.to_bytes(m.bit_length()//8 + 1, byteorder='little')
print(flag)
cybrics{h3y_guY5_c0m3_t0_my_p4rtY!}

XCorp (Network, Baby)

No.313のパケットからnet10.exeをエクスポートする。No.32のパケットからUser name = u17ra_h4ck3rとわかる。net10.exeを実行し、usernameにこの名前を入力し、ログインすると、フラグが表示された。
f:id:satou-y:20200803214428p:plain

cybrics{53CuR1tY_N07_0b5CuR17Y}

Google Cloud (Network, Easy)

ICMPでデータをいろいろ送受信している。その中の以下のidのデータだけjpgの一部になっていそう。

04, 08, 0b, 0e, 11, 13, 15, 17, 18, 19, 1a, 1b, 1c

エクスポートして結合する。

>copy /b 04.bin + 08.bin + 0b.bin + 0e.bin + 11.bin + 13.bin + 15.bin + 17.bin + 18.bin + 19.bin + 1a.bin + 1b.bin + 1c.bin flag.jpg
04.bin
08.bin
0b.bin
0e.bin
11.bin
13.bin
15.bin
17.bin
18.bin
19.bin
1a.bin
1b.bin
1c.bin
        1 個のファイルをコピーしました。

結合したjpg画像にフラグが書いてあった。
f:id:satou-y:20200803214603j:plain

cybrics{b3c4us3_PNG_is_p2oNoUnc3d_piNg}

Hellish Reverse (rebyC, Baby)

コードの下の方のコメント内にbase64文字列がある、

# eW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZsYWcgeW91IGZvdW5kIGlzIGNvcnJlY3Q=
# c2VyaW91c2x5LCBkb24ndCBzdGljayBmb3IgdG9vIGxvbmcgb24gdGhpcyBjaGFsbA==
# aWYgaXQgZGlkbid0IHBvcCBxdWlja2x5LCBsZXQgaXQgZ29vLCBsZXQgaXQgZ29vb29v
# YW55d2F5IGl0IHdpbGwgYmUgNTAtaXNoIHBvaW50cyBpbiB0aGUgZW5kLCByaWdodD8=
$ echo eW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZsYWcgeW91IGZvdW5kIGlzIGNvcnJlY3Q= | base64 -d
you can use this script to verify that the flag you found is correct

$ echo c2VyaW91c2x5LCBkb24ndCBzdGljayBmb3IgdG9vIGxvbmcgb24gdGhpcyBjaGFsbA== | base64 -d
seriously, don't stick for too long on this chall

$ echo aWYgaXQgZGlkbid0IHBvcCBxdWlja2x5LCBsZXQgaXQgZ29vLCBsZXQgaXQgZ29vb29v | base64 -d
if it didn't pop quickly, let it goo, let it gooooo

$ echo YW55d2F5IGl0IHdpbGwgYmUgNTAtaXNoIHBvaW50cyBpbiB0aGUgZW5kLCByaWdodD8= | base64 -d
anyway it will be 50-ish points in the end, right?

元のhellishreverse.tar.gzに戻って、7-Zip File Managerで見てみると、中のファイル名は以下のようになっている。

vos_rebyc10_hellishreverse_verify_with_cybrics{ok_t4ht_wA5_qu1T3_4n_un3Xpec7eD_w4Y}.tar
cybrics{ok_t4ht_wA5_qu1T3_4n_un3Xpec7eD_w4Y}

Hunt (Web, Baby)

5個のキャプチャが動いてなかなかクリックできない。ウインドウを小さくして、動ける範囲を狭くして5個クリックすると、フラグが表示された。

cybrics{Th0se_c4p7ch4s_c4n_hunter2_my_hunter2ing_hunter2}