SECCON 2017 Online writeup
2200点で71位でした。国内は18位くらい?厳c
4問といて600点を入れました。
Vigenere3d
おそらくきちんとスクリプトを書いたほうがいいとは思いますが、手で数えたほうが早いという判断で全部手動でやりました。
(その結果、他の人とほぼ同時進行していたという微妙な時間の無駄に)
フラグ長、鍵長は問題文の*の数に対応してるだろうと推測。
鍵長が14なので、平文のうち(idx%14)の値が等しい箇所はただのシーザー暗号。
SECCON{に対応したところを戻すと、
SECCON{*******_to_SEC*******_2017}
となります。
ここからguessingすると、SECはSECCONだろうなということがわかります。
SECCON{Wel****_to_SECCON****_2017}
さらに、WelはWelcomeっぽいので当てはめつつ埋めます。
SECCON{Welcome_to_SECCON_0TF_2017}
となりますが、意味が通らない 0TF はまぁCTFだろうということで修正。
SECCON{Welc0me_to_SECCON_CTF_2017}
puchar music
「音楽を聴いただけで世界中の人がタイトルのわかる映画」
これは STAR WARS ですね。金曜ロードショーでやってました。
SECCON{STAR_WARS}
Simon and Speck Block Ciphers
不明部分が4文字だけなので、総当たりであろうことはすぐに予想がつきます。
あとは暗号の実装だけですが、探したら出てきたので終了。
Simon_Speck_Ciphers/Python at master · inmcm/Simon_Speck_Ciphers · GitHub
SECCON{6Pz0}
Very smooth
pcapを渡されてTLSを復号する問題。
当時の脳内の方針を雑に書きだすとこんな感じ。
- fault attackするやつfacebook ctfであったな
- でもエラーでてるパケットないな
- 証明書ひっぱりだしたら公開鍵1024bit
- タイトル的に素因数分解か
- msieveもフェルマー法も当たらない
- そういやsmooth as silkとかいうのsharifであったな
- primefac 即終了
これだけだとひどいので、少していねいに書きます。(というかまともに解いた問題がこれくらいしかない)
証明書から1024bitのRSA公開鍵抽出までは省略します。
素因数分解方法としてはいくつかの手法が考えられて、
・総当たり
・フェルマー法
・p-1法
・ρ法
などがあります。
総当たり法は言うまでもなく、フェルマー法は2つの素数の差が小さいときに使える手法です。(ここでは割愛します。)
今回はp-1法が刺さります。
さらに簡単な方法として、primefacというものを使うとρ法など幾つかの手法で素因数分解をしてくれます。(多分)
両方で試してみたのが以下のスクリプト。
※追記:primefacのimportが抜けてました。最初に from primefac import primefac を脳内補完してください。
素数を得ることができたら秘密鍵を作成してwiresharkで読み込むことでTLSが復号できる。
SECCON{One of these primes is very smooth.}
MITMのやつも解きたかったものの中々厳しかった。
中間者攻撃自体はかんたんなもののそこ以外の部分で完全に詰まってました。
暗号屋さんにとってはつらい感じだったけど、こういうCTFの度にpwnできるようになりたいって言ってる気がする。