何かをアウトプットする場所

気になったこと、試したこと、その他もろもろを書いていきます

MNCTF 2019 Writeup

f:id:fatsheep:20190705015710p:plain

去年、一昨年に引き続き、マクニカネットワークスDAY2019の中のNMCTFに参加してきました。

MNCTF2019

残念ながら時間内に全問正答することはできませんでしたが、ここでは私が実際に解いたやり方と、解説時に印象に残った解法を記載しようと思います。

★これからやる人はネタバレ注意

悪意部品

※解けなかった問題です。

PLEADを解析する問題です。ヒントとして、以下の解析方法のサイトが紹介されています。

blogs.jpcert.or.jp

上記サイトでは鍵長が20H(=32bytes)となっていますが、作問のミスがあったようで、実際には20bytesだったとのことです。

ヒントのページでは復号するためのコードが書かれていますが、解説ではCyberChefを利用していました。

レシピは以下の通りです。

f:id:fatsheep:20190704134113p:plain

  • To Hex
    • バイナリデータをHex形式で扱います。後のレシピで文字整形など行うため、区切り文字はNoneにします。
  • Register
    • 正規表現で文字列を切り出し、変数に格納するものです。変数は以降のレシピで利用できるようになります。データの先頭40文字(20bytes)を抜き出し、$R0という変数に格納します。
  • Drop Bytes
    • 開始バイト、終了バイトを指定し、その部分を削除します。PLEADは最初の部分が鍵情報、そのあとの部分が暗号化されたデータ部分になるので、鍵の部分を削除します。鍵の部分は上述の通り20bytesですが、HEXの文字列としては40文字(40bytes)なので、0から40を指定し削除します。
  • RC4
    • 最後に残ったデータ部分をRC4で復号します。鍵情報はRegisterで変数登録された$R0(HEX)を指定し、入力データの形式はHEX、出力データの形式はLatin1を指定します。

変換されたデータで、ドメイン名を確認できます。CyberChef便利!

FLAG:macniki.com

標的攻撃I

仮想ディスクイメージが提供され、その中から削除されたファイルを取り出し、そのファイルのハッシュ値を求める問題です。

与えられたファイルがvmdkファイルだったので、FTK Imagerで開いてみます。中のフォルダをいろいろと探ってみたところ、削除されたファイルa.exeが見つかりました。

f:id:fatsheep:20190706234152p:plain

ファイルを右クリックしエクスポート、CyberChefにてMD5ハッシュ値算出を行い、フラグを得ました。

FLAG:5680a78ad0714d501f1a66215f509dfd

標的攻撃II

標的攻撃Iで抽出したマルウェアを実行した際、作成されるユーザアカウントを調べる問題です。

最初は実際に動作させて作成されるであろうプロファイルを調べたり、Process Explorerで見てみたりしていたのですが、なかなか見つけることができませんでした。

方針を変えサクラエディタにて見てみたところ、アカウント作成コマンドが見えました。

f:id:fatsheep:20190706234422p:plain

FLAG:SUPPORT_388945a1

標的攻撃III

ユーザアカウント情報から攻撃者グループを特定する問題です。

ググったところ、日本語記事(マクニカさんの記事)が出てきました。

f:id:fatsheep:20190706234522p:plain

FLAG:OceanLotus

標的攻撃IV

ログイン画面に不正作成したアカウントを非表示にするレジストリを答える問題です。

先の問題でサクラエディタにて開いた際、いくつかレジストリ操作しているものが見えました。そのうちの1つが正答でした。

f:id:fatsheep:20190706234633p:plain

FLAG:HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

建屋制御I

制御システムの通信が記録されているPCAPが提供され、その中を解析する問題のようです。

工場の空調システムのLocation名を答えるということで、Wireshark上のInfoで唯一Locationと記載されている通信10個を見てみます。

応答の通信が5個あり、そのうち10.0.0.101と10.0.0.102からの応答のData部に工場を示す文字列が見え、これが答えでした。

