この大会は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にこの名前を入力し、ログインすると、フラグが表示された。
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画像にフラグが書いてあった。
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}