Hello there, ('ω')ノ
APIは特定のデータフォーマットを想定してリクエストを処理します。しかし、異なるコンテンツタイプ(Content-Type)を送信すると、予期しない動作を引き起こす可能性があります。これを利用すると、エラーメッセージの取得、認証・認可のバイパス、さらにはインジェクション攻撃の実行が可能になる場合があります。
1. APIが扱う主なコンテンツタイプ
Content-Type | 説明 | セキュリティリスク |
---|---|---|
application/json |
JSON形式のデータ | 一般的に安全だが、パース処理の不備でXXEが発生することもある |
application/xml |
XML形式のデータ | XXE(XML外部実体参照)やXPathインジェクションのリスク |
text/plain |
ただのテキスト | 型チェックの回避やSQLインジェクション |
application/x-www-form-urlencoded |
HTMLフォームデータ | クライアント側のバリデーションをバイパス可能 |
multipart/form-data |
ファイルアップロード時に使用 | ファイルのパス・種類の制限バイパス |
application/graphql |
GraphQLのクエリ送信時に使用 | クエリのバリデーションをバイパスできる可能性 |
2. Content-Typeの変更による攻撃手法
(1) エラーメッセージの取得
異なるコンテンツタイプを試すことで、APIの内部処理や使用しているフレームワークに関する情報がエラーメッセージとして漏洩することがあります。
例: JSONを想定しているAPIにXMLを送信
POST /api/orders HTTP/1.1 Host: example.com Content-Type: application/xml <order> <item>123</item> </order>
レスポンス
{ "error": "Unexpected token '<' at position 0 in JSON" }
👉 サーバーがJSONを期待していることが分かる → JSONパースのバグを狙える可能性
(2) 認証・認可のバイパス
場合によっては、特定のコンテンツタイプを使うことで、アクセス制御が適用されないエンドポイントが存在する可能性があります。
例えば、通常のリクエストでは認証が必要でも、Content-Type: text/plain
で送信すると認証を回避できることがあります。
POST /api/admin HTTP/1.1 Host: example.com Content-Type: text/plain admin=true
👉 APIがプレーンテキストを処理すると、認証チェックを回避できる可能性
(3) インジェクション攻撃
JSON形式では安全でも、XMLでは脆弱なAPIが存在することがあります。
例: JSONなら問題ないが、XMLだとXXEが発生
POST /api/profile HTTP/1.1 Host: example.com Content-Type: application/xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> <profile> <name>&xxe;</name> </profile>
👉 このリクエストが成功すると、/etc/passwd
の内容が漏洩する可能性(XXE攻撃)
3. Content-Typeを変更してAPIをテストする方法
(1) Burp Suiteで手動テスト
- Burp SuiteのRepeaterを使用し、Content-Typeを変更して送信
- 異なるデータフォーマットでAPIがどう応答するか観察
- レスポンスのエラーメッセージを分析し、攻撃のヒントを得る
(2) Content type converter BAppの活用
- Burp Suiteの BApp Store から Content type converter をインストール
- JSONデータをXMLに自動変換し、リクエストを送信
- 手作業なしで複数のフォーマットをテスト可能
(3) Burp Intruderを使った自動化テスト
- IntruderでリクエストのContent-Typeヘッダーをパラメータ化
application/json
,application/xml
,text/plain
などを順番に送信- レスポンスの違いを比較し、異常動作を探す
4. まとめとポイント
✅ APIは異なるContent-Typeに対して異なる動作をすることがある
✅ エラーメッセージを利用してAPIの内部構造を推測できる
✅ Content-Typeを変更することで、認証バイパスやインジェクション攻撃が可能になることもある
✅ Burp Suiteの「Content type converter」やIntruderを活用し、効率的にテストを行う
Content-Typeの変更による攻撃は、APIテストの基本ですが、脆弱なAPIに対しては強力な攻撃手法となります。テスト時には複数のフォーマットを試し、APIの想定外の挙動を探りましょう。
Best regards, (^^ゞ