SECCON CTF オンライン予選 反省会

テスト期間真っ最中にも関わらず参加してました。勧誘に失敗したので1人です。
ksnctfや8946などは知っていましたが、公式なCTFのイベントに参加するのは今回が初でした。
なんとか1問くらいは解いてwrite-upをここに書いてやろうと思っていたのですが、結局練習問題(提出方法確認問題)以外1問も解けませんでした。大体6時間くらい経過後に1問も解けていない状態でかなり心が折れてました。最後には諦めて試験勉強に移って寝ました。
仕方ないのでどこで諦めたのか、どこまでは取り組んだのか書いてみます。
あ、基本100点問題しか取り組んでないです。
後々から上位者の得点状況とかみると、上の人でも100点とれていなかったりというパターンもあったので、開いた問題は全て片っ端から取り組んでいくべきだったようです。

(反省会)

[フォレンジックス 100]ここはどこ?

ダウンロードしたデータに符号化された文字列が。えーと、これなんだっけ。MD5?
ググってMD5でないことを確認した後、どうしても名前を思い出せなかったので一旦記憶に合った8946の問題を確認。そうだそうだ、base64だ。
確かbase64はネット上にエンコーダ/デコーダがあったはず、と探して入力。
かなり長い文字列だったので、入力制限に引っかかるものも。
なんとかデコードできるサイトをみつけたものの、結果が文字化けしていました。あれー?
うーん、文字コード指定がおかしかったのだろうか、とあれこれ調べて時間が過ぎました。
そういえばbase64程度ならコマンドラインでできるのでは、と試してもみました。
base64 -d base64.txt > result.txt
が、こちらも同様に文字化け。お手上げですね。

[プログラミング・crypt 100] calculate it/計算せよ

nc calculateit.quals.seccon.jp 45105

Hint1: 四則演算ではありません / It is not a four arithmetic operations.
Hint2: 計算例 81 9- 16 6- 4/ 15 X 3- 72 45 = 82
Hint3: G- G- G- G- G- G- G- G- G- G- = 0
Hint4: X X X X X X X X X XXX = 300
真面目にとりかかった時には既にHint1と2が出ていた状態。
Hint1と問題分を読んで、「これは/の左と右で翻訳されていることを示しているのでは」と思ってました。
与えられた場所へncすると問題が与えられ答えを聞かれる形。数秒で判断して解答しなければ「Too slow, bye.」といって切られてしまいます。結構時間がシビア。だからプログラムを書いて自動で解かせろってことなんでしょうね。
何回か試したところ問題は完全にランダムでXや/、-が出てくる数もランダムでした。一個も/がない問題もありましたので上記の推測は間違いだとわかります。
出てくる文字は0〜9とA〜X、/と-でした。Xが演算子ではなく英語のエックスだと気づいた時に数えてみましたが、Xは32進数に入りませんね。32進数ではVまでです。あと2個、惜しい。
Hint3と4が出てきた後も風呂とかで考えましたが、結局解けずに寝ました。

[バイナリ 100] Enjoy the Game

このゲームをクリアしたらパスワードが得られる。
you will get the password if you get a goal of the dungeon.
一人称視点迷路ゲームが与えられる。どうやらゴールに答えがある様子?
ダウンロードしたgame.zipの中にはdataフォルダ,game.exe,readme.txtが。
更にdataの中にはKabe.mqo,Kabe2.mqo,KabeTex.bmp,KabeTex2,bmpが。
ふむふむ、どうやらゴールとそれ以外の設定ファイルが入ってる様子。無印が道中の通路で2がついているのがゴールか。
設定ファイルの中に答えがないかな、と探してみましたが見つかりませんでした。
ただ、KabeTex2.bmpが「Print Password」を裏から見た画像だったのでやはりゴールが鍵のようです。

とりあえず起動してみる。動きはちょっともったりしてたような……どうでもいいか。
左手法とかで簡単にとけないかなーとちょっと遊びましたが、そんな簡単にはいかないようで。
こういった迷路ゲームの場合初期配置と迷路の配置が起動ごと毎回ランダムになっているのでは、と思ったので何度か起動を繰り返してみる。
どうやら初期位置と迷路は全て同じようです。じゃあゲームの書き換えとかじゃなくてもゴールまでの道筋さえ見つけられればなんとかなりそうですね。

ところでmqoってなんだ? とググるメタセコイアなる3Dモデリングソフトが。ふむ。
設定ファイルの書き方を見つける。 http://metaseq.net/jp/format.html
じゃあこれをいじるか、とKabe.mqoのvisibleを非表示に書き換え。
するとすぐそこにあるじゃないですか。(初期位置から左に向いただけ)
あれ、でもこれって壁の向こうでは……ゴールがどこにあるかわかったけど行き方がわからない。
じゃあ壁を透過してたどり着く道を探そうか、と思って再びmqoファイルをいじりましたが画面が暗くなっただけでした。3Dデータよくわからない。
なにかヒントがないかとreadmeとか読んでいましたが、結局この迷路の地図を見つけるしかないのではという結論に。
しかしdataの中にはそういったものはありませんでした。もはやexeの中を探すしかないようです。まぁバイナリの問題ですし。
これのソースを復元できればこんな風に迷路の配置がわかるはずです。
さてそこで逆コンパイル(逆アセンブル?)
objdump -d game.exe > dump.txt
そこまでは別によかったんですが、逆コンパイル後のアセンブリ(?)が読めず断念することに。
取り組みもそうですけど、こうして書いている際に自分がしたことのが逆コンパイルなのか逆アセンブルなのか、出てきたデータがアセンブリなのかバイナリなのかわかってないのが恥ずかしいですね。
バイナリって機械語(マシン語)だから01の2進数なのでは? とも思いましたけどバイナリかるたは16進数だったような……うーん、勉強しなければ。

