Bug Bounty Cheatsheet
Program Intake
read policy, capture scope, set up test accounts
Download Burp Suite Project Configuration File
scope2env
Custom script hosted on my github
python3 ~/Tools/scope2env.py scope.csv
source ./scope/scope.env
Discovery
web/app recon tools
asset discovery workflow ex:
shuffledns -d <domain> -w <wordlist.txt> -r <resolvers.txt> -mode bruteforce -silent | grep api | alterx -silent | dnsx -silent | naabu -p 443, 8443 -silent
then feed to then httpx and crawl with katana
Asset Discovery
Passive Subdomain Enumeration
subfinder
Rapid, passive discovery of subdomains
subfinder -d $TARGET -silent -all -recursive -o subfinder_subs.txt
- all: Uses all available sources (even those that are not enabled by default, but are configured).
- recursive: Performs recursive enumeration — it takes each found subdomain and checks for sub-subdomains (e.g., dev.api.target.com).
- silent: Again, suppresses banner.
Note: Make sure to update config with api keys (shodan / virusTotal / Censys / SecurityTrails)
dedupe & sort
sort -u subfinder_raw.txt -o subfinder_unique.txt
amass
Comprehensive attack surface mapping
amass enum -passive -d <domain> -o amass.txt
ASN Enumeration
amass
ASN Lookup
amass intel -asn <ASN_Number> -o asn_ips.txt
Shodan
Shodan Enumeration
shodan search "net:<ip_range>" --fields ip_str,port --limit 100
Censys
Censys Asset Search
censys search "autonomous_system.asn:<ASN_Number>" -o censys_assets.txt
Active Subdomain Enumeration
MassDNS
High-speed DNS resolution
massdns -r resolvers.txt -t A -o S -w massdns_results.txt wordlist.txt
Shuffledns
Active enumeration of subdomains
shuffledns -d target.com -list all_subs.txt -r resolvers.txt -o active_subs.txt
SubBrute
DNS brute-forcing
python3 subbrute.py target.com -w wordlist.txt -o brute_force_subs.txt
FFuF Subdomain
ffuf -u https://FUZZ.target.com -w wordlist.txt -t 50 -mc 200,403 -o ffuf_subs.txt
Cloud Asset Discovery
CloudEnum
Multi-cloud asset discovery
Key Features: - Supports AWS, Azure, Google Cloud - Custom keyword generation - Automated bruteforcing
cloud_enum -k target.com
AWSBucketDump & S3Scanner
AWS S3 bucket discovery and analysis
Usage Guidelines: - Always respect bucket permissions - Document findings carefully - Follow responsible disclosure
S3 Bucket Access Test
aws s3 ls s3://<bucket_name> --no-sign-request
S3 Bucket Content Dump
python3 AWSBucketDump.py -b target-bucket -o dumped_data/
DNS Resolution
dnsx
dnsx -l subfinder_unique.txt -silent -o resolved-domains.txt
If you also want to triage infra vs vendor (CNAMEs, A/AAAA records), use:
dnsx -l subfinder_unique.txt -a -aaaa -cname -resp -silent -o dnsx_enriched.txt
Subdomain permutations
alterx
cat subdomains.txt | alterx | tee -a subdomains-dnsx.txt
URL Normalization / De-duplication
anew
Results Combination
cat *_subs.txt | sort -u | anew all_subs.txt
uro
cat katana.txt wayback.txt gau.txt | uro > urls.txt
Scanning
Note: Network/port scans (e.g., nmap/naabu) are usually not allowed on BBPs/VDPs unless the policy explicitly says so.
naabu
Scan for open ports
Note: Port scanning is active and noisy, this is potentially disruptive and often disallowed under VDP rules unless explicitly permitted.
cat subdomains.txt | alterx | dnsx | naabu -top-ports 100 -ep 22 -o open-ports.txt
nuclei
Vulnerability Scan (light exposure/fingerprinting)
nuclei -l resolved.txt -tags tech,exposure -severity low,medium -o nuclei.txt
vulnx
Subdomain takeover scanner
Key Features:
- Passive and active checks
- CMS fingerprinting
- Misconfigured CNAME detection
vulnx -d target.com -o vulnx-results
Content Discovery
Enumeration
HTTP Probing
httpx
Probe open ports for web service
Note: httpx can probe specific ports (80,443,8080,8443, etc.) and will tell you status, title, redirects, etc. It’s usually sufficient and much safer than a raw TCP port scan.
These four give you high coverage of:
- public websites and APIs,
- mobile backends that sometimes use alternate ports,
-
staging/management consoles accidentally left exposed on common alt-ports.
- 80 (HTTP) — the standard cleartext web port. Some legacy endpoints still listen here.
- 443 (HTTPS) — the standard TLS web port; almost every customer-facing service will use this.
- 8080 (alternative HTTP / app servers / proxies) — commonly used by application servers, proxies, and internal web apps that were fronted by a different port in deployment or for staging.
- 8443 (alternative HTTPS / admin consoles / Tomcat) — commonly used as a TLS alternative (Tomcat, admin UIs, dev environments).
httpx -l resolved_subs.txt -p 80,443,8080,8443 -silent -title -sc -ip -o live_websites.txt
Another way:
cat all_subs.txt | httpx -silent -title -o live_subdomains.txt
Results Validation
cat all_subs.txt | httpx -silent -title -o live_subdomains.txt
Custom Filtering
cat live_websites.txt | grep -i "login\|admin" | tee login_endpoints.txt
Piped
cat subfinder_unique.txt | dnsx -silent | httpx -ports 80,443,8080,8443 -title -status-code -content-length -location -threads 4 -timeout 6 -o httpx.json -json
Another way:
cat resolved_hosts.txt | httpx \
-ports 80,443,8080,8443 \
-title -status-code -content-length -location \
-threads 4 -timeout 6 \
-o httpx.json -json
-title— return the HTML<title>to quickly identify the type of service/page.-status-code(-sc) — show HTTP status codes to separate live/redirect/error pages.-content-length(-cl) — show response size to spot differing or unexpectedly large responses.-location— showLocationheader to inspect redirect targets (useful for open-redirect discovery).-follow-redirects(-fr) — follow 3xx redirects and report the final destination (caution: may touch external domains). - Use -location to inspect redirects first.-threads 8— concurrency level; use low values (2–8) on production to avoid overload.-timeout 8— per-request timeout in seconds; keeps scans moving while allowing slow responses.-tls-probe— fetches the TLS certificate (a strong in-scope signal)-silent— reduce console noise when piping to other tools or scripts.-o httpx.txt— write results to a file for triage; prefer-json/-json-outputfor machine-readable output.
URL/Endpoint Collection
When handling Specific (Non-Wildcard) Targets can skip enumeration to here
katana
Smart crawler for modern web applications
Key Features:
- JavaScript parsing
- Crawling customization
- Automatic handling of SPAs
katana -u target.example.com -silent -jc -o katana_results.txt
When authenticated:
katana -u <url> -jsl -H 'Cookie: SUPPORTSESSID=xxxx' -xhr -aff
and you can pipe that back into httpx like:
katana -u <url> -jsl -H 'Cookie: SUPPORTSESSID=xxxx' -xhr -aff | httpx -title -ct -cl -sc
pseudo-example adapt flag names for your Katana binary
katana \
--target https://accounts.britishairways.com \
--threads 2 \
--delay 1000 \ # 1000 ms between requests
--max-depth 3 \
--max-requests 800 \
--scope-host-only true \ # do not follow external hosts
--no-redirects true \ # don't follow redirects offsite
--methods GET,HEAD \ # only non-state-changing methods
--respect-robots true \
--exclude-paths "/admin,/checkout,/payments,/api/admin,/account/delete" \
--auth-cookie "session=YOUR_TEST_SESSION_COOKIE" \
--output ./katana_accounts.json
gau
Fetch known URLs from various sources
Key Features:
- Pulls from AlienVault, Wayback, Common Crawl
- Handles rate limiting automatically
- Supports multiple target inputs
gau target.example.com | anew gau_results.txt
waybackurls
Historical URL discovery from Wayback Machine
waybackurls target.example.com | anew wayback_results.txt
Parameter Extraction
cat archived_urls.txt | grep "=" | anew parameters.txt
API Enumeration
Kiterunner
kr scan https://api.target.com -w /usr/share/kiterunner/routes-large.kite -o api_routes.txt
Application endpoints and parameters → APIs (REST/GraphQL) → everything else in-scope
Directory/Endpoint Enumeration
Dirsearch
dirsearch -u https://target.com -w /usr/share/wordlists/content_discovery.txt -e php,html,js,json -x 404 -o dirsearch_results.txt
FFuF
Recursive
ffuf -u https://target.com/FUZZ -w /usr/share/wordlists/content_discovery.txt -mc 200,403 -recursion -recursion-depth 3 -o ffuf_results.txt
Parameter Discovery
arjun
arjun -u https://<host>/path -oT arjun-params.txt
Arjun Parameter Discovery
arjun -u "https://target.example.com" -m GET,POST --stable -o params.json
ParamSpider Web Parameters
python3 paramspider.py --domain target.com --exclude woff,css,js --output paramspider_output.txt
FFuF Parameter Bruteforce
ffuf -u https://target.com/page.php?FUZZ=test -w /usr/share/wordlists/params.txt -o parameter_results.txt
API / GraphQL Exploration
Kiterunner
kr scan https://api.target.com -w /usr/share/kiterunner/routes-large.kite -o api_routes.txt
httpie
http GET https://<host>/api/v1/users Authorization:'Bearer <token>'
inql
inql -t https://<host>/graphql -o inql-schema.json
Cataloging Possible Exploits
Record interesting endpoints/collections here (no techniques in this section).
notes (Markdown)
cat > hypotheses.md <<'EOF'
Endpoint:
Role/Context:
Assumption:
Test idea:
Potential impact:
Proof plan:
EOF
Vulnerability Testing
Look for login forms, parameterized URLs, APIs, search fields, etc.
High-Priority Vulnerabilities
CSRF Testing
cat live_websites.txt | gf csrf | tee csrf_endpoints.txt
LFI Testing
cat live_websites.txt | gf lfi | qsreplace "/etc/passwd" | xargs -I@ curl -s @ | grep "root:x:" > lfi_results.txt
RCE Testing
curl -X POST -F "file=@exploit.php" https://target.com/upload
SQLi Testing
ghauri -u "https://target.com?id=1" --dbs --batch
Sensitive Data Search
cat js_files.txt | grep -Ei "key|token|auth|password" > sensitive_data.txt
Open Redirect Test
cat urls.txt | grep "=http" | qsreplace "https://evil.com" | xargs -I@ curl -I -s @ | grep "evil.com"
HTTP PoC
curl
curl -i -H 'Authorization: Bearer <token>' https://<host>/api/v1/me
HTTPie
http GET https://<host>/api/v1/me Authorization:'Bearer <token>'
Burp Suite (Repeater/Intruder)
GUI: Send requests to Repeater; save raw req/resp for the report.
AuthZ / AuthN Testing (Burp)
Autorize (extension)
GUI: Compare privileged vs unprivileged tokens to spot IDOR/missing checks.
AuthMatrix (extension)
GUI: Define roles; batch-test the same request across sessions/tokens.
ParamMiner (extension)
GUI: Discover hidden parameters that may unlock additional behavior.
Concurrency / Rate-Limit PoC
Turbo Intruder (Burp extension)
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint, concurrentConnections=10, requestsPerConnection=5)
for i in range(0, 50):
engine.queue(target.req, target.baseInput)
def handleResponse(req, interesting):
pass
OAST / Out-of-Band PoC
interactsh-client
interactsh-client -o oast.txt
# Use provided callback URL in your PoC and monitor oast.txt for hits
GraphQL PoC
curl
curl -s https://<host>/graphql -H 'Content-Type: application/json' \
-d '{"query":"query{__schema{types{name}}}"}' | jq .
inql
inql -t https://<host>/graphql -o inql-schema.json
File-Upload PoC (safe)
curl (multipart/form-data)
curl -s -X POST https://<host>/upload -F 'file=@test.jpg;type=image/jpeg' -i
Evidence Capture (attach to report)
Save raw requests/responses
curl
curl -v https://<host>/api/v1/me 2>&1 | tee poc-raw.txt
HTTPie
http --print=HhBb GET https://<host>/api/v1/me > poc-raw-httpie.txt
Record minimal demo
OBS / ffmpeg
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0+0,0 -t 00:01:00 poc-demo.mp4
Screenshots
Flameshot
flameshot gui -p ./screenshots
Reporting
Report Structure
- Executive Summary
- Target Scope
- Testing Timeline
- Key Findings Summary
- Risk Ratings
- Technical Details
- Vulnerability Title
- Severity Rating
- Affected Components
- Technical Description
- Steps to Reproduce
- Impact Analysis
- Supporting Evidence (POC)
- Remediation
- Detailed Recommendations
- Mitigation Steps
- Additional Security Controls
- References & Resources
- Supporting Materials
- Video Demonstrations
- Screenshots & Annotations
- HTTP Request/Response Logs
- Code Snippets
- Timeline of Discovery
Best Practices
- Write clear, concise descriptions
- Include detailed reproduction steps
- Provide actionable remediation advice
- Support findings with evidence
- Use professional formatting
- Highlight business impact
- Include verification steps
Report Format
# Vulnerability Report: [Title]
## Overview
- Severity: [Critical/High/Medium/Low]
- CVSS Score: [Score]
- Affected Component: [Component]
## Description
[Detailed technical description]
## Steps to Reproduce
1. [Step 1]
2. [Step 2]
3. [Step n...]
## Impact
[Business and technical impact]
## Proof of Concept
[Screenshots, videos, code]
## Recommendations
[Detailed fix recommendations]
## References
[CVE, CWE, related resources]
Export
Pandoc (Markdown → PDF)
pandoc report.md -o report.pdf