アオカケスの鳥かご

日々の出来事を綴っていきたい

MaidakeCTF2019 writeup Crypto編

Cryptoのwriteupです。

Is this a cipher[50]

flag.txtにはBase64が。

TWFpZGFrZUNURntiYXNlNjRfaXNfbm90X2FfY2lwaGVyfQ==

末尾に=が2つあるのですぐに分かりますね。
平文に戻せばFlagになります。


Flag:MaidakeCTF{base64_is_not_a_cipher}

Easy crypto[100]

flag.txtにはFlagっぽい文字列が並んでいます。

ZnvqnxrPGS{Pnrfne_rapelcgvba_vf_rnfl_gb_penpx}

ROT13臭がぷんぷんしています。


Flag:MaidakeCTF{Caesar_encryption_is_easy_to_crack}

Old input[200]

古い入力方法です。

6↑2444325533222↑8↑333↑{444↑66788→8_2224427772→222833777→7777_666→66_333→3328→8877733_744666→66337777_4447777_87776668822555337777666→633}

これがFlagになっているのは分かるかと思います。
問題はこれを何で入力したか、です。

古い...そう、ガラケーです。

ガラケーで番号のところをこの通りに押すとFlagになります。
↑は大文字で、→は決定です。

スマホでも携帯入力することはできるので、実際に押してみるといいかもしれません。


Flag:MaidakeCTF{Input_characters_on_feature_phones_is_troublesome}


Do you know XOR[300]

作問者が違うため、ここではwriteupの公開は控えます。


Flag:MaidakeCTF{You_know_the_characteristics_of_XOR}

Kancolle hash[300]

艦これハッシュ。

艦これとありますが、正直艦これはあまり関係ありません。
果たしてこれが暗号の問題なのかもよく分かりません。

暗号化の流れは以下の通りです。

  1. 艦これサーバーのMD5
  2. MD5を1文字ずつAscii変換し、その値をkeyに加算する。
  3. Flagを1文字ずつkeyから割った値をenc_flagにくっつける


keyを作る部分はなぜかproblem.pyにあるので、ascii変換とkeyから割る部分を逆にするだけです。


Flag:MaidakeCTF{I_love_kancolle_and_I_will_die_when_its_gone}

Caesar's Friends[400]

シーザーのお友達。

暗号化されたスピーチとともにFlagが書いてあるテキストファイルです。
f:id:aokakes:20190926155419p:plain

一見するとROT13とか、何文字かズラすパターンのやつかと思われるかもしれません。
しかし、どうやらそういうわけでないようです。


Flag部分を観察してみると、CTFがちゃんと表示されているあたりから大文字は暗号化されていないことが分かります。

McstcpjCTF は MaidakeCTF のはずなので、この時点で5文字判明します。
c → a
s → i
t →d
p → a
j → e

もうお分かりでしょうか。ただの換字式暗号です。

明らかに確定できる部分から少しずつ対応表を作っていきます。
I のあとに続く2文字は am しかないよな~、みたいな感じで。

頻度分析なんかで埋めていくのも手です。


ある程度対応表が作れたら一度実行してみましょう。読めるようになってくるはずです。


進めていくうちにどこか見覚えのあるフレーズが出てくるかと思います。
当然です。かなり有名なスピーチですから。

最後のこれとか何もしなくても分かる人は分かるかもしれません。

Sfcx Hgykux.
Sfcx Fhhzsdm.


というわけでプログラムはこんな感じ。

ちなみにスティーブ・ジョブズのスピーチでした。


Flag:MaidakeCTF{Single_substitution_ciphers_are_not_very_strong_because_they_can_be_parsed_by_frequency_analysis}

SHA-1 collision[400]

SHA-1の衝突。
いつかのパクリです。これもサービス問題。

2つのファイルをアップロードできるページです。
f:id:aokakes:20190926161018p:plain

タイトルの通り、SHA-1が衝突するようなファイルをアップロードすればいいのですが、同じファイルを2つアップロードすると失敗になります。
f:id:aokakes:20190926161130p:plain

当然普通に違う2つのファイルをアップロードしてもダメです。
f:id:aokakes:20190926161235p:plain

つまりはMD5が異なってSHA-1が同じになるようなファイルをアップロードすればいいわけです。
実はSHA-1が同じになるファイルはすぐに見つかります。

何年か前にSHA-1の衝突で話題になったときにたくさん出回っています。
それを見つけてきてアップロードするだけです。

f:id:aokakes:20190926161457p:plain


Flag:MaidakeCTF{It_is_a_little_hard_to_create_a_file_where_SHA-1_collides}

Secret image[500]

作問者が違うため、ここではwriteupの公開は控えます。


Flag:MaidakeCTF{AES-ECB_mode_is_Vulnerable}

まとめ

暗号の問題を作るのはかなり億劫でした。
SHA-1のやつとかファイルをアップロードするだけですし。

無理やり艦これ要素を盛り込んだりしてますしね。