1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

i3CTF WriteUP ppap [Network]

Last updated at Posted at 2025-02-11

i3CTF ppap 解法

忘れちゃったけど、なんかやったことある...
と、なってしまったので雑に自分のために

問題

We have obtained top secret data on "tare", an important person. I want you to uncover tare's secret in this file.

+zipファイル(pcapファイル)

解法

PPAPとは
パスワード付きZIPとパスワードを別便のメールで送っちゃうやつ

メールのパケットキャプチャーなのが想像できる。ということで、WireSharkを開いたら
「ファイル」->「オブジェクトをエクスポート」->「IMF」

image.png

4つのメールゲット!!

それぞれ中身を見ていくと「秘密鍵送るね!!」と「tls通信しようね!!」みたいな感じのやり取り。

その秘密鍵を使って、pcapの暗号化された通信を覗くのかな?ということで、ChatGPTを使ってpemをきれいに成形してもらって「1.pem」「2.pem」として保存します。

PEMとは
-----BEGIN PRIVATE KEY-----
から

-----END PRIVATE KEY-----
で終わるメールを暗号化するときのファイル

つぎにWireSharkで、このpemファイルを読み込ませて、暗号化された通信を見ていきましょう。

WireSharkの検索欄から「tls」と入力してtls通信を見ていきます。
image.png

今の状態では、暗号化されておりデータがあることしかわかりません。

そのため、適当な行で右クリックをし、「プロトコル設定」->「Transpot Layer Secure」からRSA Keyリストを選択します。
次に+ボタンから2つのpemファイルを追加します。
image.png

追加が終わると、データの存在のみ分かっていたものの、中身がわかるようになりました!!

通信内容を見ていくのですが、便利なので、「分析」->「追跡」->「TLSストリーム」としてTLS通信の中身を分かりやすく表示させます。

適当に、右下のストリーム番号を増やしていくと、7番でやけに長い通信内容があります。

詳しく見ると
image.png

メールで「ZIPとPassWord送るわ!!」みたいな会話でzipファイルがあることがわかります。

これを適当にans.txtとかにして保存してzip部分を抜き出します。

ZIPファイルが見つかったので、これ以降のストリームでPassWordがあると推測できますね。

すると、次のストリームで「The password is d48pwbc7」とパスワードがわかりました。

次に、zipとPWで解凍するとsecret.pcapが見つかります。

image.png

このsecret.pcapを見ると「RTP」プロトコルが目立ちます。

これは動画配信とか見るときに使用されるプロトコルですね。

さっきのメールの続きがあるかもしれないと思い見てみると
「it appears that H.264 is used for encoding the video.」
H.264でエンコーディングされたやつっぽいので、WireSharkで正しく認識できるように設定していきます。

secret.pcapで「編集」->「設定」->「protocols」->「H.264」でpayload types(s)を96に設定してあげることで認識してくれます。これは、「a=rtpmap:96 H264」という部分から、ペイロードタイプが96であることが確認できます。

image.png

ちゃんと認識してくれました!!

あとはH.264を抽出してmp4に直せばそれがきっとフラグのはず

WireSharkでH.264を抽出する方法として

を使用します。これは、H.264を抽出してくれる便利なWireSharkの拡張機能です。

導入方法

DownloadZipからダウンロードして解凍します。
その中の.luaファイル2つあるので、

C:\Program Files\Wireshark\plugin

の中にコピーします。

抽出ツールを使用するために、「ツール」->「Extract h264~」を選択します。

これを実行すると...
image.png

保存先が表示され正しく保存されます。

ただ、これでは.264というファイルのままで中身を確認することができません。

なので、これをmp4に変換します。

ffmpegが入っている環境で以下のプログラムを実行します。
ChatGPTは便利ですね。

import subprocess

def convert_264_to_mp4(input_file, output_file):
    """
    .264ファイルを.mp4に変換する関数
    """
    try:
        # ffmpegコマンドの実行
        subprocess.run(
            ['ffmpeg', '-i', input_file, '-c:v', 'libx264', '-preset', 'fast', '-crf', '23', output_file],
            check=True
        )
        print(f"変換成功: {input_file} -> {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"エラー: {input_file}の変換に失敗しました。\n{e}")

if __name__ == "__main__":
    # 入力ファイルと出力ファイルのパスを指定
    input_file = "video.264"  # 変換元ファイル
    output_file = "video.mp4"  # 変換後のファイル
    convert_264_to_mp4(input_file, output_file)

ちなみにffmpeg入れるのはUbuntuのほうが簡単そうなのでWSLでやりました

この動画を見ると...

image.png

:angry:

と思いましたが動画の最後に無事フラグがあって安心しました。

以上の流れで回答できます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?