ctf4b2019writeup

ctf4b2019に二人チームで参加しました。これが始めてのCTFだったのですが、最終的に6問を解くことができてとても嬉しかったです。

以下、僕が解いた問題を書きます。

 

[warmup] Welcome

IRCで freenode.netの#seccon-beginners-ctfに接続するとflagが表示されます。クライアントの使い方がわからず少し苦労しました。

[warmup] Seccompare

https://score.beginners.seccon.jp/files/seccompare_44d43f6a4d247e65c712d7379157d6a9.tar.gz にある実行ファイルを解析してflagを得る問題です。適当なバイナリエディタを使って中を見ると、ctf4b{...}みたいな文字列が見えたのでこれを提出しました。

katsudon

問題文中にflagがおいてあるURLが書かれていました(https://katsudon.quals.beginners.seccon.jp/flag)。そこにアクセスすると

BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU--0def7fcd357f759fe8da819edd081a3a73b6052a

という文字列が表示されたので、--までの文字がbase64っぽいと思い base64 -dをしました。するとflagらしきものが現れました。(よくわかっていない) 

 containers

https://score.beginners.seccon.jp/files/e35860e49ca3fa367e456207ebc9ff2f_containersl

からflagを得る問題です。このファイルを開くと、大量の文字化け文字とともに"FILExx.png"のような文字列が一定の間隔で書かれていました。あるFILExx.pngと次のFILExx.pngの間にあるデータをpngにしてやると、flag中の1文字が出てきます。pythonでこれを全てのFILExx.pngに対して行いました。

 Sliding puzzle

nc 133.242.50.201 24912でサーバに接続すると、8パズルが複数与えられます。これを解くプログラムを作る問題です。

最初は愚直にBFS+同一局面を枝刈りで書いたのですが、問題によってはいつまで経っても探索が終わりませんでした。そこで、「最終局面にどれだけ近いか」をスコアとして、priority_queueで盤面を管理するようにしたところ、十分な速度となりました。

また、解答の際、最初はプログラムの出力を見ながら手打ち入力をしていたのですが、サーバとの通信には時間制限があるらしく、何回やっても失敗してしまいました。

そこで、サーバと作ったソルバで直接やり取りをさせるスクリプトを書き、ようやくflagをもらうことができました。(問題とその解答がガーっとターミナルに表示されるのには興奮しましたw)

終わりに 

 こうして振り返ると、(当たり前ですが)自明な問題しか解けなかった感があります。また、Web,Pwnのwarmupを取ることができなかったのは悔しいです。

とはいえ、全体としてはとても楽しかったです。特に、Sliding puzzleのflagが手に入ったときは表現できないくらいの喜びを感じました。

今後もまたコンテストがあれば参加したいなあと思っています。