この大会は2024/6/29 9:00(JST)~2024/7/1 9:00(JST)に開催されました。
今回もチームで参戦。結果は2341点で959チーム中161位でした。
自分で解けた問題をWriteupとして書いておきます。
Sanity Check (Miscellaneous)
Discordに入り、#announcementsチャネルのメッセージを見ると、フラグが書いてあった。
uiuctf{plz_n0_ch4tGPT}
Hip With the Youth (OSINT)
Instagramで検索すると、以下のページが見つかる。
https://www.instagram.com/longislandsubwayauthority/
@longislandsubwayauthorityのリンク先を見てみる。
スレッドの一番下に以下のように書いてある。
I've been told if I include a flag with my post I'll get more engagement, well here goes nothing!
この返信にフラグが書いてあった。
uiuctf{7W1773r_K!113r_321879}
An Unlikely Partnership (OSINT)
「Hip With the Youth」で見つけたスレッドに以下のLinkedInのURLがリンクされている。
https://www.linkedin.com/in/long-island-subway-authority/
このページにあるスキルの項目をすべて表示させると、Transportationに1件のスキル推薦があるので、詳細を見てみる。
このUIUC Chanが戦略的ビジネス提携を結んだ相手のようだ。プロフィールを見てみると、自己紹介にフラグが書いてあった。
uiuctf{0M160D_U1UCCH4N_15_MY_F4V0r173_129301}
X Marked the Spot (Cryptography)
フラグがXORで暗号化されている。鍵の長さは8。フラグの長さは48で鍵の長さで割り切れる。フラグの形式は"uiuctf{"から始まり"}"で終わる。このため、XOR鍵を算出することができ、フラグを復号できる。
#!/usr/bin/env python3 with open('ct', 'rb') as f: ct = f.read() flag_head = b'uiuctf{' flag_tail = b'}' key = b'' for i in range(len(flag_head)): key += bytes([ct[i] ^ flag_head[i]]) key += bytes([ct[-1] ^ flag_tail[0]]) flag = '' for i in range(len(ct)): flag += chr(ct[i] ^ key[i % len(key)]) print(flag)
uiuctf{n0t_ju5t_th3_st4rt_but_4l50_th3_3nd!!!!!}
Without a Trace (Cryptography)
サーバの処理概要は以下の通り。
・M = inputs() ・M: すべて0の5×5の行列配列 ・各i行i列目のみ数値を入力し、書き換え ・Mを返却 ・check(M) が0の場合終了 ※Mの入力時に0を指定しなければよい。 ・res = fun(M) ・f: flagを5バイトごとに数値化したもの5個の配列 ・F: すべて0の5×5の行列配列 ・以下5回繰り返し(i) ・F[i][i] = f[i] ・R = F * M ・Rの対角線の合計値を返却 ・resを表示
1回目の5個の入力で、1, 1, 1, 1, 1を指定する。この場合funの表示では、f[0] + f[1] + f[2] + f[3] + f[4]の値が表示される。
次に2, 1, 1, 1, 1を指定する。この場合funの表示では、f[0] * 2 + f[1] + f[2] + f[3] + f[4]の値が表示される。
この結果から1回目のfunの値を引けば、f[0]の値がわかる。同様に他の位置でも実施すれば、フラグを求めることができる。
#!/usr/bin/env python3 from pwn import * from Crypto.Util.number import * def get_trace(p, u): for i in range(5): data = p.recvuntil(b'= ').decode() print(data + str(u[i])) p.sendline(str(u[i]).encode()) data = p.recvline().decode().rstrip() print(data) return int(data.split(' ')[-1]) p = remote('without-a-trace.chal.uiuc.tf', 1337, ssl=True) u_base = [1, 1, 1, 1, 1] trace_base = get_trace(p, u_base) p.close() flag = '' for i in range(5): p = remote('without-a-trace.chal.uiuc.tf', 1337, ssl=True) u = u_base.copy() u[i] = 2 trace = get_trace(p, u) f = trace - trace_base flag += long_to_bytes(f).decode() p.close() print(flag)
実行結果は以下の通り。
[+] Opening connection to without-a-trace.chal.uiuc.tf on port 1337: Done [WAT] Welcome [WAT] Define diag(u1, u2, u3. u4, u5) [WAT] u1 = 1 [WAT] u2 = 1 [WAT] u3 = 1 [WAT] u4 = 1 [WAT] u5 = 1 [WAT] Have fun: 2000128101369 [*] Closed connection to without-a-trace.chal.uiuc.tf port 1337 [+] Opening connection to without-a-trace.chal.uiuc.tf on port 1337: Done [WAT] Welcome [WAT] Define diag(u1, u2, u3. u4, u5) [WAT] u1 = 2 [WAT] u2 = 1 [WAT] u3 = 1 [WAT] u4 = 1 [WAT] u5 = 1 [WAT] Have fun: 2504408575853 [*] Closed connection to without-a-trace.chal.uiuc.tf port 1337 [+] Opening connection to without-a-trace.chal.uiuc.tf on port 1337: Done [WAT] Welcome [WAT] Define diag(u1, u2, u3. u4, u5) [WAT] u1 = 1 [WAT] u2 = 2 [WAT] u3 = 1 [WAT] u4 = 1 [WAT] u5 = 1 [WAT] Have fun: 2440285994541 [*] Closed connection to without-a-trace.chal.uiuc.tf port 1337 [+] Opening connection to without-a-trace.chal.uiuc.tf on port 1337: Done [WAT] Welcome [WAT] Define diag(u1, u2, u3. u4, u5) [WAT] u1 = 1 [WAT] u2 = 1 [WAT] u3 = 2 [WAT] u4 = 1 [WAT] u5 = 1 [WAT] Have fun: 2426159182680 [*] Closed connection to without-a-trace.chal.uiuc.tf port 1337 [+] Opening connection to without-a-trace.chal.uiuc.tf on port 1337: Done [WAT] Welcome [WAT] Define diag(u1, u2, u3. u4, u5) [WAT] u1 = 1 [WAT] u2 = 1 [WAT] u3 = 1 [WAT] u4 = 2 [WAT] u5 = 1 [WAT] Have fun: 2163980646766 [*] Closed connection to without-a-trace.chal.uiuc.tf port 1337 [+] Opening connection to without-a-trace.chal.uiuc.tf on port 1337: Done [WAT] Welcome [WAT] Define diag(u1, u2, u3. u4, u5) [WAT] u1 = 1 [WAT] u2 = 1 [WAT] u3 = 1 [WAT] u4 = 1 [WAT] u5 = 2 [WAT] Have fun: 2465934208374 [*] Closed connection to without-a-trace.chal.uiuc.tf port 1337 uiuctf{tr4c1ng_&&_mult5!}
uiuctf{tr4c1ng_&&_mult5!}
Determined (Cryptography)
サーバの処理概要は以下の通り。
・M = inputs() ・M: すべて0の5×5の行列配列 ・M[0][0] = p(未知) ・M[0][2]: 入力 ・M[0][4]: 入力 ・M[1][1]: 入力 ・M[1][3]: 入力 ・M[2][0]: 入力 ・M[2][2]: 入力 ・M[2][4]: 入力 ・M[3][1] = q(未知) ・M[3][3] = r(未知) ・M[4][0]: 入力 ・M[4][2]: 入力 ・res = fun(M) ・resを表示
Mは以下のような形式の行列になる。
[ p, 0, m02, 0, m04] [ 0, m11, 0, m13, 0] M = [m20, 0 m22, 0, m24] [ 0, q, 0, r, 0] [m40, 0, m42, 0, 0]
fun関数は行列式を計算している。
例えば、以下の形式にすると、行列式はp * rになる。
[ p, 0, 0, 0, 0] [ 0, -1, 0, 0, 0] M = [ 0, 0 0, 0, 1] [ 0, q, 0, r, 0] [ 0, 0, 1, 0, 0]
nとp * rから公約数を取ればpがわかり、qも算出できる。あとはこのことからRSA暗号の復号をすればフラグが得られる。
$ ncat --ssl determined.chal.uiuc.tf 1337 [DET] Welcome [DET] First things first, gimme some numbers: [DET] M[0][2] = 0 [DET] M[0][4] = 0 [DET] M[1][1] = -1 [DET] M[1][3] = 0 [DET] M[2][0] = 0 [DET] M[2][2] = 0 [DET] M[2][4] = 1 [DET] M[4][0] = 0 [DET] M[4][2] = 1 [DET] Have fun: 89650932835934569650904059412290773134844226367466628096799329748763412779644167490959554682308225788447301887591344484909099249454270292467079075688237075940004535625835151778597652605934044472146068875065970359555553547536636518184486497958414801304532202276337011187961205104209096129018950458239166991017
#!/usr/bin/env python3 from Crypto.Util.number import * with open('gen.txt', 'r') as f: params = f.read().splitlines() n = int(params[0].split(' ')[-1]) e = int(params[1].split(' ')[-1]) c = int(params[2].split(' ')[-1]) pr = 89650932835934569650904059412290773134844226367466628096799329748763412779644167490959554682308225788447301887591344484909099249454270292467079075688237075940004535625835151778597652605934044472146068875065970359555553547536636518184486497958414801304532202276337011187961205104209096129018950458239166991017 p = GCD(n, pr) q = n // p assert p * q == n phi = (p - 1) * (q - 1) d = inverse(e, phi) m = pow(c, d, n) flag = long_to_bytes(m).decode() print(flag)
uiuctf{h4rd_w0rk_&&_d3t3rm1n4t10n}
Naptime (Cryptography)
暗号化処理の概要は以下の通り。
・n = 8 ・b = get_b(n=8) ・b = [] ・bに128以上256以下のランダム整数を追加 ・以下7回繰り返し(i) ・lb: bの合計値 ・found = False ・foundがFalseの間以下繰り返し ・num: 2**(n + i)とlb + 1の最大値以上2**(n + i + 1)以下のランダム整数 ・numがlbより大きい場合 ・found = True ・bにnumを追加 ※要素8個の超増加数列を生成 ・M, W = get_MW(b) ・lb: bの合計 ・M: lb + 1以上2*lb以下のランダム整数 ・W: 1.5 * [bの長さ]の整数値のビット数の素数 ・M, Wを返却 ・a, pi = get_a(b, M, W) ・a_ = [] ・bの各numについて以下を実行 ・a_にnum * W % Mを追加 ・pi: bの長さ未満の順列の一つをランダムに選択したもの ・a: bの長さのa_[pi[i]]の配列 ※a_をランダムに並び替えたもの ・a, piを返却 ・ct = enc(flag, a, n) ・bitstrings = [] ・flagの各文字cについて以下を実行 ・cのASCIIコードを2進数にしたものを8桁に0パディングし、bitstringsに追加する。 ・ct = [] ・bitstringsの各bitsについて以下を実行 ・curr = 0 ・bitsのインデックスi, 文字bについて以下を実行 ・bが"1"の場合、currにa[i]をプラス ・ctにcurrを追加 ・ctを返却 ・aを出力 ・ctを出力
bは超増加数列で、aは(num * W) % Mになっている。Merkle-Hellmanナップサック暗号になっており、シャミアの攻撃法でフラグを復号する。
#!/usr/bin/env sage from Crypto.Util.number import * with open('pub.txt', 'r') as f: params = f.read().splitlines() a = eval(params[0].split(' = ')[1]) ct = eval(params[1].split(' = ')[1]) n = len(a) MULTIPLIER = 100 flag = '' for i in range(len(ct)): M = matrix(ZZ, n + 1, n + 1) M.set_block(0, 0, MULTIPLIER * matrix(n, 1, a)) M.set_block(n, 0, MULTIPLIER * matrix([-ct[i]])) M.set_block(0, 1, 2 * identity_matrix(n)) M.set_block(n, 1, matrix([-1] * n)) for x in M.LLL(): if all(x_i in [-1, +1] for x_i in x[1:]): bits = 0 for x_i in x[1:]: bits *= 2 bits += int(x_i == +1) break flag += chr(bits) print(flag)
uiuctf{i_g0t_sleepy_s0_I_13f7_th3_fl4g}
Snore Signatures (Cryptography)
サーバの処理概要は以下の通り。
・LOOP_LIMIT = 2000 ・p, q, g = gen_snore_group() ・q: 512ビット素数 ・LOOP_LIMITだけ以下繰り返し ・X: 1024ビットランダム整数 ・p = X - X % (2 * q) + 1 ・pが素数の場合、繰り返し終了 ・r = (p - 1) // q ・LOOP_LIMITだけ以下繰り返し ・h: 2以上p-1以下のランダム整数 ・pow(h, r, p) が1以外の場合、繰り返し終了 ・g = pow(h, r, p) ・(p, q, g)を返却 ・p, q, gを表示 ・queries = [] ・10回以下繰り返し ・x, y = snore_gen(p, q, g) ・x: 1以上q-1以下ランダム整数 ・y = pow(g, -x, p) ・(x, y)を返却 ・yを表示 ・m: 数値入力 ・queriesにmを追加 ・s, e = snore_sign(p, q, g, x, m) ・k: 1以上q-1以下ランダム整数 ・r = pow(g, k, p) ・e = hash((r + m) % p) % q ・output = 0 ・3回以下繰り返し ・output: ([(r + m) % pのバイト文字列] + [iのバイト文字列])のsha512のダイジェストを 16進数表記したものを数値にして、(512 * i)ビット左シフトしたものとoutputをXOR ・outputを返却 ・s = (k + x * e) % q ・(s, e)を返却 ・s、eを表示 ・m: 数値入力 ・s: 数値入力 ・mがqueriesにある場合、終了 ・snore_verify(p, q, g, y, m, s, e)がFalseの場合、終了 ・queriesにmを追加 ・フラグを表示
よく見ると、入力チェックが甘い。1回目のmに対して、2回目にm+pを指定すれば必ず成り立つ。
#!/usr/bin/env python3 from pwn import * r = remote('snore-signatures.chal.uiuc.tf', 1337, ssl=True) data = r.recvline().decode().rstrip() print(data) p = int(data.split(' ')[-1]) data = r.recvline().decode().rstrip() print(data) data = r.recvline().decode().rstrip() print(data) for i in range(10): data = r.recvline().decode().rstrip() print(data) data = r.recvline().decode().rstrip() print(data) data = r.recvuntil(b'= ').decode() print(data + str(i)) r.sendline(str(i).encode()) data = r.recvline().decode().rstrip() print(data) s = int(data.split(' ')[-1]) data = r.recvline().decode().rstrip() print(data) data = r.recvline().decode().rstrip() print(data) data = r.recvuntil(b'= ').decode() print(data + str(p + i)) r.sendline(str(p + i).encode()) data = r.recvuntil(b'= ').decode() print(data + str(s)) r.sendline(str(s).encode()) data = r.recvline().decode().rstrip() print(data) data = r.recvline().decode().rstrip() print(data) data = r.recvline().decode().rstrip() print(data)
実行結果は以下の通り。
[+] Opening connection to snore-signatures.chal.uiuc.tf on port 1337: Done p = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306333 q = 7876721542069803440502484358868287319474506698532914772431945140789658028031057012671834645200928549155586041542723205652322347374566510092259630239463827 g = 2069024689829247413403764678005999787780137685279750223691342633019952210703135616792534854616926098191303819017866236807970363629898827404770609739024644275600724539946585765650843655444242311287120177638697216561519919229771120879411058942157528837378416095176564280273043921370532040472575658887621761307 y = 8645622220949685041240355138378532133901307759300049121470867585666550655036197683949747988521367780518976819359067976500644393514138262831691874792873198781152063809826958106510008441356555368675777569352992836323312826547453159984410786547699784937669296255120940431242787262605695157528066392260702195007 you get one query to the oracle m = 0 s = 5048110493181362691297796168264774731665565496567375727890348067936780809862752604586487821783331328338127312802563033450049142450039217368303993940577295 e = 6078051394323606604024115640588697702090803454854752615753098979464945946121464935074478776079523730827786628012481161218537871294278840115360836522218688 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306333 s = 5048110493181362691297796168264774731665565496567375727890348067936780809862752604586487821783331328338127312802563033450049142450039217368303993940577295 correct signature! y = 11334839683849688524046158364674951838089661997798231924953430573921195626315510917744826006380828369253425898753717408126558307759743821089823606278157665551387443793874218844201003107348633361933915494922121533504343654538031338749829492028729471657678836819641654905790485518375110992544399796131874071394 you get one query to the oracle m = 1 s = 725132466970494466998159126753376935415686199636897237561113981412161806372476596628294981579180425552344754465363483019252587334114383167598903155774863 e = 1467206386223620211942248870799567349867475076316775144544989853439138494484683779474457485681324268647399968588589226810772279051412424692252292790385713 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306334 s = 725132466970494466998159126753376935415686199636897237561113981412161806372476596628294981579180425552344754465363483019252587334114383167598903155774863 correct signature! y = 4007459262867683634645251868771882139527169123234061240266599554256237854137689046578162021800042235636132696901886969358154967411767464892755474687897791358015464810699595938274787182049966413434241093657627522575269167310759560845708599423530117596389429394663397373941846750698600120876990710286790968996 you get one query to the oracle m = 2 s = 5626271030442963119756755719651482376791196468437352844824280401321884530822802470072268390421230494953828275754509566036981457938967872595498539969769061 e = 2314349706567110133519609601452528222805877677504465624899520542877232641392306611715058822789273325630141668652760290208572894792014960939885936831339698 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306335 s = 5626271030442963119756755719651482376791196468437352844824280401321884530822802470072268390421230494953828275754509566036981457938967872595498539969769061 correct signature! y = 810857574689382065384514119364094661964022146168646793976444108968327211048899679254761384088346425709983691336914888829034697959243709447113904223152598089294085946956993131497630137505727691419187377926804059939874185455119820339143956189402813171839416445459291447535100994856343918596418063629845472765 you get one query to the oracle m = 3 s = 5642243486827005896954569791919643152365371285201092642261957514748659423073959296680637135691032184255295907590896431396629942000908734993912795464591121 e = 870188239953989037210685314977049304481103455839427692054816181870688381877864514643525620514960080280421543390111037988243008834471665125902727594510205 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306336 s = 5642243486827005896954569791919643152365371285201092642261957514748659423073959296680637135691032184255295907590896431396629942000908734993912795464591121 correct signature! y = 11218875214007376830619422719774677682708252795252329823647039225424586845462787980832376093099561045856461637522860438069119566943996191913546888781319986240909489232882873877260201536138420708420086912572795262534597414877958504084181964862021569817338095808572088197115838493923007294192803544133822385242 you get one query to the oracle m = 4 s = 6629187246596354716620652915287551531492876083339957018673049684617884282030113157824104022203525505424518711363453792389170229364585232820963919170441379 e = 2019273670674861266558426725442584591161238007873354305916975235825647227914527441843797014627436583042578677252354300421262959190112665011179216804313559 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306337 s = 6629187246596354716620652915287551531492876083339957018673049684617884282030113157824104022203525505424518711363453792389170229364585232820963919170441379 correct signature! y = 3190282629176451798082417838762712058486651286121450758316674464713339166835995863391385646691495305245660511535135648458614945436798665185949231408217335128692039137867816904294707819392005213431713487340660011368411870362506511176477819722892076969438091680734641317687867451354911772245040306572058943800 you get one query to the oracle m = 5 s = 2006822978292529675854242650127135513540600681864320996714745045076803264487932488416570964171870990321451188543603628182906373570278295902342719272161502 e = 7030993066640724490869268250750395581449620103442101422390038261597697866347661182883778811031916160826413668484224476982574958566509100537761701513444263 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306338 s = 2006822978292529675854242650127135513540600681864320996714745045076803264487932488416570964171870990321451188543603628182906373570278295902342719272161502 correct signature! y = 3468493208766693943699355242209015202411666408117171870426575827292025043186922975076131931793604768978538093898568816591298000791828719761690718847360012522747457253756083191509292545957399409615760012771083205413596433475566516572328738100830274748054759218779111554119749566687851926123002030193147135574 you get one query to the oracle m = 6 s = 1582387921911076985485232587709076847733307117522888497423691941325210258492162789245899440993528277055302503971387010648636928076538915395967167177129307 e = 5524623040910127193132319659942283287944962879975984952291583818331402639900707431898434059452150708694670148766204261503222902226508479026182884378844201 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306339 s = 1582387921911076985485232587709076847733307117522888497423691941325210258492162789245899440993528277055302503971387010648636928076538915395967167177129307 correct signature! y = 6754374684004140134214874253192597821290708600520486613999294770475072570731818496205923777289180660196411298835101696492091528002645513904247425885018224056673786723665933028543081625471449748632054469310115117462533917758255403049922691853004079258624188441477492018319086829128066105866633843745745523261 you get one query to the oracle m = 7 s = 113263329347205788113528985304711810767710180416973137119448320661573179360373402841653963295433092919983273560061589216135530781417862421993684101533143 e = 1178081196185899696013280233727534155093136592790970158640520863659791036642026456206511813435565829847444523810772409056565027391975500266969955172491236 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306340 s = 113263329347205788113528985304711810767710180416973137119448320661573179360373402841653963295433092919983273560061589216135530781417862421993684101533143 correct signature! y = 2590843797238960102193459772923962295285477798404645184105208304815615986837940340147937283451796581433005566009695700553125796303046335205829292406525520806873206048480465257344341247421603820113847950494805536407507629462093160630843885751994446861597251925590320218138290556766976039628288977050114483958 you get one query to the oracle m = 8 s = 2838390437252972423716832657124924123521908291784494872848947638660775161173161953030946586925255355172225907674543759427230035864581003437954331354786157 e = 4373804456692683332349698709145737187690093775030634867362503004892232909448376708501132396903627945789308273365182755692915469906143677349788416496396886 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306341 s = 2838390437252972423716832657124924123521908291784494872848947638660775161173161953030946586925255355172225907674543759427230035864581003437954331354786157 correct signature! y = 928165700275168392271243787969488767164377566409975286730023079403057191669249152959043298509984587287491974379560202138531581924358938224558502413406657518935171547003874036456171945791786339538954114111376329266928604206570183850537638965162477135983349572638555649786808376801378779132907259921237681214 you get one query to the oracle m = 9 s = 6682927399268660448114151561076690780393657581559150499998777924729591403123326711098685349792037579656963321067358079195287319520547653981983842206723505 e = 1766129393286536057999519622882191599238733184288233377820287271626491644628771927242731982549664403509911036665436853531510672061776547217747216973755684 can you forge a signature? m = 14362122615459539031559535714440495954555152066167121756929433345078337204241894590439294649822745793288353795636740040194262551787694788067402619665121688452424225749779232205796547599005889808831706118503395937342405094300033489431187877889562956452944966154706073907939942021228718131823307839600961306342 s = 6682927399268660448114151561076690780393657581559150499998777924729591403123326711098685349792037579656963321067358079195287319520547653981983842206723505 correct signature! you win! uiuctf{add1ti0n_i5_n0t_c0nc4t3n4ti0n} [*] Closed connection to snore-signatures.chal.uiuc.tf port 1337
uiuctf{add1ti0n_i5_n0t_c0nc4t3n4ti0n}
Feedback Survey (Miscellaneous)
アンケートに答えたら、以下のメッセージが表示された。
hank you for giving us your feedback! THIS IS THE FLAG: f33d_u5_f33db4ck (wrap it in the flag format) DO NOT SUBMIT THIS FLAG (if you submit it, we will not give you points for the feedback survey challenge): uiuctf{i_submitted_this_flag_with_a_script_because_i_am_lame_or_i_just_cant_follow_directions}
"f33d_u5_f33db4ck"にフラグの形式になるようラッピングする。
uiuctf{f33d_u5_f33db4ck}