Hello there, ('ω')ノ
✅ multipart/form-dataとは?
フォームで複数の種類のデータ(ファイル・テキストなど)を一緒に送信するための仕組みです。 ファイルアップロードフォームでは必ずこの形式が使われます。
🎯 multipart/form-dataリクエストの例
以下は実際のファイルアップロード + テキストデータ送信の例です。
POST /images HTTP/1.1 Host: normal-website.com Content-Length: 12345 Content-Type: multipart/form-data; boundary=---------------------------012345678901234567890123456 -----------------------------012345678901234567890123456 Content-Disposition: form-data; name="image"; filename="example.jpg" Content-Type: image/jpeg [...example.jpgのバイナリデータ...] -----------------------------012345678901234567890123456 Content-Disposition: form-data; name="description" This is an interesting description of my image. -----------------------------012345678901234567890123456 Content-Disposition: form-data; name="username" wiener -----------------------------012345678901234567890123456--
📝 各パートの解説
1️⃣ ファイル(imageフィールド)
Content-Disposition: form-data; name="image"; filename="example.jpg" Content-Type: image/jpeg
- name="image" → フォームのinput名
- filename="example.jpg" → アップロードファイル名
- Content-Type: image/jpeg → ファイルタイプ宣言
この部分に画像ファイルのバイナリデータが含まれます。
2️⃣ テキスト入力(descriptionフィールド)
Content-Disposition: form-data; name="description" This is an interesting description of my image.
- 単なる説明文(通常のテキストデータ)
3️⃣ テキスト入力(usernameフィールド)
Content-Disposition: form-data; name="username" wiener
- 入力されたユーザー名
🧠 攻撃者が狙うポイント
✅ Content-Disposition
- 攻撃者は
filename="example.jpg.php"
やfilename="shell.pHp"
のように ファイル名を細工して検証をバイパスします。
✅ Content-Type
- 攻撃者はツール(例:Burp Suite)を使い
Content-Type: image/jpeg
に偽装しながら、 実体は PHPスクリプト を送り込むことができます。
✅ 多くの脆弱サイトはContent-Typeやファイル名だけをチェックし、 実ファイルの内容(マジックバイト)まで確認していないため突破されます。
🎯 まとめ:multipart/form-dataの仕組みと脆弱性
項目 | 攻撃者の悪用方法 |
---|---|
Content-Disposition | ファイル名偽装(shell.jpg.phpなど) |
Content-Type | MIME偽装(image/jpegとして送信) |
フォーム構造 | 複数パートに分かれるため検証が甘くなる |
✅ 開発者側の対策
対策 | 内容 |
---|---|
✅ ファイル名の正規化 | パス名や拡張子の異常値を除去 |
✅ マジックバイト確認 | 実際のファイル内容で判定 |
✅ 実行不可ディレクトリに保存 | スクリプトファイルが実行されない |
✅ ファイル名の自動ランダム化 | 攻撃者のファイル名意図を阻止 |
🎯 攻撃者視点のまとめ
multipart/form-dataは便利さと柔軟さを持つ反面、 検証の不備を突きやすい構造です。 Burp SuiteやOWASP ZAPなどで簡単に改変できるため、 テスター・攻撃者はここを重点的に狙います。
「multipartは便利だが最大の盲点」 この構造を深く理解することが ファイルアップロード脆弱性の検出・悪用・防御のすべての基礎になります。
Best regards, (^^ゞ