MMACTF writeup

一昨日から今日の9時まで?MMACTFが開催されました。 チームは僕としては不本意な名前なのですが「palloc_yakiniku_party」で参加し、全体で90位、日本だと15位くらい(?)でした。 チームメンバーは僕、まーず、ふるかわ氏(pwn合宿組)、ぬるさん(pwn合宿組)の4人でした。 面白いメンバー構成で、なんでこうなったかというと普段CTFしてると解こうとする問題は大体プロに先に解かれて経験値が積めないのでなんかいい機会ないですかねと某某氏に持ちかけたのがきっかけです。 いつもよりはたくさん問題を解くことができたのでそのwriteupを書きます。

〜Welcome!!〜

10pt

提出するだけです。 FLAG : MMA{Welcome_To_MMACTF!!}

〜Pattern Lock[PPC]〜

20pt

3×3のパターンロックは何通りあるか答える問題。 最初コード書こうと思って少し書いてうーんうーんって唸っていたところ、ふとググってみたら普通にありました。 FLAG : 389112

〜Smart Cipher System[Crypto]〜

10pt(1)

文字を入力すると、暗号化された文章が返ってくる。 適当に入れてきたところ、文字数と1:1で対応している。 んで、abcd…の各文字の差が一定=元のasciiとの差が0x17であったため、元の文章に0x17を足してフラグがでた。 FLAG : MMA{bba85b6768db240f8c4ae3c29f9928c74f6ca091}

10pt(2)

これも適当に入れたところ、文字と暗号化後が1文字ずつ対応している。 ぱっと見なんの処理かはわからないけど対応してるなら1-9,a-fしかないんだし変換すればフラグ出てきました。 FLAG : MMA{f52da776412888170f282a9105d2240061c45dad}

30pt

とりあえず、文字数で値などが変動していくのはわかりました。 文字数と暗号化後の文字数は1:1で、なんとなく前のasciiとの差分っぽいものが並んでいて、数字とアルファベットを行き来するときは5X,数字同士またはアルファベット同士の時は0Xでした。 ここまで解析して、どうせアルファベットと1:1対応してるなら人力でやったほうが早くないですかとなり、一文字ずつ辻褄合わせてフラグ出しました。 (ふるかわ氏におこられると思ったらそれが一番早いよといわれほっとしたのは秘密) FLAG : MMA{e75fd59d2c9f9c227d28ff412c3fea3787c1fe73}

〜Login as admin![web]〜

20pt

blindsqliの問題。 パスワードがフラグになってるよといわれます。 テーブル名、カラム名はどうせこんな感じだろと勘で合わせて、 admin' and (SELECT length(password) FROM user WHERE user='admin') <= 20-- これでパスワードの長さを条件の値を変えながら調節してってゲットし、あとはまーずに投げました。

〜Splitted[forensic]〜

30pt

7zファイルが渡されるので解凍すると、pcapが出てきました。 ここからHTTPオブジェクト抽出すると、zipファイルが8個くらい出てきて、全部破損してます。 パケットを見てみると、rangeが指定されていたので、そのrange通りに順番にバイナリエディタでつないでいくと、flag.zipがでてきました。 それを解凍すると、psdファイルがあり、僕はPhotoshopとかその辺何も持ってないのでGIMPで開くとただの真っ白な画面が。 一瞬!?となって一旦バイナリ見て何もなくてよくよく画面みるとレイヤーが2枚あるのに気付き、白色を透明色に指定したところ、フラグが出てきました。 FLAG : MMA{sneak_spy_sisters}

〜how to use?[reverse]〜

30pt

実行ファイルが渡されます。 IDAに突っ込むと、呼ばれない関数[howtouse]があり、めっちゃスタックに答えっぽいのがあるのでeipここに飛ばせばOK!って思ってデバッガ動かそうと思ったらdllが足りないって言われて、解決方法わからなくて泣く泣くスタック全部書き出しました。 途中esi?とかpushされててespが拡張されたりpopされて縮小したりいじめかよって思ってました。 (ふるかわ氏に怒られました) FLAG : MMA{fc7d90ca001fc8712497d88d9ee7efa9e9b32ed8}

〜Signer and Verifier[crypto]〜

100pt

2つのnc先が書いてあって、ポート***16の方にアクセスすると、RSA暗号のnとeとランダムな巨大数を渡され、署名しろといわれます。 署名ってことは証明書の話なので、通常だと通信する人の公開鍵を証明書を発行している機関の秘密鍵で暗号化するので、秘密鍵で暗号化しろとのこと。 また、数秒経つと通信が切られる。 ポート***15の方はアクセスすると入力を求められ、任意の数値を入れるとよく分からない巨大数が返されるのですが、おそらく予想としては秘密鍵で暗号化したような数値ではと思いました。 まず、ここで思ったのがポート16の方でもらった数値をここに投げれば署名完了じゃんと思い投げると、数値がでかいのかやってくれませんでした。 なので、2を秘密鍵で暗号化した値を使い、nとeがわかってるのでそこから秘密鍵を逆算しようとCPUをぶん回してたのですが、1分待ってファンがすごい音を立ててるのを聞いていや馬鹿だろと気付き中断。 そして、よくよく考えてみると値がでかくて計算してくれないなら分解すればいんじゃねと思い、12で割って分解して送ったら署名されて帰ってきたのでそれを掛け合わせて送ったらフラグが落ちてきました。 以下クソみたいなsolver

〜Nagoya Castle[stego]〜

100pt

画像ファイルが渡されました。 まず、exiftoolして、ファイルフォーマットみて、何もない。 次に、GIMPで明暗反転、色調反転してみる、何もない。 諦めそうになった時、ふとスポイトでRGBを確認。 奇数と偶数…アッ ということで、菊ちゃん先生のアレをお借りして、少しだけ書き換えました。これで、綺麗にフラグがでてきました。 FLAG : MMA{raw_cr3am_pasta!}

〜MQAAA[misc]〜

70pt

まず、あきらかbase64のパディングがあると思ってbase64してみる。 "#@~^MQAAAA== Um.bwDR+1tKcJtH) Dtnm6VlTmhKDN|rd{K46EdmCObWU8rbjRIAAA==^#~@" …ふぁ? なんじゃこりゃ ==があるのでもう一回やってもでない。 はい死亡とおもったけど、よく見るとMQAAAって問題名。 ってことは、ここまであってそうだなと思ったので、文字列でぐぐってると、VBscript.encodeというのが出てきました。 実行環境ないよ〜と思いながらいろいろ実行環境インストールしたんですが、なんかできない。 よくみてみたら、これスクリプトを暗号化しただけでそのまま実行できると書いてあったので、拡張子を.VBEに変えて実行すると、フラグがでました。 FLAG : MMA{the_flag_word_is_obfuscation} 以上が僕が解いた問題です。 QRコードとstreamがすごい解き途中で辛かったです、つらい。 crypto200が楕円曲線の離散対数問題の問題だったのですが、mack.mdに実装の解析して、アルゴリズムほとんど把握してたので暗号屋さんと少し話し合いたかった。つらい。 今回のでたくさんの知見を得たので参加してよかったです。 合計440pt?submitしました。いつもよりたくさんsubmitできて楽しかった。 チーム組んで下さった方々ありがとうございました、お疲れさまでした。