Shikata Ga Nai

Private? There is no such things.

第32回:APIの解析とテストの基本

Hello there, ('ω')ノ

1. なぜ API テストが重要か?

観点 理由
機能の集中 本番ロジック・認可判断・データ処理が API に集約
UI 非依存 フロント改装後もエンドポイントは生存し続ける
自動攻撃の的 Bot やスクリプトが直接 API を叩くほうが効率的

2. テスト前の準備チェック

  • [ ] API ドキュメント(Swagger/OpenAPI/GraphQL Schema)があるか
  • [ ] テスト用アカウント(一般ユーザ/管理者)を用意
  • [ ] Burp Suite または Postman をインストール
  • [ ] jqhttpx など CLI が使える環境

3. 5ステップ標準フロー

ステップ 目的 ツール例
① エンドポイント列挙 全リソース把握 ドキュメント自動インポート, Burp Logger
② 認証・認可テスト 誰が何を操作できるか Postman コレクション + ロール別トークン
③ パラメータ操作 IDOR/Mass Assignment Burp Repeater/Intruder
④ 入力バリデーション SQLi/XSS/JSON注入 OWASP ZAP, Nuclei templates
⑤ レート & 例外処理 DoS/情報漏えい while true; do curl ...; done + Burp Turbo

3.1 エンドポイント列挙

Swagger ありの場合

curl -s https://api.example.com/swagger.json | jq '.paths | keys'

パッシブキャプチャの場合(Burp)

  1. プロキシ経由でアプリを操作
  2. Target → Site map → Filter: “Request has JSON”
  3. /api/ 配下をすべて右クリック → Add to scope

GraphQL なら /graphql エンドポイント + introspection クエリ

{
  __schema { types { name fields { name } } }
}

3.2 認証・認可テスト

テスト項目 合格ライン
認証必須か 未ログインで /user/me 401/403
ロール分離 一般ユーザで /admin/stats 403 /
エラー
トークン再利用 ログアウト後の JWT 401

Tip:ID トークンが Base64 なら jwt.io でデコード → role, exp など確認。


3.3 パラメータ操作(IDOR/Mass Assignment)

# 例:自分の注文ID=100 を他人の 101 に変更
curl -H "Authorization: Bearer $TOKEN" \
  https://api.example.com/orders/101
  • IDor 簡易チェック:連番・UUID の差し替え
  • Mass Assignment:JSON ボディに隠しフィールドを追加
  {
    "username":"alice",
    "isAdmin":true   // ← 本来 UI に無い
  }

3.4 入力バリデーション

攻撃 代表ペイロード
SQLi "id": "1 or 1=1--"
XSS (JSON) "comment":"<img src=x onerror=alert(1)>"
Command inj "; cat /etc/passwd #

自動補助

nuclei -t cves/ -u https://api.example.com --json -H "Authorization: Bearer $T"

3.5 レート制御・例外処理

  1. 1 秒に 50 リクエストを送信し HTTP 429 が返るか
  2. 無効トークン を送った際のレスポンス → スタックトレースや SQL エラーが露出していないか
  3. 大きな JSON (1MB)を送信 → サーバ負荷 or エラー処理確認

4. よくある API 脆弱性トップ5

ランク 名称 簡単な見つけ方
1 Broken Object Level Auth (BOLA) / IDOR ID 書き換え
2 Broken Function Level Auth 権限外メソッド呼び出し
3 Mass Assignment 追加 JSON フィールド
4 Rate Limit Bypass X-Forwarded-For でIP偽装
5 Improper Error Handling エラーメッセージで内部構造漏れ

5. 報告のコツ

  • リクエスト&レスポンス全文 を添付(ヘッダー必須)
  • 手順→結果→影響 3段階で140字以内 に要約 → 詳細は添付
  • 修正案:RBAC 追加、allow-list JSON, LimitReq など提案すると高評価

まとめ:API は“裏口の正面玄関”

  • エンドポイント列挙 が 7 割
  • 認可 & パラメータ を変えるだけで高確率で当たる
  • ツールは Burp / Postman+軽量 CLI を組み合わせて効率化

「画面じゃなく、通信を見る」クセを付ければ、一気に上級ハンターへの道が開けます!

Best regards, (^^ゞ