f:id:fatsheep:20190706235522p:plain

FLAG:1F_factory

建屋制御II

建屋制御Iの問題に引き続き、今度は2019/07/02 11:06(UTC)時点の工場の室温を調べる問題です。

まずはWireshark上で時刻を調査しやすいよう、表示形式を変更しておきます。WiresharkではJST表示となっているため9時間加算し、調べる時刻は20:06になります。

また建屋制御Iで工場のIPアドレスは10.0.0.101と10.0.0.102であることがわかっているので、Wiresharkの検索フィルタで絞り込んでおきます。

大会中は上記で絞り込んだ4個の通信の中身を見ていったところ、それっぽい数字があったので入力したところ、これが通りました。

f:id:fatsheep:20190707000407p:plain

FLAG:19.70611

解説ではBACNetをもう少し深く説明されており、通信のプロトコルなどからもう少し絞り込んで調査が行えるということでした。

情報漏洩I

BATファイルが提供され、難読化を解除する問題です。

f:id:fatsheep:20190706233228p:plain

最初のうちは「BATファイル 難読化」などのキーワードでググりまくっていたのですがまったく情報を見つけられませんでした。

ツール探しはいったんあきらめ、改めてBATの中身を見てみることにしました。

実行する際、標準出力をリダイレクトしファイル保存しても中身が空なことから、「@echo off」が実行されているのではと考え、まじまじと眺めたところ、2行目に「@」が含まれていることに気づきました。

これが糸口になり、大量の「%~%」は変数で、ただ初期化されていないので無視されるのでは、と思い、サクラエディタにて以下の正規表現で空の変数を削除したところ、難読化を解除することができました。

f:id:fatsheep:20190706233431p:plain

f:id:fatsheep:20190706233506p:plain

FLAG:XLS_Stealer_w00fw00f

情報漏洩II

※解けなかった問題です。

難読化解除したBATファイルは、BAT実行した場所にあるxlsファイルを、FTPを利用し外部に送信する内容になっていました。

一部、以下のように書き換え、正常にFTP通信でき、またアップロードではなくmgetでダウンロードするよう修正しました。

f:id:fatsheep:20190706233545p:plain

実行結果は以下のようになり、無事ファイルをダウンロードすることができました。

f:id:fatsheep:20190706233643p:plain

ただ大会当日はxlsファイルが壊れてしまっており、フラグ投入までは至りませんでした。

FLAG:顧客情報一覧2019上半期

暗証保護

※解けなかった問題です。

WEB問題になります。WEBアプリケーションの脆弱性を突き、password.phpに記載されている秘密情報を搾取する問題のようです。

password.phpを開くと、ローカルからのみアクセス可能なページであるメッセージが表示されます。

続いてwebchecker.phpを見てみます。こちらは入力したホストとパスに対し、HTTP通信し、リクエストヘッダ、レスポンスヘッダ、レスポンスボディ(の1行)を表示するアプリケーションのようです。

ためしにローカルからしかアクセスできないpassword.phpを開くよう、アクセスしてみました。結果は以下の画像のようになり、おそらく2行目以降にフラグがあることが伺えます。

f:id:fatsheep:20190707003908p:plain

大会当日は残念ながらここでタイムアップでした。

解法としては、HTTPヘッダインジェクションと、RANGEヘッダを利用し、1行目の改行文字以降の部分をRANGEヘッダで指定し、情報(フラグ)を流出させるということでした。

FLAG:admin20190703

さいごに

今年は前年よりも少し難易度があがっているということで、確かに難しく感じました。

ただ今年も新たな解析ツールの使い方を知ることができ、また見たことがなかった制御システムのプロトコルに触れられ、大変よい経験ができました。

来年は体調を整え、全問正答目指して備えたいと思います。

最後に凌さんはじめ、CTFの作問、運営を行っていた方々にお礼申し上げます。ありがとうございました。