Hello there, ('ω')ノ
1. なぜ API テストが重要か?
観点 | 理由 |
---|---|
機能の集中 | 本番ロジック・認可判断・データ処理が API に集約 |
UI 非依存 | フロント改装後もエンドポイントは生存し続ける |
自動攻撃の的 | Bot やスクリプトが直接 API を叩くほうが効率的 |
2. テスト前の準備チェック
- [ ] API ドキュメント(Swagger/OpenAPI/GraphQL Schema)があるか
- [ ] テスト用アカウント(一般ユーザ/管理者)を用意
- [ ] Burp Suite または Postman をインストール
- [ ]
jq
やhttpx
など 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)
- プロキシ経由でアプリを操作
- Target → Site map → Filter: “Request has JSON”
/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 秒に 50 リクエストを送信し HTTP 429 が返るか
- 無効トークン を送った際のレスポンス → スタックトレースや SQL エラーが露出していないか
- 大きな 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, (^^ゞ