にゃんぱすー、おきなわです。
何番煎じか分かんないですけど、せっかくなので以前解いた CTF の Writeup でも書いてみようかなと思います。
題名から察しがつくかもしれませんが、今回書くのはネットエージェント株式会社の 2016 年度新卒採用で出題された問題の Writeup です。これは全ての問題を解くと最終面接から選考を始めることが出来ると言うとてもおもしろい取り組みです。
詳しくは下記のサイトを見て下さい。
さて、では早速解いていきましょう。
※ちなみに僕は Mac ユーザなのでこの記事におけるコマンドの例は全て Mac での実行例です。
mondai1
まず最初の問題です。
問題:LzYxMDIvcGouaGJwLy86cHR0aA==
もうこれは見ただけでわかりますね。そう、base64 です。末尾に == が付いてるのが特徴的ですね。というわけで Let’s デコード♪
$ echo "LzYxMDIvcGouaGJwLy86cHR0aA==" | base64 -D /6102/pj.hbp//:ptth
どうやら逆になってるURL のようなので再度以下のようにコマンドを実行
$ echo "LzYxMDIvcGouaGJwLy86cHR0aA==" | base64 -D | rev http://pbh.jp/2016/
上記の URL にアクセスすると zip で固められた問題がダウンロード出来ました。どうやら今度はそれを解いていくようです。
mondai2
ダウンロードしてきた zip ファイルを解凍すると次のような構成のディレクトリが出来ました。
mondai ├── hint2.txt ├── mondai2.txt └── mondai3.zip
どうやらどんどん zip ファイルを解答していけば良いようです。では 2 問目を解いていきましょう。
2016の平方根の小数点以下2016桁目から20桁をパスワードにしました。
ガリガリ計算させれば良いじゃん!ということで僕は普段大学で matlab を使っているため、matlab で以下の m ファイルを実行させて解きました。
簡単ですね。ちなみに他の解き方としては bc コマンドを使う方法もあります。bc コマンドを用いる事で複雑な数値計算も行えます。
$ echo "scale=2035;sqrt(2016)" | bc | tr -d "\n" | tr -d "\\" | cut -c 2019- 74571026133060730881
というわけで答えは 74571026133060730881 です。
mondai3
さて、3 問目です。
ハッシュパスワード問題
答え:3つの答えをつなげて
0f1aae8b8398c20f81e1c36e349a7880c9234c63
01821f5469967540a5a774197463e8c4d658f588
264f39cab871e4cfd65b3a002f7255888bb5ed97
ハッシュから元の文字列を求めないといけないようですね。本来ハッシュは不可逆なので元の文字列を求めることは出来ないのですが、インターネット上に単語とそのハッシュ値を紐付けたデータがごまんとあるので大概検索をかければヒットします。と言う訳で Google 先生の出番です。それぞれのハッシュを検索するだけ。
0f1aae8b8398c20f81e1c36e349a7880c9234c63 → tokyo
01821f5469967540a5a774197463e8c4d658f588 → ueno
264f39cab871e4cfd65b3a002f7255888bb5ed97 → line
ということで答えは tokyouenoline です。
mondai4
さて、4 問目ですが、ディレクトリ構成は次のようになっていました。
mondai4 ├── hint4.txt ├── mondai4.png └── mondai5.zip
どうやら次は画像の問題のようですね。入っていた png ファイルは以下のようなものでした。
とりあえず画像ファイルに含まれる文字列を下記のようにコマンドを実行して見てみます。
$ strings mondai4.png
実行結果を眺めてみましたが、特にめぼしいものはなかったため、画像に書かれているヒエログリフを読む必要があるみたいですね。さっそく読んでみましょう。ただし僕はもちろん古代エジプト人では無いので日本語との対応表が無いと全く読めません。ということで以下のサイトを参考にしました。
上記のサイトを参考に画像に書かれているヒエログリフを日本語にすると
のらかちいくち てちのちんちもちみら もにみちもにみら もにとちのにみちもちい のらもらまみ
となりました。ちょっと何言ってるのか良く分かんないですね。とりあえず2つ目の文字列である「てちのちんちもち」で Google 検索をかけた所、以下のサイトが最上位に来ました。
ここでかな入力なのか?!と思い、所有している JIS 配列のキーボードを見ながらアルファベットに変換したところ、
kotaeha wakayamano minamino misakinamae komoji
答えは和歌山の南の岬 名前小文字
となりました。ここで岬の名前を検索した結果、潮岬(shionomisaki)ではないかと思ったのですが、解凍出来ず。しょうがないので和歌山の全ての岬の名前で試したりしましたがダメでした。その後も特に思いつかなかったため、ここで同じく問題を解いているらしいなーがに協力を仰ぎました。しかし二人でも特に思いつかなかったため、なーがが彼の先輩であるティマ先輩に協力を仰ぎました。そして三人で試行錯誤していた矢先、ティマ先輩がついに答えを見つけました!
答えは ushiomisaki でした。
ティマ先輩曰くとりあえず漢字の読み方を変えてみようと思って試したら上手く行ったとのことでした。圧倒的感謝🙏🙏😄😄
mondai5
5 問目です。問題ファイルは以下の様なものでした。
どうやらまた base64 のようです。なのでとりあえず一度デコードしてみたところ、また base64 がでてきました。そこで何度か base64 でエンコードされてるのか?!と思い、以下の様なスクリプトを書いて実行させてみました。
上記のスクリプトを動かすと mondai5_2 という以下のファイルを生成します。
begin で始まり end で終わっているあたりから uuencode でエンコードされたファイルだと分かったので以下のようにデコードします。
$ uudecode -o mondai5_3 mondai5_2
そして得られたファイルについて、どんなファイルなのか file コマンドを用いて調べます。
$ file mondai5_3 mondai5_3: gzip compressed data, from Unix, last modified: Thu Mar 19 17:31:56 2015
どうやら gzip ファイルのようなので素直に解凍。
$ gzip -dc mondai5_3 > mondai5_4
作成したファイルに対して再度 file コマンドを実行。
$ file mondai5_4 mondai5_4: Zip archive data, at least v1.0 to extract
zip ファイルなので再度解凍。
$ unzip mondai5_4 Archive: mondai5_4 extracting: nek
再度 file コマンドを実行。
$ file nek nek: bzip2 compressed data, block size = 900k
またまた解凍。
$ bzip2 -dc nek > mondai5_5
またまた file コマンドを実行。
$ file mondai5_5 mondai5_5: 7-zip archive data, version 0.3
解凍して出てきたファイルに対して file コマンド(ry
$ file n n: RAR archive data, v1d, os: Win32
解凍して出てきたファイルに対し(ry
$ file ne ne: LHarc 1.x/ARX archive data [lh0]
解凍して(ry
$ file nex nex: xz compressed data
解(ry
$ file nex-1 nex-1: data
やっと圧縮ファイル以外が出てきたのでとりあえずバイナリを vim で眺めてみます。
$ vim -b nex-1
ファイルの最初に MSWIM と書いていたのでその単語でググった結果、どうやら Windows Imaging Format ではないかと分かりました。7-Zip で解凍出来るようなので解答して得られたファイルに対して file コマン(ry
$ file QRcode QRcode: Sun raster image data, 123 x 123, 8-bit, RGB colormap
そのままだと表示出来なかったのでとりあえず jpeg ファイルに変換。
$ convert QRcode QRcode.jpg
以下がそのファイルです。
どうやら名前の通り QR コードなので適当に携帯のアプリで読み込んだところ
+BCcENQQxBEMEQAQwBEgEOgQw-
という文字列が出てきました。調べた所、UTF7 でエンコードされた文字だということがわかったため、以下のサイトを使ってデコードしました。
デコードした結果 Чебурашка でした。ドイツ語でチェブラーシカという意味だそうです。これがそのまま答えでした。
とりあえず疲れたので今回はここまでです。mondai6 以降は次の機会に。
ではでは〜