nhirokinet場阿忍愚CTFに参加していました。14枚画像が渡されるので、それらを縦につなげた時に見える文字を入力する。並べたりしなくても心の目で見ればなんとかなる。芸術ワットイズディス?画像を見ると甲骨文字で大和世幾由利手伊(由、伊はひらがなでいう小文字の配置)(手とした文字は呈のようにも見えた)と書いてあり、大和セキュリティを当て字にしていると思われた。ヒントには大和セキュリティ勉強会のステッカーである旨が記されている。それらしいキーワードを入れるも失敗。放置していたが、もしやと思って全部ひらがなで「やまとせきゅりてぃ」と入れると成功。Twitterアイコンであることがわかる)。「印」とかではないので頑張って読んで試行錯誤する。忍者というキーワードが他の問題でも頻出するあたりから「忍」を入れると成功。Boxes背景に一定の箱と線が書かれ、手前に漢字が二文字書かれた画像が渡される。漢字は楷書体のように見えるが日本語のものではないようで、また、漢字の部品というよりは「d」のように見える部分もある。「日本人には読みづらい」というヒントもあるのでアルファベットを描き起こした可能性もあるが、読めないので画像検索。Bing(徐冰)氏の作品であり、アルファベットではあることがわかる。中国由来の文字を中国の方が記したものなので、大和魂と主張するのはあまりに中国に失礼そう。大和魂という主張と関係ない。アルファベットであるという類推に自信を得て右の文字を頑張って読むとplayだったので、画像検索にキーワード「play」を追加して解説画像を入手。play」だったことがわかる。ような形式で加減乗除及び割り算の余りを求める問題を出してきて、手で答えると次の問題を出してくる模様。基本的にはこの形式に沿って回答すればよいが、改行しないで出してくるのでバッファを無効化する必要がある。うまくパイプしてごまかしてフラグを得た。用のアプリが渡され、実行すると3Dのゲームが始まる。3つコインをとるとフラグが出るようだが、3つ目のコインがとんでもないところにおいてありとれない。Manager以下のコードを読むと、”its_3D_Game_Tutorial”がフラグのように見えるが入力しても失敗。前後のコードを読むもこれを上書きするような処理はなかった。これが文字の通り表示されているかという可能性に思い至り、中でもフォントの可能性を考慮した時、アルファベットのフォントではデザイン上の理由で小文字も大文字と同様に表示するものがあると想起。確かに他の文字列はソースコード上で小文字なのに大文字で表示されていたので大文字で”ITS_3D_GAME_TUTORIAL”と入力して成功。5zipを解凍するとアルファベットが書かれた画像がいくつかある。エクスプローラだと撮影日時が記されているので、その順に入力すると正解。Crypto忍者なら読める暗号とする画像がある。忍者の暗号についてしらべると忍者文字がそれらしいことが判り、「やまといえば」と読める。やまといえば、ということで「かわ」がフラグ。攻撃術craSHソースコードを読むと、大まかにはメモリの容量は決め打ちされていないが、ファイルサイズに相当するメモリを書き換える際にロックを一切していない。そのため、catの引数にとられたファイルが出力先になっている場合は、現在のサイズを元に出力先のサイズを決定後、新しいサイズを元にメモリへの書き込みを行う。aなどとすると確保されたメモリを超過して書き込む。ついてはメモリを破壊してプログラムをクラッシュさせるだけでよいので適当に上記コマンドを打つか、それでもだめならそのあと作ったファイルを幾つか表示させていればフラグが出てくる。Files自己解凍形式のファイルが渡され、解凍してもそれ以上どうしようもないファイル群が登場する。:Zone.Identifierという指定がされたファイルがあることに気づく。エンコードされたらしい文字列が複数あり、結合してデコードするとフラグが出てきた。パケットをキャプチャした様子があり、途中に大きなパケットがある。G」の4バイトで始まることがわかった。G」で始まる部分を見た。ファイルを開くと、完全ではないものの画像が表示され、フラグはすべて表示されていた。translate渡されたwavファイルではフラグのようなものを喋っているが、最後の文字が途中で途切れている。がんばって聞いて入力しても失敗。仕様を調べて本来より短くデータサイズを記したヘッダを修正すると最後まで聞くことができ、突破。Gadget画像があるが、よくわからない。囲まれた文字列が出てくる。始まるバイナリが登場する。これで調べたところ、opensslを用い、PBE(パスワードベース暗号化)で暗号化されているようだ。aes128-cbcの文字列が画像のメタデータとして埋め込まれていた。文字列を示している様子が示された。これがパスワードとかんがえられる。これで暗号化解除してフラグを得た。cool!}enc.txtはremoveme={}の括弧の中身である。ダンプ機能で取り出して解凍。認証をしているパケットが渡されている。http://burning.nsc.gr.jpとなっている。六十秒NTPで4回時刻を問い合わせたあとpingを一回打ったものをキャプチャしたものが渡された。問題文を見ると、「昼九つ半の暗号を用いた」とある。昼九つ半は江戸時代に日本で使われていた不定時法で、季節変動があるが大まかな雰囲気としては現代で言う十三時頃である。登場すると考えられる。(なお江戸時代でも定時法は一部で使われており、調べてみたところその場合は十二支を使うようだ。こちらは地方視太陽時の二十四時間制と一対一対応する。)pingにはペイロードがあり、BASE64のようだが解読できず、ROT13変換しても解読できない。パケットサイズが二通りあるのでよくみると、リクエストの内容をそのままレスポンスに返す部分でROT13変換するとURLになりそうな文字列を送っており、変換すると「amazon.co.jp」「k.kyotou.ac.jp」「k.rulers」という内容が読み取れる。いってもわからないが、この問題には「サンタ殿からのヒント:素数グッズは生協以外でも販売されていますが、そのIDは削るために使われます。京都大学の素数ものさしの販売ページに行くと、そのURLに含まれる販売者IDがpingのペイロードと一致することがわかる。変換することでフラグを得た。アドレスとともに、「ポートスキャンは苦しゅうない」との記述があるので、ポートスキャンを実施。つなぐと低速で何かを送ってきた。変換したものがフラグとした。一般的なユーザーが攻撃されたものを想定したパケットキャプチャが出題され、被害者のユーザーの動きを真面目に追っていけば途中でフラグが見つかる。パケットキャプチャのファイル単体でも読み物のような楽しさがあった。ファイルを読み込んでいる。鍵共有がなされているため、秘密鍵を入手することができたとしてもどうしようもないことがわかる。実行していることに気づく。ファイルは普通に実行できることに気づいた。外すと、まさに怪しい通信の通信先(httpsであることが判明)にリクエストを投げ、レスポンスの内容をそのままコマンドとして実行するコードが登場。宛先をLAN内のサーバに書き換えて実行したところ、自身のネットワークインターフェイスのIPアドレスをPOSTで送出していること(とその形式)が判明。おおまかに攻撃の雰囲気を掴みとった感じを得つつ、それ以上のパケットもないと考えられた。アドレスをキャプチャファイルに合わせたリクエストを投げると、コマンドの代わりにフラグが降ってきた。当時のKDLのウェブページを表示し、それらしい文字列をコピペ。Mr.Nipps山寺純社長が日本時間で2015年8月13日5:30にどこにいらっしゃったか、という旨を問われている。フラグはGPS由来の緯度と経度が必要。アカウントを見つけるのに苦労したが、@junyamaderaであることがわかる。登録されていたようで、該当するツイートを見つける。位置情報を打ち込んでもはずれ。ツイートに位置情報が埋め込まれていることに気づいたが、表示は地名のみで、Webでは座標は降ってこないようだった。APIで当該ツイートを取得してそれらしいものを入れると正解だった。以下のものが見つかるので、そのまま入力して送信。タナカハック「taなんとか123」のユーザー名を探す問題。公開されているファイルにあるとされている。ファイルしか返してこず、このサーバーに当該ファイルがHTTPでおいてあるとは考え難かった。常識的なポートでの接続を試みたがうまくいかなかった。サンタ殿からのヒントには「wgetとgrepとバイナリーエディターさえあればどんな問題でも解けるでござる。公開されていると判断するのが妥当だった。公開されている」と解釈して、このドメインも含めて探索した。オプションを指定し、深さが深くなりすぎないようにしてリンク先のファイルを取得。あとは123を含むファイルを探して、前後のバイナリを見て当該する文字を入力すれば成功。PDFContext)>>タイムトラベル平成25年9月21日に50.115.13.104が紐付いていたドメイン名を問われている。このIPアドレスとともに色々なキーワードを試して過去のドメイン名が記されたページを見つけた記憶があるが、どのようなキーワードだったか思い出せず、また今思いつくものをいくつか試してみても見当たらない。ある程度運にまかせつつ色々試すと解ける、くらいの問題だった。記述術search_duplicate_character_stringふたつの異なる部分文字列で完全に一致するものを探して入力せよとのこと。ずらす文字数を一文字から(長さ-1)までの場合それぞれで先頭から見ていって、最も長いもののみを保持して出力すればよい。200,000バイトあるが、競技プログラミングと違って二秒で終わらせる必要はないのでO(N2)で充分。Puzzle穴埋めパズルが登場する。開発者コンソールに左から入力してオブジェクトの要素などが存在するか調べたり、文字コードなどは雰囲気で読んだりして埋める。最終的に以下のようになる。Substring!ウェブフォームから文字列を送ると、それがフラグの部分文字列として登場する回数を教えてくれる。/flag={[a-z_{}]+}/の形式であることはわかっている。flag={で始まることがわかり、それを入力すると1になるので、あとは一文字ずつ[a-z_{}]の文字それぞれを試しながら伸ばしていき、文字が増えなくなったら終了。フラグ一文字あたり29クエリ程度(と前後の処理及び試行錯誤)が必要だが、それより短縮できるとも思えないのでそのまま実施。圧縮されていることがわかる。出てくる、という具合に、マトリョーシカのように圧縮を繰り返されている。