Methodology
Mapped to PTES (Penetration Testing Execution Standard) + OWASP WSTG 4.2 + OWASP API Security Top 10 (2023).
Phase 1 — Passive reconnaissance
Goal: build an accurate picture of the attack surface without touching production.
- Subdomain enumeration:
subfinder,amass enum -passive, crt.sh, DNSDumpster - WHOIS, ASN, netblocks
- Historical DNS (SecurityTrails-equivalent via amass)
- GitHub dorking (
org:corezoidsearches for secrets, API keys, internal URLs) - Public leak check (HaveIBeenPwned-style, GitHub public gists)
Output: recon/subdomains.md,
recon/raw/*.json
Phase 2 — Active reconnaissance
- HTTP probing with
httpx -tech-detect -title -status-code -tls-grab - Port scanning with
nmap -Pn -sV --top-ports 1000on primary targets,-p-on edge hosts - TLS inspection:
nmap --script ssl-enum-ciphers,ssl-cert, cert parsing - Content discovery:
ffufwithraft-medium-words.txt(rate-limited, SMART mode) - Robots.txt, sitemap.xml, security.txt harvest
- Favicon hash match (Shodan-equivalent tech fingerprinting)
Output: recon/ports.md,
recon/tech-stack.md
Phase 3 — Authenticated web application testing
Using provided HAR files as authenticated session baselines:
- Authentication & session: cookie flags, JWT parsing, session fixation, logout CSRF
- Authorization: IDOR (increment/decrement tenant IDs, user IDs), vertical privilege escalation (user → admin)
- Input handling: reflected/stored XSS (DOM, JS templates), template injection, HTML injection
- Injection: SQLi (time-based, boolean-based via
sqlmap --batch --risk=1 --level=2), NoSQLi, command injection - Business logic: race conditions on state transitions, parameter tampering, workflow skipping
- File handling: upload path traversal, MIME sniffing, SSRF via URL params
- Client-side: CSP review, subresource integrity, post-message origin checks
Per-target checklist lives in
notes/web-checklist-<host>.md
Phase 4 — API testing
Aligned with OWASP API Security Top 10 (2023):
- BOLA — replay authenticated requests, swap object IDs
- Broken auth — JWT
alg:none, weak secrets, token reuse after logout - BOPLA — mass assignment on create/update endpoints
- Unrestricted resource consumption — rate limit tests (respect RoE: probe, don't exhaust)
- BFLA — function-level auth bypass (change
GET /user/123toDELETE /user/123as unprivileged user) - Unrestricted access to sensitive business flows — scripted abuse of legitimate endpoints
- SSRF — URL parameters, webhook targets, import-from-URL features
- Security misconfig — CORS wildcards, verbose errors, exposed debug endpoints
- Improper inventory mgmt — v1/v2/v3 endpoint coexistence, staging endpoints in prod
- Unsafe API consumption — how does Corezoid consume third-party APIs (SSRF-enabling config?)
Output: findings/CRZ-NNN-*.md per
issue
Phase 5 — Automated vulnerability templated scanning
nuclei -severity medium,high,critical -exclude-tags dos,brute-force,intrusive -rate-limit 50- Target list from Phase 2 live hosts
- Manual verification of every non-info finding before filing
Output: tools-out/nuclei-*.json, filed
findings
Phase 6 — Source code audit
For each repo in scope:
git cloneintorepos-src/(outside the tracked tree, but under the engagement dir)trufflehog git file://<path> --only-verified+ full scangitleaks detect --source <path> --no-git --verbosesemgrep --config auto --config p/owasp-top-ten --config p/security-audit <path>- Manual review of:
- Authentication & session code
- Authorization checks (especially in API handlers)
- Crypto usage (key generation, signing, TLS config)
- Deserialization entry points
- SQL query construction
- File upload / path handling
- Environment variable / secret loading
- CI/CD workflows (
.github/workflows/*.yml) — secret exposure in logs, injectable branch names - Dependency manifests — known-vulnerable versions
Output: repos/<repo>.md per
repo
Phase 7 — IaC & deployment review
- Helm charts: privileged pods, hostNetwork, missing resource limits, default credentials in values.yaml, ingress exposure
- Terraform: public S3 buckets, open security groups (0.0.0.0/0), unencrypted storage, secrets in state files, IAM wildcards
- Ansible: plaintext passwords in playbooks,
becomewithout sudoers scoping, insecureshell:usage
Output: repos/helm.md,
repos/terraform.md,
repos/corezoid_ansible_roles.md
Phase 8 — Edge infrastructure
- VPN fingerprint (OpenVPN/WireGuard/IPsec/SSL-VPN), known CVE match
- Jira version → known CVE search (CVE-2022-26134 OGNL, CVE-2023-22515 etc.)
- Exposed monitoring (Grafana, Prometheus, Kibana) on subdomains
- SSH fingerprint on edge hosts (if exposed)
Phase 9 — Reporting
Three documents:
report/technical-report.md— every finding with reproduction steps, evidence, CVSS, remediationreport/executive-summary.md— top risks, business impact, 1-page TL;DRreport/action-plan.md— prioritized remediation backlog with effort estimates
What makes a "good finding"
A filed finding must include:
- CRZ-NNN ID (sequential)
- Title (actionable, specific)
- Severity (Critical/High/Medium/Low/Info + CVSS vector)
- Affected asset(s)
- Description (what + why it matters)
- Reproduction (exact requests/commands, minimized)
- Evidence (links to
evidence/CRZ-NNN-*files) - Impact (what an attacker can do)
- Remediation (concrete fix)
- References (CWE, OWASP, CVE)
Template: findings/_TEMPLATE.md