Before all
Rank. 17
本來蠻期待這場,結果開打那天早上中午都在外面 + 打隔壁的 x3CTF 就沒好好打到,只摸了一題 qq
題目都好好玩,剩下兩題之後補 LOL,先過年
addprimes (13 solves)
server.sage
1 | import os |
一開始讓你輸入一個數字,找出他模n的e次方根吐回來給你,最後把加密後的 FLAG 給你。
值得注意的是這邊e特別小,它也沒檢查e跟$\varphi(p)$是不是互質,所以假設今天存在$x’^{37}\equiv input(mod\space n)$,而我們輸入時預想的值是x,並且 $gcd(e, p-1)=e$ 且 $gcd(e, q-1)=1$,那$gcd(x’-x, n)=p$就完成分解了,最後再用一次 nth_root 找根即可從其中一個還原flag
拿預設解 = 2 去爆的腳本:
brute.py
1 | from Crypto.Util.number import * |
拿到解後:
solve.sage
1 | n=89218236468631916905164256824386437079014670813801107630734965136513026271851617158743215697397914500567099213886755035541869829452397010943597561887116786986639991581739611724846954353383645049572415301492611461971527044247851368316458384986569403845907648450121679868315385258283742818549140003425612379649 |
RSAMPC (賽後解)
chall.py
1 | import os |
一些有點複雜的算式, TL;DR 一下,總之推到最後會變成一個
$ap+bq+c=n$ 的方程,(a, b, n已知),注意到兩邊同乘$p$並把$cp$忽略(跟其他項次比起來它很小),求解就可以拿到一個相近的$p’$,最後爆一下就好
1 | from Crypto.Util.number import * |