[ネットワーク・Web 100] repeat after me

followme.capというファイルが渡されるのでとりあえずWiresharkを起動……と思ったら入ってなかったのでインストール
中を確認していきます。が、Wiresharkをほとんど使ったことなかったので読み方がわからない。
とりあえずザザーっと中を検めていくと、途中にpasswordの文字を見つけました。
followme@133.0xf2.010357's pasword:
どうやらTelnetのData欄に通信内容が書いてあるみたいですね。この前後を見ていくと、どこかからどこかへとsshで接続をしている様子。接続先のubuntuサーバの中でlsをした結果「flag.txt」なるファイルがあることもわかりました。つまりsshを成功させればよいようです。
ポート番号もSSH先を入力してる箇所で見つけましたので、あとはSSHのパスワードさえわかればなんとかなりそうです。
通信内容をみるとパスワード入力に失敗しているのか、何度かパスワードを聞かれています。
その最後のパスワード入力からログインまでの内容を追っていきます。
ls -l\025followme$whoami\027ls-l\177\177. -l.\002\177\r
(実際には¥はバックスラッシュです)
\rや\nはプログラミングでよくみるエスケープシーケンス(改行)ですが、\177や\027などは何でしょうか?
いつかどこかのCTFのwriteupで見たような気がしますが思い出せません。
エスケープシーケンスや文字コード、ASCII、unicodeなどを調べてみましたがわかりませんでした。
とりあえずその部分を抜いた文字やwhoamiなどで試してみましたが全てログインできず。
そもそもwhoamiはパスワードなのか? とばbashにうちこんでみたところ、自分のユーザー名が出力されました。lsと同様、これもコマンドのようです。
もしやこれは接続元のユーザー名がパスワードになっているのでは?
接続後のユーザー名はfollowmeのようですが、それ以前のユーザー名はわかりませんでした。
このあたりを数時間取り組んでみましたが成果が出ず、断念。

[その他 100] 練習問題

答えは、「SECCON」です。
提出方法の確認問題でしょうか。こういう公式のきちんとした大会にもこういった問題があるのには驚きました。ひょっとしたら罠か何かだと思ってビクビクしながらの回答提出。

[その他 200] Encode me.

encode_me_91というファイルが渡される。
この問題に対して何かをした記憶がないので取り組んでないと思います。
とりあえずfileコマンドで形式をみて、「AmigaOS bitmap font」と出たところまでは確認したのですが、その後ググっても有益そうな情報がなかったので放置してました。


終わってからの感想。
どのCTF大会でもそうですが、とりあえず終了後も問題に取り組めるようにしてほしいなと思いました。サーバ設定の関係から現実的には無理だとは思いますけど、現状復習がかなり難しい状態です。
この投稿を書いていて「問題文なんだっけ?」と思いましたが問題ページも完全に閉じられているので見に行けない状態です。スクショくらいとっとけばよかったかな。

そういえばIRC、一応何かに使うのかなと思ってXchatをインストールしておきましたが、最初に開始直後に繋げた以外使いませんでしたね。その時は誰も喋ってなかったし、あれなんの意味があったんだろう。


(CTF 復習)

ここまで書き終えて、他の人のWrite Upを見てきました。(2014/1/26 PM 9:00)

[フォレンジックス 100]ここはどこ?

なんでみんなすんなりデコードできているんだろう。
ともかくBase64は画像にも使えるということを知った。
ps.
あれ……他の人と同じようにperlで画像にデコードしても見れないんですが……
何がいけないんだろう

[プログラミング・crypt 100] calculate it/計算せよ

これはちょっと気がつけませんね。僕には無理だったと思います。

[バイナリ 100] Enjoy the Game

あそこまでする必要はなかったようです

[ネットワーク・Web 100] repeat after me

例のバックスラッシュから始まる文字は制御文字だったようです。
というか普通にASCIIで合ってたようですね。
ただ8進数だったようです(10進数で見てた)。範囲に177を入れるにはそれしかなさそうです。
\027 ETB 伝送ブロック終結
\177 DEL  抹消
\002 STX テキスト開始
それで、これら文字をどうやって入力したらいいんだろう。DELはDeleteキーを押せばいいとして、伝送ブロック終結とテキスト開始って……?
あ、Wikiに書いてある^BとかってCtrl+Bなのね。そういえばEmacsとかnanoとかでも同じ記法見たっけ。
と、いうわけでそれらを含めつつ試してみたところ
Permission denied (publickey,password).
 まだ何かを勘違いしているようです。

[その他 200] Encode me.

バイナリだったんだこれ……
base91...?


以上でした。
精進します。
とりあえず今はテスト勉強します。