見出し画像

防衛省サイバーコンテスト2024 問題集

一日10ファイルしかアップロードできぬ・・・

誤ってインターネット側へポートスキャン・攻撃ツールの実行等をしないように注意

問題文の横に書いてある数字が配点


Crypto

Information of Certificate 10

Easy.crt ファイルは自己署名証明書です。証明書の発行者 (Issuer) のコモンネーム (CN) 全体を flag{} で囲んだものがフラグです。

解答形式:flag{XXXXXXXXXXXXXXXXXX} (半角英数記号)

ヒント

certutil や openssl コマンドで調べることができます。

Missing IV 20

NoIV.bin ファイルは、128bit AES の CBC モードで暗号化した機密ファイルですが、困ったことに IV (初期化ベクトル) を紛失してしまいました。このファイルからできる限りのデータを復元し、隠されているフラグを抽出してください。

暗号鍵は 16 進数表記で 4285a7a182c286b5aa39609176d99c13 です。

解答形式:flag{XXXXXXXXXX} (半角英数字)

ヒント

CBC モードでは、IV が誤っていても最初のブロック以外は正常に復号できます。平文ファイルのヘッダーは完全には復元できませんが、有用な情報が残されているかもしれません。

平文ファイルは OpenDocument Text ファイルだったようです。


Short RSA Public Key 20

RSA-cipher.dat ファイルは RSA 公開鍵 pubkey.pem で暗号化されています。公開鍵から秘密鍵を割り出し、暗号を解読してください。なお、パディングは PKCS#1 v1.5 です。

解答形式:flag{XXXXXXXXXX} (半角英数字)

家庭用 PC で 256bit の数の素因数分解を行うには msieve が有効です。

素因数分解した素数から RSA 鍵を作成するには、例えば Python の Cryptography モジュール が利用できます。


Cryptographically Insecure PRNG 30

PRNG.bin ファイルは下記の式で表される線形合同法で生成された疑似乱数列で XOR をとって暗号化されています。なお、生成された 4 バイトの数を最下位ビットから近い順に 1 バイトずつ平文と XOR をとるものとします。例えば、Hello World を x_0 = 4294967295 = 0xFFFFFFFF の初期値で暗号化した場合、16 進ダンプで b7 9a 93 93 cb 21 57 6f a3 ec 65 となります。

x_{n+1} = (233 x_n + 653) mod 4294967296

鍵(初期値= x_0)を推定し、PRNG.bin に対応する平文からフラグを抽出してください。なお、平文は(内容に意味はありませんが) ASCII でエンコードされた英文であったことがわかっています。また、最初の単語は 4 文字以上です。

解答形式:flag{XXXXXXXXXX} (半角英数字)




Forensics

NTFS Data Hide 10

NTFSDataHide フォルダに保存されている Sample.pptx を利用して、攻撃者が実行予定のスクリプトを隠しているようです。 仮想ディスクファイル NTFS.vhd を解析して、攻撃者が実行しようとしているスクリプトの内容を明らかにしてください。

解答形式:flag{XXXXXX}

NTFS ファイルシステムには ADS (Alternative Data Stream) と呼ばれるデータ保存領域があります。

スクリプトでは PowerShell による Base64 デコードを行っています。


NTFS File Delete 10

NTFSFileDelete フォルダにフラグを記載した txt ファイルを保存したのですが、どうやら何者かによって消されてしまったようです。

問題「NTFS Data Hide」に引き続き、仮想ディスクファイル NTFS.vhd を解析して、削除された flag.txt に書かれていた内容を見つけ出してください。

解答形式:flag{XXXXXX}

NTFS ファイルシステムではMFT (Master File Table)と呼ばれるデータベースでファイルを管理しています。

The Sleuth Kit や FTK Imager などのフォレンジックツールは、MFT に残る削除済みデータを表示してくれます。


HiddEN Variable 20

このメモリダンプが取得された環境にはフラグが隠されています。 memdump.raw を解析して、フラグを見つけ出してください。

メモリダンプは展開すると 4.5GB 程度になるので注意してください。

解答形式:flag{XXXXXX}

メモリ解析には Volatility というフレームワークがよく使われます。

メモリ内に保存された環境変数を見てみましょう。


NTFS File Rename 20

NTFSFileRename フォルダに保存されている Renamed.docx は、以前は別のファイル名で保存されていました。

問題「NTFS File Delete」に引き続き、仮想ディスクファイル NTFS.vhdを解析して、 Renamed.docx の元のファイル名を明らかにしてください。

解答形式:flag{XXXXXX} (XXXXXX.docxから拡張子を除いた部分をflag{}の中に入れて解答してください)

NTFS ファイルシステムはジャーナリングファイルシステムで、NTFS Log や USN ジャーナルにファイルの変更履歴が記録されています。

My Secret 30

