SECCON CTF 2023 Final Writeup

はじめに 2023/12/23(土)- 2023/12/24(日)の2日間でSECCON CTF 2023の決勝戦が開催されました。 チーム southball 1 の4人で参加して国内3位でした🎉 思った以上の結果が出せて嬉しいです。 SECCON本戦に出場していました チームsouthballで国内3位でした! pic.twitter.com/CNyPbsQ2le — Laika (@ki4l_) December 24, 2023 チームメイトのwriteup Ciffelia: https://blog.ciffelia.com/article/seccon2023-finals southball: https://github.com/southball/ctf-writeups/tree/main/SECCON-CTF-2023-Final [Crypto] DLP 4.0 1import os 2import secrets 3import signal 4 5FLAG = os.getenv("FLAG", "FAKEFLAG{THIS_IS_FAKE}") 6 7 8if __name__ == "__main__": 9 signal.alarm(333) 10 p = int(input("What's your favorite 333-bit p: ")) 11 if not is_prime(p) or p.bit_length() != 333: 12 print("Invalid p") 13 exit() 14 order = p**2 - 1 15 x = secrets....

2023-12-29 · 9 min · 1864 words · Laika

SDCTF 2023 writeup

I participated SDCTF 2023 as Wani Hackase and took 5th place. Thank you for organizing nice CTF events! PWN/money-printer This binary contains a format string bug and the flag is located at stack. I just send %i$08lx to reveal the flag as shown below. 1from toyotama import * 2 3_r = Socket("nc money.sdc.tf 1337") 4_r.sendlineafter("want?\n", -1000) 5 6_r.sendlineafter("audience?\n", " ".join([f"%{i}$08lx" for i in range(10, 16)])) 7_r.recvuntil("said: ") 8flag = _r.recvline().decode().split() 9 10flag = b""....

2023-05-11 · 11 min · 2315 words · Laika

RTACTF 2023 Writeup

RTACTF 2023にUZQueenで参加しました。1 起きたらちょうどRTACTFのpwnをやっていたので、布団でしばらく観戦したあとcryptoだけ参戦しました。 というか走っていた方々、手元を見られながらも解けるの本当にすごい ...

2023-03-21 · 2 min · 349 words · Laika

SECCON Beginners CTF 2022 writeup

6月4日の14時から24時間開催されていたSECCON Beginners CTF 2022にWani Hackase で参戦して5位でした。 普段のreversing担当が不在だったので、reversingとcryptoを担当しました。 WinTLS [reversing, 102 solved] Windowsというだけで忌避していたこの手の問題に、久しぶりに挑戦しました。 .rdataを漁っていると香ばしい文字列(c4{f..., tfb%...)があったのでxrefで参照元を見に行きます。 2つのスレッドで文字列を処理していて、flagのインデックスに応じて2つの文字列に振り分けているようです。 操作は単純なので逆の操作をしてあげると、文字列を復元できます。 1t1 = b"c4{fAPu8#FHh2+0cyo8$SWJH3a8X" 2t2 = b"tfb%s$T9NvFyroLh@89a9yoC3rPy&3b}" 3 4flag = [] 5k1, k2 = 0, 0 6for i in range(len(t1+t2)): 7 if i % 3 == 0 or i % 5 == 0: 8 flag.append(t1[k1]) 9 k1 += 1 10 else: 11 flag.append(t2[k2]) 12 k2 += 1 13 14print(bytes(flag)) Flag: ctf4b{f%sAP$uT98Nv#FFHyrh2o+Lh0@8c9yoa98$ySoCW3rJPH3y&a83Xb} ところで、UndefinedFunctionがめちゃくちゃ見にくい…… Recursive [reversing, 127 solved] 再帰で文字列をぐちゃぐちゃにしてあります。 少しreversingをすると文字列長が書いてあるので、処理前の文字列が処理後にどこに配置されるかが分かれば、逆操作で元に戻せます。...

2022-06-05 · 5 min · 1064 words · Laika

LINE CTF 2022 Writeup

I participated in LINE CTF 2022 as a member of Wani Hackase, and solved four crypto challenges. ss-puzzle Just play an XOR puzzle using the fact S[0] == b"LINECTF{". Some values are still unknown but predictable from the restored flag. 1def xor(a, b): 2 return bytes(i ^ j for i, j in zip(a, b)) 3 4with open("Share1", "rb") as f: 5 s1 = f.read() 6with open("Share4", "rb") as f: 7 s4 = f....

2022-03-26 · 7 min · 1380 words · Laika

RTACTF 2021 Writeup

RTACTF 2021に参加しました。TAがメインのCTFって見たことなかったので新鮮でした。 ...

2021-12-19 · 2 min · 387 words · Laika

Asian Cyber Security Challenge 2021 Writeup

I played Asian Cyber Security Challenge 2021 this weekend and finished in 55th/483 place. I solved some crypto challenges and here’s how I solve them. ...

2021-09-22 · 5 min · 942 words · Laika

zer0pts CTF 2021 Writeup

...

2021-03-27 · 2 min · 426 words · Laika

Harekaze mini CTF 2020 Writeup

Wani Hackaseで参加して1032点の23位。 開始時刻ちょっと後に、予定を入れてしまっていたのでそんなに取り組めなかったけど勉強になりました。問題設定はシンプルだけど一筋縄では解けない問題が好きなので楽しかったです。 Harekazeの方々運営ありがとうございました🙇🙇 ...

2020-12-27 · 4 min · 673 words · Laika

SECCON 2020 Online CTF writeup

SECCON 2020 Online CTF に Wani Hackase で参戦して 44 位でした。 面白そうな問題が多かったけど、24時間が思ったより短く、あっという間に終わってしまった… This is RSA [Crypto, 62 solves] 特殊な素数生成を行っている。16 進数で 2 桁ずつ見ていくと、[$0\rm{x}30,0\rm{x}39$] の範囲に収まっている。これが枝刈りとして効いていて、下位の桁から探索していくと素因数分解できる。 1import sys 2from itertools import product 3 4from Crypto.Util.number import * 5 6from output import N, c 7 8sys.setrecursionlimit(10000) 9e = 0x10001 10 11def dfs(D, P, Q): 12 if D == 200 or P*Q == N: 13 if P*Q != N: 14 return 15 d = pow(e, -1, (P-1)*(Q-1)) 16 m = pow(c, d, N) 17 print(long_to_bytes(m)) 18 exit(0) 19 20 for i, j in product(range(10), repeat=2): 21 p = 3<<(8*D+4) | i<<(8*D) | P 22 q = 3<<(8*D+4) | j<<(8*D) | Q 23 mask = (1<<(8*D+8)) - 1 24 if (p*q)&mask == N&mask: 25 dfs(D+1, p, q) 26 27dfs(0, 0, 0) Flag: SECCON{I_would_always_love_the_cryptography_and_I_know_RSA_never_gets_old_So_Im_always_a_fan_of_this_mathematical_magic_and....

2020-10-11 · 1 min · 205 words · Laika