agentsclimarketplace

Webapp pentest checklist

Skill Dolphinllc/claude-security-skills/skills/offensive/web/webapp-pentest-checklist

Defensive security skills for Claude Code and the Claude Agent SDK — web applications and generative AI systems.

Install
npx -y skills add Dolphinllc/claude-security-skills --skill webapp-pentest-checklist

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Authorized self-pentest checklist for web applications you own. Walks the OWASP Web/API Top 10 against a locally-running target, discovering the base URL via env or entrypoint files (never hardcoded). Use when the user asks to "pentest", "attack", "probe", or "test the security of" their own running web app and the framework is unknown or mixed. For framework-specific deeper checks, use express/django/spring-boot/nextjs/nestjs/fastapi attack-probe skills.

SKILL.md

4.7 KB, as published. Nobody here has run it

Web App Self-Pentest Checklist

Authorized, rate-limited probe of a web app running on the user's own machine. Follow the shared probing conventions for authorization, target discovery, and output schema.

Procedure

  1. Authorization preflight. Default to localhost/127.0.0.1. If a non-loopback host is named, require explicit user confirmation in chat.
  2. Discover base URL per PROBING.md (env → entrypoint → ask). Record target.base_url and target.discovered_via.
  3. Confirm liveness. GET / and GET /healthz//health (if any). If unreachable, return PREFLIGHT-BLOCKED.
  4. Enumerate routes from the app's source if you can read it; otherwise crawl from / to depth 2 (max 50 URLs) and stop.
  5. Run the rule pack below. Stop at the first request budget hit (default 200 requests).

Rules

IDSeverity (if confirmed)ProbeConfirmed when
WEB-INFO-001lowFetch /.env, /.env.local, /.git/config, /.git/HEAD, /package.json, /composer.jsonBody is a non-404 file containing expected markers (DB_, API_KEY, [core])
WEB-INFO-002mediumFetch /server-status, /.well-known/security.txt, /robots.txt, /sitemap.xml, /api-docs, /swagger, /openapi.json, /graphqlReturns a populated body that exposes routes/internals
WEB-AUTH-001highFor each mutating route discovered, send the request with no auth header / cookie2xx response identical to authenticated response
WEB-AUTH-002highReplay an authenticated request from user A's session against /users/{B}/...2xx instead of 403 = IDOR
WEB-AUTH-003mediumSend Authorization: Bearer eyJhbGciOiJub25lIn0.<base64-mod-payload>. (alg=none JWT)2xx accepted = JWT alg confusion
WEB-XSS-001highSubmit "><svg/onload=__probe('xss')> to each text input; render-back endpoints reflect it un-encoded<svg/onload appears verbatim in HTML response (not entity-encoded)
WEB-SQLI-001highAppend ' and ' OR '1'='1 to each numeric/string param; compare against baselineDifferent status code OR DB error string in response
WEB-SSRF-001highIf app fetches URLs (preview, image proxy, webhook), submit http://127.0.0.1:1, http://169.254.169.254/latest/meta-data/Connection succeeds / metadata returns
WEB-OR-001mediumSubmit redirect param values like //evil.test, https://evil.test to login/return URLs30x with Location: outside same-origin
WEB-CORS-001highSend Origin: https://evil.test with credentials to authenticated endpointAccess-Control-Allow-Origin reflects origin AND Allow-Credentials: true
WEB-CSRF-001highState-changing endpoint reachable via cross-origin form POST without CSRF token2xx on a request lacking the CSRF header/token
WEB-UPLOAD-001highUpload file with double-extension shell.php.jpg / wrong MIME / SVG with embedded scriptStored and served with executable type / Content-Type: image/svg+xml rendered
WEB-MASS-001mediumSubmit extra fields to update endpoints (role: "admin", is_staff: true)Field accepted and persisted = mass-assignment
WEB-ERR-001lowTrigger errors via /?id[]=1, malformed JSON, type confusionStack trace in 500 response = info disclosure
WEB-RATE-001mediumSend 10 rapid POST /login with random passwordsAll accepted without 429 / lockout = no rate limiting

Workflow notes

  • Reserve mutation probes (WEB-MASS-001, WEB-UPLOAD-001, WEB-CSRF-001) for endpoints clearly safe to write to (or skip if uncertain).
  • For WEB-AUTH-002 (IDOR), require the user to provide two test accounts; otherwise mark as info: not-tested.
  • Render IDs from the running app's data, never inject random UUIDs that match nothing.

Wrong-target safety

If the resolved base_url host is not in {localhost, 127.0.0.1, ::1, *.localhost} AND was not explicitly confirmed by the user this session — return a single PREFLIGHT-BLOCKED finding and stop.

References

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.