問題「HiddEN Variable」に引き続き、メモリダンプファイル memdump.raw を解析して、秘密(Secret)を明らかにしてください。

解答形式:flag{XXXXXX}

7-Zip というソフトウェアで何かを行っているようです。

ファイルがダンプできませんか?対象のファイルが小さければ、ファイルシステムアーティファクトのどこかにデータが残っているかもしれません。





Miscellaneous

Une Maison 10

画像 maison.jpg の中にフラグが隠されています。探してみてください。

解答形式:flag{XXXXXX}
メタデータやバイナリの解析は必要ありません。
中央に円が見えますが、違和感を覚える箇所がありませんか?

String Obfuscation 10

難読化された Python コード string_obfuscation.py ファイルからフラグを抽出してください。

解答形式:flag{XXXXXXXX}

FLAG 定数の値を出力してみてください。

Where Is the Legit Flag? 20

fakeflag.py を実行しても偽のフラグが出力されてしまいます。難読化されたコードを解読し、本物のフラグを見つけ出してください。

解答形式:flag{XXXXXXXX}
2つ目の exec 関数に渡されているバイト列をデコードしてみてください。
デコードしたコードには使われていない値が含まれています。これを出力してみてください。


Utter Darkness 20

画像ファイル darkness.bmp に隠されているフラグを見つけてください。

解答形式:flag{XXXXXX}
カラーパレット表現の BMP ファイル形式について調べてみてください。



Serial Port Signal 30

Tx.csv は、とあるシリアル通信の内容を傍受し、電気信号の Hi, Low をそれぞれ数字の 1 と 0 に変換したものです。通信内容を解析してフラグを抽出してください。

解答形式:flag{XXXXXXXX} (半角英数字)

シリアル通信の方式は UART です。

ボーレートは 9600、データ長は 7 bit、パリティは偶数、ストップビットは 1 です。






Network

Discovery 10

あなたはクライアントに依頼されて リリース予定の Web サーバー「10.10.10.21」に問題がないか確認することになりました。

対象サーバーにインストールされている CMS のバージョンを特定し、解答してください。

解答形式:flag{*.*.*.*, ********: *****} (バージョン番号, リビジョン番号)

Webサイトにうまく接続できない?
ポートスキャンや、curlコマンドの結果をよく読んでみてください。

CMS の管理ページが見つからなければ、ディレクトリ探索を試してみましょう。

FileExtract 10

添付の FileExtract.pcapng ファイルからフラグを見つけ出し、解答してください。

解答形式:flag{**********}

FTPを使用して、ファイル転送を行っています。

パケットアナライザの追跡機能を使用して、ファイルを抽出してください。

パスワードは平文で流れています

Exploit 20

クライアントに管理情報が露見していることを報告しました。 問題「Discovery」に引き続き、対象サーバー「10.10.10.21」にインストールされている CMS の脆弱性を調査し、機密情報(フラグ)を入手してください。

本問題の解答には、「Discovery」で発見した CMS を使用します。 なお、対象のCMSのコンテンツは約5分に1回の頻度でリセットされます。

解答形式:flag{******************}

Exploit-DB

入手したアカウントでは新規ページの作成は制限されていますが、
既存のページを複製することはできるかもしれません。


DO_tHe_best 20

IPアドレス「10.10.10.20」のターゲットシステムに隠された機密情報(フラグ)を見つけ出し、解答してください。

解答形式:flag{**********}

オープンポートに対する通信の応答ヘッダを注意深く観察してください。
ターゲットシステムではRFC 8484 ならびにGoogle方式の双方をサポートしています。


Pivot 30

問題「Exploit」より、クライアントに CMS に脆弱性が確認されたことを報告しました。 クライアントは、対象サーバーはコンテナ化しているので安全だと思っていたと驚いていました。

クライアントから追加の依頼があり、保守用の SSH アカウント情報が漏洩した場合の影響を調査することになりました。ポートスキャンやファイル探索などを駆使し、対象サーバー「10.10.10.21」から機密情報(フラグ)を入手してください。

解答方式:flag{***************}

【ログイン情報】

  • User: george

  • Password: Mercedes63

SSHサーバー内に機密情報のヒントがあるようです。
不審なテキストファイルがないか探してみましょう。

SSHサーバー内で列挙に使えるコマンドがないか、調べてみましょう。

SSH サーバーで実行できるコマンドは少ないですが、ポートフォワーディングを利用すればうまくいくはずです。







programming



Logistic Map 10

下記のロジスティック写像について、x_0 = 0.3 を与えた時の x_9999 の値を求め、小数第7位までの値を答えてください(例:flag{0.1234567})。なお、値の保持と計算には倍精度浮動小数点数を使用してください。

x_{n+1} = 3.99 x_n (1 - x_n)

解答形式:flag{X.XXXXXXX} (半角数字)


Randomness Extraction 20

