writeupCTFサークルの後輩が2019年6月17日13:00~2019年6月23日15:00の期間に学内限定のCTF大会を開催してくれました。1年生のこの時期にCTFを主催するなんて頭おかしいと思います(最高の褒め言葉)。私は前半は沖縄に学会発表に行っていたので少し遅れての参加となりましたが、無事全問解くことが出来ました。解き始めてすぐの頃は全く解けなくて諦めようかと思っていましたが、少し冷静になって問題に向き合ってみるとなんだかんだで解けました。1年生でこれだけの問題を作れるのは本当に凄いと思います。主催してくれた彼を始めとして、今年の1年生を見ていると今後のCyber研究会は安泰かなと思います。私たち4年生が全力で応援します。いうわけで以下writeupです。4541writeupサーバル要素は正直よく分かりませんでした。衝突ということで、ハッシュ値が同じになるようなflagを見つけてね、という問題のようです。問題文にはハッシュ値確認用のURLが用意されています。配布されているプログラムを確認します。main()gen_hash関数ではflagを1文字ずつasciiに変換し、その値を加算していった結果をハッシュ値としています。なんとかして同じハッシュ値になるような文字列を探し出さないといけないわけです。このようなときに役立つのが部分和問題です。部分和問題は、n個の整数が与えられて、それらのいくつかを足して指定された値になるような組み合わせを見つける問題です。今回の場合、ascii変換したときの値を使っているので、まずはflagとして使われる可能性のある文字列の全てのascii変換したときの値を用意しておきます。具体的には以下の文字です。abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}_これらをasciiに変換すると以下のようになります。125あとはプログラムを書くだけです。部分和問題とか行っておきながらナップサックです。実行すると以下のようになります。これを問題文のURLで入力して、ハッシュ値が合っていればflagが貰えます。easyだったかもしれません。base64でエンコードされたものが渡されるので、まずはデコードします。するとバイナリが現れます。これをdecompressするとまたbase64エンコードされた文字列が出てくるので、何回か繰り返すとflagが現れるはずだと踏んでひたすらループさせます。64回目で出てきました。Image[200]問題文このPNG画像はとてもザラザラしている......writeup全問題の中で一番点数が高い問題です。最初は全く訳が分かりませんでしたが、とりあえずRGB値を取り出して観察していたら色々見えてきました。ここには載せていませんが、GとBの値は全て0でした。Rだけ抽出しています。注目すべきところは一番下らへんの0が続いているところです。画像では下の黒い部分。この形、なんとなく...バイナリじゃないですか...?改めてRの値を確認してみると、それぞれ16進数に変換したらなんだか良い感じになりそうな気がしてきました。いうわけで16進数に変換します。これをcyberchef(https://gchq.github.io/CyberChef/)に突っ込んでみます。なんとhtmlが現れました(画像右下のOutput)。これを保存してブラウザで開くとflagが表示されました。freely[50]問題文さあ地図を書こう、輝く未来に向けて。writeup正直に言うとこの問題が一番難しかったような気がします。行列が目に入るだけで億劫です。言え、流れを一つずつ追って見るとやっていることは案外単純です。今回の場合は処理を逆にするだけでflagとなります。wednesday?[100]問題文お見舞いするぞ!writeupこれも1問目と同じで処理を逆にするだけです。プログラムを見てみると結構色々な処理をしているように見えますが、実は暗号化している部分は1つ目のfor文だけです。ほかのfor文は文字を繋げたりしているだけです。rand_int変数には1~16の範囲でランダムに選ばれた値が入りますが、どれが選ばれているのかは分からないので全探索します。16個しかないですし。乱数は12だったようです。One[100]問題文1011010010110001100110110010001110110100writeup実はこの問題はまともに解いていません。CyberChef(https://gchq.github.io/CyberChef/)に突っ込んでみたらそのままflagが出てきました。Bob[150]問題文アリスとボブは、秘密のお手紙をやり取りしようとしています。あなたはアリスの回線を盗聴し、「大切な数字」を手にしました......。writeupこの問題もやはり処理を逆にするだけで、encryptしているところをdecrypにするだけです。ボブのプライベートな値を求めていたりしますが、別にやらなくても普通に解けるようです。天気の良い日に大学で写真を撮ったよ〜writeup最初はfileコマンドやらstringsやらやってましたが、何も出なくて「俺はwarmupの問題すら解けないのか」と頭を抱えていました。いえばステガノグラフィーの解析が出来るソフトがあったよなー、と思ってやってみたらいけました。いうことで、うさみみハリケーン(https://www.vector.co.jp/soft/win95/prog/se375830.html)の「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析を行います。赤色のビットを抽出したらflagが浮かび上がってきました。cute[100]問題文オオルリは可愛い、サイバー研の小鳥。writeupオオルリさんを問題に出してくれてありがとうございます。これぐらいの点数だったらstringsとかで出るんじゃないの?とか思っていたら普通に出ませんでした。Nameにbase64でエンコードされた文字列がありました。これをデコードしてみるとflagでした。exiftoolは以下のコマンドで入れられます。Group[150]問題文オオルリはいつも、サイバー研に来る人を出迎えてくれる。今日もまた、彼女の声が聞こえる。※この問題のフラグは大文字小文字を問いません。writeupどんな音声ファイルかな~と思ったらオオルリさんのウェルカムボイスでした。実際は結月ゆかりなんですが、本当に良い声してるなって思います。自腹で9000円ぐらいで購入しましたが、全く後悔していません。本当ですよ?さて、まずはお約束ということでfileやらstrings、exiftoolなどのコマンドを実行しますが、これぐらいの点数になってくるとさすがに何も情報が得られません。逆に考えると、その辺にflagは置いてないよ、ということな訳ですね。正直に言うと、全く分からなかったので一度諦めました。ほかの問題に手を出しつつ再度問題を確認してみると、既に4人ぐらい解いていたのであまり複雑にはなっていないだろうと考えました。言え、手掛かりという手掛かりがありません。強そうな音声編集ソフト(Audacity:https://forest.watch.impress.co.jp/library/software/audacity/)で開いてみることにしました。別にとくに変なところは無いなーと思いつつ観察していると、オオルリさんの声がRにしか入っていないことに気付きました。それじゃあLに入っているのは何なの、と思ってLだけで聞いてみると何だかプププププと鳴っています。最初はやはり疑問符が浮かぶばかりでしたが、よく見ると波形が「・」と「ー」だけでモールス信号になっていました。・これであとはこのモールス信号を解読するだけです。モールス信号の解読はこのサイト(http://www.inv.co.jp/~ike/mores-chg.html)が使いやすそうです。モールス信号は和文と英文に変換することができます。゙むらよれならへにれほへ」となって意味不明ですが、英文に変換すると「ITSMORSECODE」となります。FlagITSMORSECODEこの問題では「SUNCTF{}」を付けなくていいようです。そのなかにある、仄かなフラグ。writeupこれは面白い問題でした。34ってなんだかflagの長さっぽいですね。いうことは1ピクセルの中にflagの1文字分が隠れているのではないでしょうか。各ピクセルのRGB値を確認してみます。212この時点で確信しました。上から7つ目で各値が大きく下がっています。