o_CTF SECCON Beginners CTF 2024
Crypto
Safe Prime
$ pと$ 2p+1を素数として扱うので、$ n = 2p^2+pをsympyなり何なりて求める
Math
$ p = a+x, q = b+xの制約がある。
$ aが$ c = 470\cdots(素数)で割り切れ、
$ bが$ d = 357\cdots(素数)で割り切れ、
また$ aと$ bが平方数であるため
$ ab \div (c^2d^2)が平方数であることがわかるため、この値を素因数分解すると
$ 3 ^ 2, 173 ^ 2, 199 ^ 2, 306606827773 ^ 2と分解できる(ここsympyで上手く扱えなかったのでWolfram Cloud使った)
この8通りを$ (a+x)(b+x) -n = x^2 + (a+b)x + ab-n = 0の整数解が出るように全探索して$ xを求め、$ p,qを求め、秘密鍵を復元
Reversing
cha-ll-enge
@__isoc99_scanfが印象的だったのでそれで検索を掛けるとLLVM-IRのコードであることがわかる。
環境構築して実行させようとしたら全然動かないのでそれっぽくC++で書き直したらただ2項の間のxor取ってるだけということがわかる
Pwnable
simpleoverflow
とりあえず10文字より多く適当に書いたら通る アドレスは見てないけど大体これくらいって思って投げた
simpleoverwrite
リターンアドレス書き換えをするとフラグを出力する関数が実行される
Misc
getRank
Burp使ってPOSTの値を書き換え
コードを読むと$ 10^{355}より大きい300文字以下のparseIntで読み込める値を欲している
入力された string の先頭のホワイトスペースと、存在すれば +/- 符号が除去され、 0x または 0X (ゼロ、従うこと以下で小文字または大文字の X)で始まっている場合、 radix は 16 とみなされ、文字列の残りの部分は 16 進数として解釈されます。
なので16進数のデカい値を投げれば通る
cramre
正規表現を頑張る