ファイル random.dat は一様でない乱数生成器の出力ですが、一部にフラグが埋め込まれています。フォン・ノイマンランダムネスエクストラクターを適用してフラグを抽出してください。

解答形式:flag{XXXXXXX} (半角英数字)

入力はビット列として解釈してください。また、エクストラクター適用後のデータのどこかにフラグが平文で記述されています。



XML Confectioner 20

添付の sweets.xml には、多数の sweets:batch 要素が含まれています。これらの中から、下記の条件すべてを満たすものを探してください。

  1. 少なくとも二つの子要素 sweets:icecream が含まれる

  2. 子要素 sweets:icecream には icecream:amount 属性の値が 105g を下回るものがない

  3. 子要素 sweets:candy の candy:weight 属性の値の合計が 28.0g 以上である

  4. 子要素 sweets:candy の candy:shape 属性が 5 種類以上含まれる

  5. cookie:kind 属性が icing でありかつ cookie:radius 属性が 3.0cm 以上の子要素 sweets:cookie を少なくとも一つ含む

フラグは、条件を満たす sweets:batch 要素内において、最も cookie:radius 属性が大きな sweets:cookie 要素の内容に書かれています。

解答形式:flag{XXXXXXXX} (半角英数字)


Twisted Text 30

添付の画像 Twisted.png は、画像の中心からの距離 r [pixel] に対して

θ = - (r ^ 2) / (250 ^ 2) [rad]

だけ回転されています(反時計回りを正とします)。逆変換を施してフラグを復元してください。

解答形式:flag{XXXXXXX} (半角英数字)




Trivia

The Original Name of AES 10

Advanced Encryption Standard (AES) は、公募によって策定された標準暗号です。 現在採用されているアルゴリズムの候補名は何だったでしょうか?

flag{XXXXXXXX} (半角英字)

CVE Record of Lowest Number 10

最も番号が若い CVE レコードのソフトウェアパッケージにおいて、脆弱性が指摘された行を含むソースファイル名は何でしょう?

解答形式:flag{XXXXXXXXX} (半角英数・記号)

MFA Factors 10

多要素認証に使われる本人確認のための3種類の情報の名前は何でしょう?それぞれ漢字2文字で、50音の辞書順で並べて「・」で区切ってお答えください。

解答形式:flag{○○・○○・○○} (それぞれ漢字2文字)



web

Browsers Have Local Storage 10

http://10.10.10.30 にアクセスしてフラグを見つけ出し、解答してください。

解答形式:FLAG{************}

ブラウザが持っているストレージについて調べると役に立ちます。

開発者ツールを開いてみてください。

Chromium 系ブラウザでは開発者ツールの Application タブを、Firefox では Storage タブを開いてみてください。


Are You Introspective? 10

http://10.10.10.31 にアクセスしてフラグを見つけ出し、解答してください。 このサイトでは GraphQL が使用されているため、まずは endpoint を探す必要があります。

解答形式:FLAG{************}

GraphQL の endpoint がどんな path で表現されるか、注意深く調べましょう。 version 管理されている可能性も考慮してください。

GraphQL の機能の一つである introspection が使えそうです。

Introspection からなるべく多く情報が得られるように query をしてみて、出力を注視して下さい。



Insecure 20

あなたは社内ポータルサイト(http://10.10.10.33)の管理者に依頼されて、profile ページが安全に保護されているかチェックすることになりました。 以下のログイン情報を用いてサイトにログインし、管理者の profile ページに記載されている秘密の情報を見つけてください。 なお、依頼の際に「管理者ページのidは0だよ」というヒントをもらっています。

【ログイン情報】

  • User: testUser

  • Password: diejuthdkfi14

解答形式:FLAG{************}

profile ページに遷移する際のリクエストを注意深く観察して、id というパラメータを見つけましょう。

/show_profile.php?id=0 としてリクエストを送った際に、id=1 の場合と何が違うでしょう。

/profile_success.php をリクエストするタイミングをずらせないか試してみましょう。




Variation 20

http://10.10.10.32 のWebサーバーで下記形式の XSS を発生させ、フラグを入手してください。 <script>alert(1)</script>

解答形式:FLAG{************}

文字には様々な表現方法があります。

“<”、“>”の2文字がポイントです。

違う文字でも、ある変換によって同じ文字になることがあります。




Bruteforce 30

http://10.10.10.34:8000 からフラグを回収して下さい。 http://10.10.10.34:5000 で動作するプログラムの内容は、ctf-web-hard.pyに記載されています。

解答形式:FLAG{************}

トークンで使用されている鍵の特定には、rockyou.txt を使用して下さい。

10.10.10.34:8000で動作するプログラムは、ワンライナーで資格情報を設定して動作しています。

ディレクトリトラバーサルの脆弱性を突いて、 /proc/<num>/cmdline を列挙して下さい。

この記事が気に入ったらサポートをしてみませんか?