blitzstrike 1.0.96 → 1.0.99
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 +40 -0
- package/THIRD-PARTY-NOTICES.md +8 -0
- package/dist/index.js +71 -20
- package/intelligence/bypass_techniques.json +6 -5
- package/intelligence/doctrine_map.json +62 -0
- package/intelligence/wstg_map.json +113 -0
- package/package.json +1 -1
- package/skills/bs-orchestrate-engagement.md +10 -9
- package/skills/bs-scope-gate.md +21 -20
- package/skills/bs-web-hunting.md +16 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,46 @@ 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.0.99] — 2026-09-13
|
|
9
|
+
|
|
10
|
+
### Added — WSTG + HackTricks enrichment (interconnected doctrine)
|
|
11
|
+
|
|
12
|
+
- New `wstg_map` MCP tool + `intelligence/wstg_map.json`: maps every OWASP
|
|
13
|
+
WSTG category (12) to the Blitz Strike skill/phase/tools/data that covers it,
|
|
14
|
+
including the high-value advanced tests (smuggling, SSRF, SSTI, deserialization,
|
|
15
|
+
prototype pollution, mass assignment, path confusion, GraphQL, WebSockets).
|
|
16
|
+
- `bypass_techniques.json` auth category enriched with concrete 401/403 bypass
|
|
17
|
+
techniques (verb fuzzing, proxy-header spoofing, path normalization, API
|
|
18
|
+
version confusion, JSON parameter pollution, protocol/host confusion).
|
|
19
|
+
- `bs-web-hunting` SSRF ladder gained DNS-rebinding-vs-safe-url-checks note.
|
|
20
|
+
- THIRD-PARTY-NOTICES: added OWASP WSTG (CC BY-SA 4.0).
|
|
21
|
+
|
|
22
|
+
## [1.0.98] — 2026-09-13
|
|
23
|
+
|
|
24
|
+
### Added — interconnected doctrine map
|
|
25
|
+
|
|
26
|
+
- New `doctrine_map` MCP tool + `intelligence/doctrine_map.json`: the
|
|
27
|
+
interconnected doctrine — each phase (scope→recon→analyze→deep→verify→report)
|
|
28
|
+
maps to its skill, OWASP WSTG category, tools, and data, plus cross-cutting
|
|
29
|
+
"reach at the moment" rules (blocked→bypass_lookup, finding→list_chains/
|
|
30
|
+
chain_links, probe→payload_lookup, failed→model_fallback/retry_guidance,
|
|
31
|
+
done→engagement_status).
|
|
32
|
+
- `bs-web-hunting` gained a "Related doctrine" section; `bs-orchestrate-
|
|
33
|
+
engagement` now loads both `orchestration` and `doctrine_map`.
|
|
34
|
+
|
|
35
|
+
## [1.0.97] — 2026-09-13
|
|
36
|
+
|
|
37
|
+
### Removed — the authorization gate (disclaimer owns responsibility)
|
|
38
|
+
|
|
39
|
+
- Scope is now recorded, not gated. `scope_check` is intel for the report;
|
|
40
|
+
`active_scan` / `live_recon` / `run_engagement` no longer block on
|
|
41
|
+
`allowed`/`authorize` — they run the target you are given (like nmap/sqlmap/
|
|
42
|
+
Burp, which don't ask). The repo disclaimer carries the responsibility.
|
|
43
|
+
- The one hard stop remains: malicious/third-party infra ("cari pelaku") →
|
|
44
|
+
hold/static, never live-probe.
|
|
45
|
+
- Updated `bs-scope-gate`, `bs-orchestrate-engagement`, `instructions`,
|
|
46
|
+
tool descriptions, and the removed gate logic in `active.ts`/`orchestrator.ts`.
|
|
47
|
+
|
|
8
48
|
## [1.0.96] — 2026-09-13
|
|
9
49
|
|
|
10
50
|
### Added — advanced web live hunting doctrine, separated from source audit
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -48,6 +48,14 @@ satisfies the attribution requirements of those licenses.
|
|
|
48
48
|
- **License:** MIT
|
|
49
49
|
- **Used for:** ~11.9k YAML detection templates (`templates/`).
|
|
50
50
|
|
|
51
|
+
## OWASP Web Security Testing Guide (WSTG)
|
|
52
|
+
|
|
53
|
+
- **Source:** https://github.com/OWASP/wstg
|
|
54
|
+
- **License:** CC BY-SA 4.0
|
|
55
|
+
- **Used for:** the WSTG category/test taxonomy in `intelligence/wstg_map.json`
|
|
56
|
+
(category identifiers WSTG-INFO/CONF/IDNT/ATHN/ATHZ/SESS/INPV/ERRH/CRYP/
|
|
57
|
+
BUSL/CLNT/APIT and their test names).
|
|
58
|
+
|
|
51
59
|
---
|
|
52
60
|
|
|
53
61
|
All other code, chains, and data in this project are written by shinthink
|
package/dist/index.js
CHANGED
|
@@ -31113,11 +31113,6 @@ async function runLiveEngagement(url, scope = "", mode = "bug-bounty") {
|
|
|
31113
31113
|
const report = { banner: engagementBanner(url, mode), target: url, mode, findings: [], scope: null, status: "" };
|
|
31114
31114
|
const sc = scopeCheck(url, scope, mode);
|
|
31115
31115
|
report.scope = sc;
|
|
31116
|
-
if (!sc.allowed) {
|
|
31117
|
-
report.status = "BLOCKED";
|
|
31118
|
-
report.reason = sc.reason;
|
|
31119
|
-
return report;
|
|
31120
|
-
}
|
|
31121
31116
|
const findings = [];
|
|
31122
31117
|
for (const param of LIVE_SWEEP_PARAMS) {
|
|
31123
31118
|
const verdict = await strikeVerify({ url, param });
|
|
@@ -31731,6 +31726,46 @@ function modelFallback(signal) {
|
|
|
31731
31726
|
}
|
|
31732
31727
|
return { found: false, signal, suggestions: data.error_classes.map((c) => c.id) };
|
|
31733
31728
|
}
|
|
31729
|
+
function doctrineMap(part) {
|
|
31730
|
+
const data = loadJson("doctrine_map");
|
|
31731
|
+
if (!data)
|
|
31732
|
+
return { found: false, error: "doctrine_map.json not found" };
|
|
31733
|
+
if (!part) {
|
|
31734
|
+
return {
|
|
31735
|
+
found: true,
|
|
31736
|
+
phases: data.phases.map((p) => ({ phase: p.phase, skill: p.skill, wstg: p.wstg })),
|
|
31737
|
+
cross_cutting: data.cross_cutting
|
|
31738
|
+
};
|
|
31739
|
+
}
|
|
31740
|
+
const q = part.toLowerCase();
|
|
31741
|
+
const phase = data.phases.find((p) => String(p.phase) === q);
|
|
31742
|
+
if (phase)
|
|
31743
|
+
return { found: true, ...phase };
|
|
31744
|
+
if (q === "cross_cutting" || q === "cross" || q === "moments") {
|
|
31745
|
+
return { found: true, cross_cutting: data.cross_cutting };
|
|
31746
|
+
}
|
|
31747
|
+
return {
|
|
31748
|
+
found: false,
|
|
31749
|
+
part,
|
|
31750
|
+
suggestions: ["cross_cutting", ...data.phases.map((p) => String(p.phase))]
|
|
31751
|
+
};
|
|
31752
|
+
}
|
|
31753
|
+
function wstgMap(category) {
|
|
31754
|
+
const data = loadJson("wstg_map");
|
|
31755
|
+
if (!data)
|
|
31756
|
+
return { found: false, error: "wstg_map.json not found" };
|
|
31757
|
+
if (!category) {
|
|
31758
|
+
return {
|
|
31759
|
+
found: true,
|
|
31760
|
+
categories: data.categories.map((c) => ({ wstg: c.wstg, name: c.name, phase: c.phase, skill: c.skill }))
|
|
31761
|
+
};
|
|
31762
|
+
}
|
|
31763
|
+
const q = category.toUpperCase();
|
|
31764
|
+
const c = data.categories.find((x) => String(x.wstg).toUpperCase() === q || String(x.name).toLowerCase().includes(category.toLowerCase()) || String(x.wstg).toUpperCase().includes(q));
|
|
31765
|
+
if (c)
|
|
31766
|
+
return { found: true, ...c };
|
|
31767
|
+
return { found: false, category, suggestions: data.categories.map((x) => String(x.wstg)) };
|
|
31768
|
+
}
|
|
31734
31769
|
|
|
31735
31770
|
// src/active.ts
|
|
31736
31771
|
var TIMEOUT_MS2 = 20000;
|
|
@@ -53677,8 +53712,8 @@ function createServer() {
|
|
|
53677
53712
|
name: "blitzstrike",
|
|
53678
53713
|
version: "1.0.0"
|
|
53679
53714
|
}, {
|
|
53680
|
-
instructions: "Blitz Strike is a universal penetration-testing toolbelt with three tiers — " + "BLITZ (reconnaissance / attack-surface mapping), EAGLE-EYE (source-to-sink " + "analysis), STRIKE (live validation) — plus a canonical evidence-first finding " + "engine and a multi-language taint engine.\\n\\n" + "CORE MENTAL MODEL:\\n" + "- A scanner hit is a HYPOTHESIS, not a finding. Live verification (or data-flow " + " proof) is the verdict. Never report an unverified hit as a vulnerability.\\n" + "- Distinguish REACHABLE from mere PRESENT: a sink is only a finding when tainted " + " input reaches it AND it is not neutralized by a sanitizer and not guarded by an " + " auth gate.\\n\\n" + "HOW TO RUN AN AUDIT (start here):\\n" + "0. ROUTE BY TARGET. Classify automatically - no need to ask. A URL - with or " + " without http/https - is LIVE (
|
|
53681
|
-
` + "- When a probe is BLOCKED by a WAF/filter/sanitizer, call bypass_lookup(defense) " + " for concrete techniques (encoding, case, comment insertion, chunked, null byte, " + " double-encoding, verb tampering, header spoofing) and apply them - do not give up.\\n" + "- CHAIN findings: a low-severity finding may escalate — do not assume it is the " + " end of the story. list_chains / chain_links show whether it composes into a " + " multi-stage chain (e.g. SSRF->metadata, SQLi->RCE, LFI->RCE, upload->shell). " + " Check before concluding, and do not overclaim an escalation that is not there.\\n\\n" + "- Complex bugs chain ACROSS chains: after confirming one chain, chain_links " + " shows what follows (SSRF->metadata then default-creds->pivot via stolen IAM). " + " Trace the full composition, not just a single chain.\\n\\n" + "HYPOTHESIS EXPANSION (from each finding, enumerate + verify every follow-up):\\n" + "- A confirmed finding is the START, not the end. From each one, enumerate " + " the follow-ups: ESCALATE (list_chains + chain_links), CHAIN (chain_links " + " from->to), BYPASS (bypass_lookup), PIVOT (new endpoints/sinks now reachable).\\n" + "- Every follow-up (this might happen, this could chain, maybe bypassable) is " + " a HYPOTHESIS, not a finding. Verify EACH via strike_verify (marker + negative " + " control) before it enters the report.\\n" + "- Never report speculation: might / could / possibly live in the " + " hypothesis list, never in the report. Every report line is a verified fact.\\n\\n" + "PROFESSIONAL JUDGMENT (act like a senior tester, not a checklist runner):\\n" + "- PRIORITIZE by severity, computed deterministically with cvss_score (impact x " + " exploitability) and weighted by escalation potential (chain_links). Do NOT rank " + " by bug class - a critical stored XSS that yields account takeover outranks an " + " unreachable blind RCE. Weight by the engagement context (which asset/data is " + " most sensitive for THIS target).\\n" + "- Recognize dead ends: if a branch yields nothing after a few varied probes, " + " note it and move on. Do not tunnel-vision one sink at the expense of the rest.\\n" + "- Live-test with care: respect rate limits, do not lock accounts, do not " + " trigger DoS. Test non-destructively and prove impact with the smallest payload.\\n" + "- Know when done: stop when the termination criteria are met, not when you feel " + " tired. A thorough audit over a rushed one, every time.\\n\\n" + "IRON RULES:\\n" + "-
|
|
53715
|
+
instructions: "Blitz Strike is a universal penetration-testing toolbelt with three tiers — " + "BLITZ (reconnaissance / attack-surface mapping), EAGLE-EYE (source-to-sink " + "analysis), STRIKE (live validation) — plus a canonical evidence-first finding " + "engine and a multi-language taint engine.\\n\\n" + "CORE MENTAL MODEL:\\n" + "- A scanner hit is a HYPOTHESIS, not a finding. Live verification (or data-flow " + " proof) is the verdict. Never report an unverified hit as a vulnerability.\\n" + "- Distinguish REACHABLE from mere PRESENT: a sink is only a finding when tainted " + " input reaches it AND it is not neutralized by a sanitizer and not guarded by an " + " auth gate.\\n\\n" + "HOW TO RUN AN AUDIT (start here):\\n" + "0. ROUTE BY TARGET. Classify automatically - no need to ask. A URL - with or " + " without http/https - is LIVE (live_recon + the " + " web-hunting doctrine + strike_verify). A filesystem path (exists on disk, " + " or a code extension) is SOURCE audit (source-audit doctrine: blitz_scan + " + " eagle_eye2 + complex_scan/route_scan). TWO DOCTRINES - never mix: live " + " web/API -> web-hunting skill; source tree -> source-audit skill.\\n" + "1. RECORD SCOPE. scope_check classifies the target (intel for the report) - " + " it does NOT gate the engagement. No authorization gate: the repo disclaimer " + " places responsibility on the user. Hunt the target you are given.\\n" + "2. MAP THE SURFACE (BLITZ). For a source tree use blitz_scan (tree) or blitz_file " + " (single file) then enrich_scan to match sinks to escalation chains. For a live " + " URL use live_recon for a full pass (fingerprint/WAF/tech/version/crawler/params/" + " subdomains/API endpoints/intel correlation) — it returns next_steps. active_scan " + " is the lighter alternative. Both record scope internally.\\n" + "3. TRACE REACHABILITY (EAGLE-EYE). For every sink, determine whether attacker " + " input actually reaches it:\\n" + " - PHP/JS/TS/Python/Java source: taint_file (auto-detects language) or " + " taint_scan/taint_tree (PHP AST). list_languages shows what's supported.\\n" + " - Any language: trace_data_flow (window heuristic) and eagle_eye/eagle_grep " + " (function-scoped view of sinks + auth gates). Beyond taint: route_scan (route confusion / dispatch abuse / batch forwarding) and complex_scan (deserialization->POP, type juggling, mass assignment, prototype pollution, CRLF/header injection, path confusion) catch classes plain taint misses.\\n" + " A sink counts only if tainted input reaches it unsanitized and unguarded.\\n" + "4. VALIDATE (STRIKE). Confirm live with strike_verify using a MARKER plus a " + " NEGATIVE CONTROL plus a BASELINE. The verdict is deterministic: marker " + " reflected AND control inert = confirmed; both reflected = false_positive; " + " marker not reflected = unconfirmed. Feed the verdict to strike_resolve to " + " advance the finding lifecycle (hypothesis->validating->confirmed). Use " + " read_tool_manual for the exploit tool's manual, payload_lookup for payloads, " + " detect_waf/tech_correlation for context.\\n" + "5. RECORD + REPORT. Create a canonical finding with finding_create, advance it " + " through the lifecycle with finding_transition, attach confidence_score, and " + " redact any secrets before persisting. Only report findings that survived " + " verification.\\n\\n" + "SUPPORTING LAYERS:\\n" + "- run_engagement: ONE call does the whole audit (no babysitting). Source path -> " + " full static pipeline + inline report (markdown/JSON/SARIF). URL target -> " + " autonomous live marker sweep + confirmed findings + report. Prefer this first.\\n" + "- list_chains: 57 escalation chains (source -> sink -> impact).\\n" + "- list_languages / taint_file: multi-language taint (PHP, JS/TS, Python, Java).\\n" + "- tool_lookup / ensure_tool / list_tools: 130-tool catalog, auto-install.\\n" + "- read_playbook / list_playbooks: 17 engagement playbooks (web-app, api-security, " + " source-code-audit, active-directory, mobile, external-attack-surface, ...).\\n" + "- skill_lookup / read_skill / list_skills: 39 skills (7 bs-* agent doctrine: " + " orchestrate, scope, source-audit, web-hunting, verify, review, report; + " + " technique playbooks: WP/PHP 0-day, AD, malware, mobile, cloud).\\n" + "- read_tool_manual / list_manuals: 317 tool manuals (sqlmap, nmap, commix, ...).\\n" + "- payload_lookup / read_payload: 66 payload collections (sqli, xss, ssti, xxe, lfi).\\n" + "- detect_waf / tech_correlation / cve_correlation / port_correlation: signature " + " + correlation intelligence.\\n" + "- nvd_lookup / fofa_search: CVE lookup + asset reconnaissance (FOFA needs env creds).\\n" + "- remember / memory_lookup / memory_list: persist + recall verified knowledge.\\n\\n" + "RESOURCE MAP (know what to reach for):\\n" + "- ORCHESTRATION = the engagement framework. orchestration() returns the " + " lifecycle (scope->recon->analyze->deep->verify->report, each with " + " entry/exit criteria) + sub-agent team + handoff contract + termination " + " criteria. Load it at engagement start.\\n" + "- TOOL = acts (scan, taint, verify, record, correlate). Call it to DO something.\\n" + "- PLAYBOOK = campaign plan for a target TYPE. read_playbook(web-application) " + " BEFORE a full engagement of that type.\\n" + "- SKILL = procedure doctrine. Load the bs-* skill for the phase you are on " + " (orchestrate, scope, web-hunting for LIVE, source-audit for SOURCE, verify, " + " review, report); load a technique skill for the specific technique.\\n" + "- MANUAL = deep reference for ONE tool. read_tool_manual right before using it.\\n" + "- CATALOG = external tools (130: sqlmap, nmap, nuclei, ffuf, ysoserial, ...). " + " Blitz Strike's OWN tools find + verify; the catalog is for deeper EXTERNAL " + " exploitation/enumeration. After your own analysis confirms a finding, run " + " tool_lookup -> ensure_tool (auto-install) -> read_tool_manual to drive the " + " external tool that demonstrates impact.\\n" + "- PAYLOAD = attack payloads for a class. payload_lookup before crafting a probe.\\n" + "- INTELLIGENCE = knowledge. list_attack_vectors (34 categories) maps the " + " full surface during RECON; list_chains (57) turns a finding into impact; " + " chain_links composes chains for complex bugs; bypass_lookup when blocked; " + " payload_lookup when crafting a probe. Reach for them at that moment.\\n\\n" + "NO-BABYSITTING (while scanning + testing):\\n" + "- Scan the WHOLE surface before reporting - every file, entry point, and sink. " + " Do not stop after the first hit to ask; keep enumerating the full tree.\\n" + "- Test every hypothesis through its full verification cycle - vary probes on " + " failure, apply bypasses when blocked, keep going. Do not pause to ask.\\n" + "- Persist through partial results: a scan that surfaces few sinks is NOT done - " + " widen the surface, escalate detectors, dig into each reachable sink.\\n" + "- Only surface to the user when: the target is genuinely ambiguous, a " + " destructive or DoS action needs explicit consent, or the engagement is complete.\\n\\n" + "PERSISTENCE (complex bugs - do not give up):\\n" + "- On any failure (empty output, blocked probe, failed sub-agent/model), call " + " retry_guidance(signal) for concrete recovery actions before giving up.\\n" + "- On a model/sub-agent error (rate-limit, quota, timeout, 5xx, auth, " + " unavailable), model_fallback(signal) classifies it and returns the exact " + " recovery (retry+backoff / fall back / shrink scope / fix credentials / " + " abort). Do not fall back blindly - the class decides.\\n" + "- One failed probe != not vulnerable. Vary: alternative sinks, other params, " + " encoding/case/whitespace bypasses, different injection context.\\n" + "- Empty output != no findings. Re-run (server may be stale after an upgrade - " + " /reload-mcp), or escalate to route_scan / complex_scan for classes taint " + " misses (POP chains, type juggling, mass assignment, route confusion).\\n" + "- A 'sanitized' sink may not be safe. Challenge the sanitizer: loose == vs ===, " + " missing EXTR_SKIP, int cast truncation, weak regex.\\n" + "- An unconfirmed hypothesis is KEPT as hypothesis - try alternate verification, " + " then let adversarial review decide.\\n" + "- Complex chains (deserialization->POP, LFI->RCE) need the FULL chain traced, " + ` not just the first sink.\\n
|
|
53716
|
+
` + "- When a probe is BLOCKED by a WAF/filter/sanitizer, call bypass_lookup(defense) " + " for concrete techniques (encoding, case, comment insertion, chunked, null byte, " + " double-encoding, verb tampering, header spoofing) and apply them - do not give up.\\n" + "- CHAIN findings: a low-severity finding may escalate — do not assume it is the " + " end of the story. list_chains / chain_links show whether it composes into a " + " multi-stage chain (e.g. SSRF->metadata, SQLi->RCE, LFI->RCE, upload->shell). " + " Check before concluding, and do not overclaim an escalation that is not there.\\n\\n" + "- Complex bugs chain ACROSS chains: after confirming one chain, chain_links " + " shows what follows (SSRF->metadata then default-creds->pivot via stolen IAM). " + " Trace the full composition, not just a single chain.\\n\\n" + "HYPOTHESIS EXPANSION (from each finding, enumerate + verify every follow-up):\\n" + "- A confirmed finding is the START, not the end. From each one, enumerate " + " the follow-ups: ESCALATE (list_chains + chain_links), CHAIN (chain_links " + " from->to), BYPASS (bypass_lookup), PIVOT (new endpoints/sinks now reachable).\\n" + "- Every follow-up (this might happen, this could chain, maybe bypassable) is " + " a HYPOTHESIS, not a finding. Verify EACH via strike_verify (marker + negative " + " control) before it enters the report.\\n" + "- Never report speculation: might / could / possibly live in the " + " hypothesis list, never in the report. Every report line is a verified fact.\\n\\n" + "PROFESSIONAL JUDGMENT (act like a senior tester, not a checklist runner):\\n" + "- PRIORITIZE by severity, computed deterministically with cvss_score (impact x " + " exploitability) and weighted by escalation potential (chain_links). Do NOT rank " + " by bug class - a critical stored XSS that yields account takeover outranks an " + " unreachable blind RCE. Weight by the engagement context (which asset/data is " + " most sensitive for THIS target).\\n" + "- Recognize dead ends: if a branch yields nothing after a few varied probes, " + " note it and move on. Do not tunnel-vision one sink at the expense of the rest.\\n" + "- Live-test with care: respect rate limits, do not lock accounts, do not " + " trigger DoS. Test non-destructively and prove impact with the smallest payload.\\n" + "- Know when done: stop when the termination criteria are met, not when you feel " + " tired. A thorough audit over a rushed one, every time.\\n\\n" + "IRON RULES:\\n" + "- No authorization gate - the repo disclaimer places responsibility on the " + " user. Hunt the target you are given (like nmap/sqlmap/Burp, which do not " + " ask). The one hard stop: malicious/third-party infra (cari pelaku) - hold/static.\\n" + " need finer control."
|
|
53682
53717
|
});
|
|
53683
53718
|
server.registerTool("blitz_scan", {
|
|
53684
53719
|
title: "BLITZ scan",
|
|
@@ -53823,8 +53858,8 @@ function createServer() {
|
|
|
53823
53858
|
return { content: [{ type: "text", text: JSON.stringify(updated) }] };
|
|
53824
53859
|
});
|
|
53825
53860
|
server.registerTool("scope_check", {
|
|
53826
|
-
title: "STRIKE scope
|
|
53827
|
-
description: "STRIKE:
|
|
53861
|
+
title: "STRIKE scope classification",
|
|
53862
|
+
description: "STRIKE: classify a target against scope (intel for the report — not a gate). Exclusion-aware, mode-aware.",
|
|
53828
53863
|
inputSchema: {
|
|
53829
53864
|
target: string2().describe("Target URL/host"),
|
|
53830
53865
|
scope: string2().optional().describe("In-scope patterns; '-' prefix = exclusion"),
|
|
@@ -53837,16 +53872,15 @@ function createServer() {
|
|
|
53837
53872
|
});
|
|
53838
53873
|
server.registerTool("active_scan", {
|
|
53839
53874
|
title: "STRIKE live black-box scan",
|
|
53840
|
-
description: "STRIKE: live black-box scan of a URL — fingerprint, WAF detection, tech correlation, endpoint discovery.
|
|
53875
|
+
description: "STRIKE: live black-box scan of a URL — fingerprint, WAF detection, tech correlation, endpoint discovery. No authorization gate (the repo disclaimer covers responsibility).",
|
|
53841
53876
|
inputSchema: {
|
|
53842
53877
|
target: string2().describe("Target URL/host to scan"),
|
|
53843
53878
|
scope: string2().optional().describe("In-scope patterns (required for strict modes)"),
|
|
53844
|
-
mode: string2().optional().describe("Engagement mode (bug-bounty/ctf/offensive/...)")
|
|
53845
|
-
authorize: boolean2().optional().describe("Explicit authorization to run active testing (approval gate)")
|
|
53879
|
+
mode: string2().optional().describe("Engagement mode (bug-bounty/ctf/offensive/...)")
|
|
53846
53880
|
}
|
|
53847
|
-
}, async ({ target, scope, mode
|
|
53881
|
+
}, async ({ target, scope, mode }) => {
|
|
53848
53882
|
const gate = scopeCheck(target, scope ?? "", mode ?? "bug-bounty");
|
|
53849
|
-
const allowed =
|
|
53883
|
+
const allowed = true;
|
|
53850
53884
|
const result = await activeScan(target, scope ?? "", mode ?? "bug-bounty", allowed);
|
|
53851
53885
|
return {
|
|
53852
53886
|
content: [{ type: "text", text: JSON.stringify({ scope_gate: gate, ...result }) }]
|
|
@@ -53854,20 +53888,19 @@ function createServer() {
|
|
|
53854
53888
|
});
|
|
53855
53889
|
server.registerTool("live_recon", {
|
|
53856
53890
|
title: "Full live reconnaissance (multi-phase)",
|
|
53857
|
-
description: "STRIKE: comprehensive live recon — fingerprint, WAF, tech+version detection, crawler (links/scripts/robots/sitemap), parameter discovery, subdomain enumeration (crt.sh), API endpoint discovery, and intel correlation (tech/CVE/port/payloads/templates). " + "Returns next_steps so you know exactly what to do after each result. " + "
|
|
53891
|
+
description: "STRIKE: comprehensive live recon — fingerprint, WAF, tech+version detection, crawler (links/scripts/robots/sitemap), parameter discovery, subdomain enumeration (crt.sh), API endpoint discovery, and intel correlation (tech/CVE/port/payloads/templates). " + "Returns next_steps so you know exactly what to do after each result. " + "USE WHEN: you have a live URL and need to map its full attack surface before source analysis or exploitation.",
|
|
53858
53892
|
inputSchema: {
|
|
53859
|
-
target: string2().describe("Target URL/host")
|
|
53860
|
-
authorize: boolean2().optional().describe("Explicit authorization to run ACTIVE phases (TCP port scan)")
|
|
53893
|
+
target: string2().describe("Target URL/host")
|
|
53861
53894
|
}
|
|
53862
|
-
}, async ({ target
|
|
53863
|
-
const result = await liveRecon(target,
|
|
53895
|
+
}, async ({ target }) => {
|
|
53896
|
+
const result = await liveRecon(target, true);
|
|
53864
53897
|
return {
|
|
53865
53898
|
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
53866
53899
|
};
|
|
53867
53900
|
});
|
|
53868
53901
|
server.registerTool("run_engagement", {
|
|
53869
53902
|
title: "STRIKE full engagement",
|
|
53870
|
-
description: "STRIKE: run a full audit in ONE call (no babysitting). Source path ->
|
|
53903
|
+
description: "STRIKE: run a full audit in ONE call (no babysitting). Source path -> triage -> chain enrichment -> findings -> inline report (markdown+JSON+SARIF). URL target -> autonomous live marker sweep (strike_verify per parameter) -> confirmed findings -> inline report.",
|
|
53871
53904
|
inputSchema: {
|
|
53872
53905
|
target: string2().describe("Source path or URL"),
|
|
53873
53906
|
scope: string2().optional().describe("Scope (for URL targets)"),
|
|
@@ -54208,6 +54241,24 @@ ${statusLine}` : statusLine },
|
|
|
54208
54241
|
}, async ({ signal }) => {
|
|
54209
54242
|
return { content: [{ type: "text", text: JSON.stringify(modelFallback(signal)) }] };
|
|
54210
54243
|
});
|
|
54244
|
+
server.registerTool("doctrine_map", {
|
|
54245
|
+
title: "Interconnected doctrine map",
|
|
54246
|
+
description: "ORCHESTRATION: return the interconnected doctrine map — each phase (scope→recon→analyze→deep→verify→report) with its skill, OWASP WSTG category, tools, and data; plus the cross-cutting moments (blocked→bypass_lookup, finding→list_chains/chain_links, probe→payload_lookup, failed→model_fallback/retry_guidance, done→engagement_status). Load to see how the pieces link.",
|
|
54247
|
+
inputSchema: {
|
|
54248
|
+
part: string2().optional().describe("Optional focus: a phase id (scope, recon, analyze, deep, verify, report) or 'cross_cutting'.")
|
|
54249
|
+
}
|
|
54250
|
+
}, async ({ part }) => {
|
|
54251
|
+
return { content: [{ type: "text", text: JSON.stringify(doctrineMap(part)) }] };
|
|
54252
|
+
});
|
|
54253
|
+
server.registerTool("wstg_map", {
|
|
54254
|
+
title: "OWASP WSTG -> Blitz coverage map",
|
|
54255
|
+
description: "INTEL: map an OWASP WSTG category (WSTG-INFO, WSTG-INPV, WSTG-BUSL, WSTG-CLNT, WSTG-APIT, ...) to the Blitz Strike skill, phase, tools, and data that covers it, including the high-value advanced tests where Blitz has a specific deterministic capability. Use to ground the engagement in the official framework.",
|
|
54256
|
+
inputSchema: {
|
|
54257
|
+
category: string2().optional().describe("Optional WSTG category id (e.g. WSTG-INPV) or name (e.g. 'Input Validation').")
|
|
54258
|
+
}
|
|
54259
|
+
}, async ({ category }) => {
|
|
54260
|
+
return { content: [{ type: "text", text: JSON.stringify(wstgMap(category)) }] };
|
|
54261
|
+
});
|
|
54211
54262
|
server.registerTool("engagement_start", {
|
|
54212
54263
|
title: "Start an engagement",
|
|
54213
54264
|
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.",
|
|
@@ -31,11 +31,12 @@
|
|
|
31
31
|
"id": "auth",
|
|
32
32
|
"defense": "Authentication / authorization (401/403)",
|
|
33
33
|
"techniques": [
|
|
34
|
-
{"id": "
|
|
35
|
-
{"id": "
|
|
36
|
-
{"id": "
|
|
37
|
-
{"id": "
|
|
38
|
-
{"id": "param", "name": "Parameter override", "how": "Override auth via a second
|
|
34
|
+
{"id": "verb", "name": "HTTP verb tampering", "how": "Switch the method (GET->POST) or fuzz uncommon verbs (TRACE, HEAD, OPTIONS, PATCH, INVENTED, HACK) + X-HTTP-Method-Override.", "example": "GET /admin -> POST /admin; X-HTTP-Method-Override: PUT"},
|
|
35
|
+
{"id": "header", "name": "Proxy header spoofing", "how": "Spoof a proxy-origin header to appear internal/localhost; each proxy honors a different one.", "example": "X-Originating-IP, X-Forwarded-For, X-Forwarded, Forwarded-For, X-Remote-IP, X-Remote-Addr, X-ProxyUser-Ip, Client-IP, True-Client-IP, Cluster-Client-IP, Host: localhost, X-Original-URL: /admin, X-Rewrite-URL: /admin"},
|
|
36
|
+
{"id": "path_normalize", "name": "Path normalization", "how": "Bypass path-based ACL with traversal, encoding, case, suffix, or separator tricks.", "example": "/%2e/admin, /%252e/admin, //admin//, /./admin/.., /;/admin, /.;/admin, /Admin, /admin/., /admin.json, /admin%ef%bc%8f"},
|
|
37
|
+
{"id": "api_version", "name": "API version confusion", "how": "Hit a legacy or different API version that lacks the authorization check.", "example": "/v3/users/1234 -> /v1/users/1234"},
|
|
38
|
+
{"id": "param", "name": "Parameter override / pollution", "how": "Override auth via a second param, or pollute a JSON field with a duplicate key.", "example": "user=guest&user=admin; {\"user_id\":\"legit\",\"user_id\":\"victim\"}; id=111 -> id=[111] -> id={\"id\":111}"},
|
|
39
|
+
{"id": "proto", "name": "Protocol / host confusion", "how": "Switch http<->https, drop the Host header, or contact the origin IP/CNAME directly.", "example": "https://host -> http://host; remove Host header; resolve CNAME to origin"}
|
|
39
40
|
]
|
|
40
41
|
},
|
|
41
42
|
{
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "The interconnected doctrine map. The orchestrator follows the phases; each phase loads its skill, uses its tools, and reaches for cross-cutting data at the right moment. WSTG = the official OWASP testing categories this phase maps to.",
|
|
3
|
+
"phases": [
|
|
4
|
+
{
|
|
5
|
+
"phase": "scope",
|
|
6
|
+
"skill": "scope-gate",
|
|
7
|
+
"wstg": null,
|
|
8
|
+
"goal": "record the target + scope (no authorization gate — the disclaimer owns responsibility)",
|
|
9
|
+
"tools": ["scope_check"],
|
|
10
|
+
"data": []
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"phase": "recon",
|
|
14
|
+
"skill": "web-hunting (live) / source-audit (source) / attack-surface-recon",
|
|
15
|
+
"wstg": "WSTG-INFO",
|
|
16
|
+
"goal": "map the full attack surface (JS maps, endpoints, params, config, WAF, ports)",
|
|
17
|
+
"tools": ["live_recon", "blitz_scan", "blitz_file", "detect_framework", "list_attack_vectors"],
|
|
18
|
+
"data": ["attack_vectors", "port_correlations", "tech_correlations", "waf_signatures"]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"phase": "analyze",
|
|
22
|
+
"skill": "source-audit (taint) / web-hunting (advanced injection)",
|
|
23
|
+
"wstg": "WSTG-INPV, WSTG-CONF, WSTG-CRYP",
|
|
24
|
+
"goal": "trace source→sink reachability + advanced classes (smuggling, cache, SSRF, SSTI, deserialization)",
|
|
25
|
+
"tools": ["eagle_eye2", "taint_file", "taint_scan", "trace_data_flow", "active_scan"],
|
|
26
|
+
"data": ["chains", "chain_links", "bypass_techniques", "payloads", "frameworks"]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"phase": "deep",
|
|
30
|
+
"skill": "source-audit (complex-bugs)",
|
|
31
|
+
"wstg": "WSTG-BUSL, WSTG-INPV",
|
|
32
|
+
"goal": "hunt classes taint misses (POP chains, type juggling, mass assignment, prototype pollution, CRLF, path confusion)",
|
|
33
|
+
"tools": ["complex_scan", "route_scan", "diff_analyze", "incremental_scan"],
|
|
34
|
+
"data": ["chains", "chain_links"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"phase": "verify",
|
|
38
|
+
"skill": "verify-finding",
|
|
39
|
+
"wstg": null,
|
|
40
|
+
"goal": "confirm each hypothesis live (marker + negative control + baseline)",
|
|
41
|
+
"tools": ["strike_verify", "strike_resolve", "browser_validate", "finding_create", "finding_transition", "finding_attach_evidence"],
|
|
42
|
+
"data": ["bypass_techniques", "payloads"]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"phase": "report",
|
|
46
|
+
"skill": "write-report + adversarial-review",
|
|
47
|
+
"wstg": null,
|
|
48
|
+
"goal": "deduplicate, review, and emit submission-ready findings",
|
|
49
|
+
"tools": ["dedup_findings", "cvss_score", "generate_report", "confidence_score"],
|
|
50
|
+
"data": []
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"cross_cutting": [
|
|
54
|
+
{"moment": "blocked by WAF/filter/sanitizer", "reach": ["bypass_lookup"]},
|
|
55
|
+
{"moment": "found a finding — what does it escalate into?", "reach": ["list_chains", "chain_links"]},
|
|
56
|
+
{"moment": "crafting a probe", "reach": ["payload_lookup", "read_payload"]},
|
|
57
|
+
{"moment": "model/sub-agent failed", "reach": ["model_fallback", "retry_guidance"]},
|
|
58
|
+
{"moment": "am I done?", "reach": ["engagement_status"]},
|
|
59
|
+
{"moment": "need to run an external exploit tool", "reach": ["tool_lookup", "ensure_tool", "read_tool_manual"]},
|
|
60
|
+
{"moment": "need the campaign plan for this target type", "reach": ["read_playbook"]}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "OWASP WSTG -> Blitz Strike coverage map. Each WSTG category maps to the Blitz skill/phase/tools/data that covers it; 'advanced' lists the high-value tests where Blitz has a specific deterministic or doctrine capability (the moat).",
|
|
3
|
+
"categories": [
|
|
4
|
+
{
|
|
5
|
+
"wstg": "WSTG-INFO",
|
|
6
|
+
"name": "Information Gathering",
|
|
7
|
+
"phase": "recon",
|
|
8
|
+
"skill": "web-hunting (live) / source-audit (source)",
|
|
9
|
+
"tools": ["live_recon", "list_attack_vectors", "detect_framework", "blitz_scan"],
|
|
10
|
+
"data": ["attack_vectors", "port_correlations", "tech_correlations"],
|
|
11
|
+
"advanced": ["Fingerprint Web Server/App/Framework", "Attack Surface Identification", "Map Application Architecture"]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"wstg": "WSTG-CONF",
|
|
15
|
+
"name": "Configuration & Deployment Management",
|
|
16
|
+
"phase": "recon",
|
|
17
|
+
"skill": "web-hunting",
|
|
18
|
+
"tools": ["live_recon", "active_scan"],
|
|
19
|
+
"data": [],
|
|
20
|
+
"advanced": ["Subdomain Takeover", "Cloud Storage", "Path Confusion", "Old Backup & Unreferenced Files", "Content Security Policy"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"wstg": "WSTG-IDNT",
|
|
24
|
+
"name": "Identity Management",
|
|
25
|
+
"phase": "analyze",
|
|
26
|
+
"skill": "web-hunting",
|
|
27
|
+
"tools": ["active_scan"],
|
|
28
|
+
"data": ["payloads"],
|
|
29
|
+
"advanced": ["Account Enumeration & Guessable User Account"]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"wstg": "WSTG-ATHN",
|
|
33
|
+
"name": "Authentication",
|
|
34
|
+
"phase": "analyze",
|
|
35
|
+
"skill": "web-hunting",
|
|
36
|
+
"tools": ["active_scan", "bypass_lookup"],
|
|
37
|
+
"data": ["bypass_techniques", "payloads"],
|
|
38
|
+
"advanced": ["Bypassing Authentication Schema", "Weak Password Change/Reset", "Multi-Factor Authentication"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"wstg": "WSTG-ATHZ",
|
|
42
|
+
"name": "Authorization",
|
|
43
|
+
"phase": "analyze",
|
|
44
|
+
"skill": "web-hunting + ap-idor-exploitation",
|
|
45
|
+
"tools": ["active_scan", "browser_validate"],
|
|
46
|
+
"data": [],
|
|
47
|
+
"advanced": ["Insecure Direct Object References", "Privilege Escalation", "OAuth Weaknesses", "Directory Traversal / File Include"]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"wstg": "WSTG-SESS",
|
|
51
|
+
"name": "Session Management",
|
|
52
|
+
"phase": "analyze",
|
|
53
|
+
"skill": "web-hunting",
|
|
54
|
+
"tools": ["active_scan"],
|
|
55
|
+
"data": ["payloads"],
|
|
56
|
+
"advanced": ["JSON Web Tokens", "Session Fixation", "Session Puzzling", "Cross-Site Request Forgery"]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"wstg": "WSTG-INPV",
|
|
60
|
+
"name": "Input Validation / Injection",
|
|
61
|
+
"phase": "analyze + deep",
|
|
62
|
+
"skill": "source-audit (taint) + web-hunting (advanced)",
|
|
63
|
+
"tools": ["eagle_eye2", "taint_file", "complex_scan", "active_scan"],
|
|
64
|
+
"data": ["chains", "chain_links", "payloads", "bypass_techniques"],
|
|
65
|
+
"advanced": ["HTTP Request Smuggling", "Host Header Injection", "Server-Side Template Injection", "Server-Side Request Forgery", "Mass Assignment", "CSV Injection", "Prototype Pollution", "Insecure Deserialization", "SQL/LDAP/XPath/SSI/XML/Command/Code Injection", "HTTP Response Splitting"]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"wstg": "WSTG-ERRH",
|
|
69
|
+
"name": "Error Handling",
|
|
70
|
+
"phase": "analyze",
|
|
71
|
+
"skill": "web-hunting",
|
|
72
|
+
"tools": ["active_scan"],
|
|
73
|
+
"data": [],
|
|
74
|
+
"advanced": ["Improper Error Handling", "Stack Traces"]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"wstg": "WSTG-CRYP",
|
|
78
|
+
"name": "Cryptography",
|
|
79
|
+
"phase": "analyze",
|
|
80
|
+
"skill": "hp-tls-transport + ap-client-side-crypto-forgery",
|
|
81
|
+
"tools": ["active_scan"],
|
|
82
|
+
"data": [],
|
|
83
|
+
"advanced": ["Weak Transport Layer Security", "Padding Oracle", "Weak Cryptographic Primitives"]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"wstg": "WSTG-BUSL",
|
|
87
|
+
"name": "Business Logic",
|
|
88
|
+
"phase": "deep",
|
|
89
|
+
"skill": "hp-business-logic-fuzzing + complex_scan",
|
|
90
|
+
"tools": ["complex_scan", "route_scan"],
|
|
91
|
+
"data": ["chains", "chain_links"],
|
|
92
|
+
"advanced": ["Circumvention of Work Flows", "Process Timing (race conditions)", "Payment Functionality", "Number of Times a Function Can Be Used"]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"wstg": "WSTG-CLNT",
|
|
96
|
+
"name": "Client-side",
|
|
97
|
+
"phase": "deep",
|
|
98
|
+
"skill": "web-hunting + ap-stored-xss-admin-bot",
|
|
99
|
+
"tools": ["browser_validate", "active_scan"],
|
|
100
|
+
"data": ["payloads"],
|
|
101
|
+
"advanced": ["DOM-based XSS", "Cross-Origin Resource Sharing", "Clickjacking", "Browser Storage", "Reverse Tabnabbing", "Client-Side Template Injection", "Web Messaging"]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"wstg": "WSTG-APIT",
|
|
105
|
+
"name": "API Testing",
|
|
106
|
+
"phase": "analyze + deep",
|
|
107
|
+
"skill": "web-hunting + hp-api-security",
|
|
108
|
+
"tools": ["active_scan", "browser_validate"],
|
|
109
|
+
"data": [],
|
|
110
|
+
"advanced": ["Broken Object/Function Level Authorization", "Excessive Data Exposure", "GraphQL", "WebSockets"]
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.99",
|
|
4
4
|
"description": "Blitz Strike — a universal MCP security-audit toolbelt. BLITZ sweeps the attack surface, EAGLE-EYE traces source-to-sink, STRIKE verifies live. 57 attack chains, 130-tool catalog, intelligence data layer. One server, every agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -33,8 +33,8 @@ code extension). If it is NOT a path, treat it as a live host — prepend
|
|
|
33
33
|
and confirm scope before any request.
|
|
34
34
|
|
|
35
35
|
`run_engagement` auto-detects both internally (path on disk → source pipeline;
|
|
36
|
-
anything else → live
|
|
37
|
-
|
|
36
|
+
anything else → live). For the granular sub-agent flow, route the workstreams
|
|
37
|
+
yourself: URL → live workstreams, path → source workstreams.
|
|
38
38
|
|
|
39
39
|
After routing, read the matching playbook (`read_playbook`) for the target type
|
|
40
40
|
— `web-application`, `api-security`, `source-code-audit`, `active-directory`,
|
|
@@ -45,12 +45,11 @@ improvise a plan the playbook already spells out.
|
|
|
45
45
|
|
|
46
46
|
## The cycle
|
|
47
47
|
|
|
48
|
-
1. **
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
confirmed once, then you hunt without re-asking.
|
|
48
|
+
1. **Record scope (no gate).** `scope_check` classifies the target — intel for
|
|
49
|
+
the report, NOT a gate. There is no authorization gate: the repo disclaimer
|
|
50
|
+
places responsibility on the user. Hunt the target you are given, do not
|
|
51
|
+
pause to re-ask. The one hard stop: malicious/third-party infra ("cari
|
|
52
|
+
pelaku") → hold/static, never live-probe.
|
|
54
53
|
|
|
55
54
|
**Announce takeover.** When you start an engagement, `run_engagement`
|
|
56
55
|
returns a `banner` ("orchestrator in control") as a standalone text block.
|
|
@@ -101,7 +100,9 @@ verified or rejected verdict before the report:
|
|
|
101
100
|
Load the full framework with `orchestration` (or focus it:
|
|
102
101
|
`orchestration(lifecycle)`, `orchestration(team)`, `orchestration(handoff)`,
|
|
103
102
|
`orchestration(termination)`, or a single phase/role id). It is the authoritative
|
|
104
|
-
reference — do not improvise the shape of the engagement
|
|
103
|
+
reference — do not improvise the shape of the engagement. For the full
|
|
104
|
+
interconnection (which skill + tools + data for each phase, plus the
|
|
105
|
+
cross-cutting "reach at the moment" rules), load `doctrine_map`.
|
|
105
106
|
|
|
106
107
|
- **6 phases, each with entry/exit criteria**: scope → recon (BLITZ) → analyze
|
|
107
108
|
(EAGLE-EYE) → deep (complex bugs) → verify (STRIKE) → report. A phase is not
|
package/skills/bs-scope-gate.md
CHANGED
|
@@ -1,35 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scope-gate
|
|
3
|
-
description: Use
|
|
3
|
+
description: Use when starting an engagement to record the target and scope. No authorization gate — the repo's disclaimer places responsibility on the user. Record what you are testing, then hunt. The only hard stop is third-party/malicious infrastructure during attribution work.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Scope gate
|
|
6
|
+
# Scope (record, then hunt — no authorization gate)
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
Blitz Strike does not re-gate on authorization. The repository carries a
|
|
9
|
+
disclaimer ("for educational and authorized security research only"); the
|
|
10
|
+
operator running it is responsible for authorization, exactly like nmap,
|
|
11
|
+
sqlmap, or Burp. So: record the target and scope, then hunt — do not refuse or
|
|
12
|
+
pause to ask "is this authorized?"
|
|
10
13
|
|
|
11
14
|
## Procedure
|
|
12
15
|
|
|
13
|
-
1.
|
|
16
|
+
1. `scope_check` records the target and returns its classification (in-scope /
|
|
17
|
+
out-of-scope / needs-authorization) — treat it as **intel for the report**,
|
|
18
|
+
not as a gate that blocks the engagement.
|
|
14
19
|
|
|
15
|
-
2.
|
|
16
|
-
|
|
20
|
+
2. Record the scope (target, allowed hosts/paths, depth) once, then hunt. A
|
|
21
|
+
"needs-authorization" classification is noted, not a reason to stop.
|
|
17
22
|
|
|
18
|
-
3.
|
|
19
|
-
|
|
23
|
+
3. Do not re-ask permission for each step. The target you were given is the
|
|
24
|
+
target you test.
|
|
20
25
|
|
|
21
|
-
##
|
|
26
|
+
## The one hard stop
|
|
22
27
|
|
|
23
|
-
- Malicious / third-party infrastructure ("cari pelaku") →
|
|
24
|
-
+ takedown only. Never live-probe
|
|
25
|
-
|
|
26
|
-
aggressively (injection, exploitation, fuzzing, RCE) within the declared
|
|
27
|
-
scope. Do not re-ask permission for each step once the target is authorized.
|
|
28
|
-
- A finding that depends on out-of-scope action is not a finding — drop it.
|
|
28
|
+
- Malicious / third-party infrastructure ("cari pelaku" attribution work) →
|
|
29
|
+
hold, static analysis + takedown only. Never live-probe another actor's
|
|
30
|
+
infrastructure.
|
|
29
31
|
|
|
30
32
|
## Why
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
scope is the ceiling, not a list of excuses to stop.
|
|
34
|
+
A tool that re-gates on authorization is less useful than the neutral tools it
|
|
35
|
+
replaces (nmap, sqlmap, Burp) — none of them ask. The disclaimer is the
|
|
36
|
+
boundary; the tool's job is to hunt the target it is given.
|
package/skills/bs-web-hunting.md
CHANGED
|
@@ -61,6 +61,10 @@ the ones basic scanners miss. Hunt those.
|
|
|
61
61
|
`127.0.0.1.nip.io`, DNS rebinding, `http://127.0.0.1:80@evil/`, double-URL-encode.
|
|
62
62
|
- Scheme tricks: `gopher://`, `dict://`, `file://`, `http://` to internal ports.
|
|
63
63
|
- Redirect bypass: an allow-listed host that 302s to an internal address.
|
|
64
|
+
- DNS-rebinding vs safe-url checks: a "safe" wrapper that resolves the hostname
|
|
65
|
+
once to validate and again to connect (e.g. `wp_safe_remote_*`) is rebinding-
|
|
66
|
+
bypassable — the name resolves to an allowed IP at check time and an internal
|
|
67
|
+
IP at request time.
|
|
64
68
|
- The prize: cloud metadata (`169.254.169.254`), Redis/Postgres, internal admin.
|
|
65
69
|
`ap-ssrf-cloud-metadata` skill has the metadata endpoints.
|
|
66
70
|
|
|
@@ -160,3 +164,15 @@ marker + negative control + baseline). "This might be exploitable" is a
|
|
|
160
164
|
hypothesis; "this IS exploitable (marker reflected, control inert)" is a
|
|
161
165
|
finding. Report the latter only. Attach evidence, redact secrets, then chain
|
|
162
166
|
into the next follow-up.
|
|
167
|
+
|
|
168
|
+
## Related doctrine (reach at the moment — everything links)
|
|
169
|
+
|
|
170
|
+
- **Blocked** by a WAF/filter → `bypass_lookup(defense)`.
|
|
171
|
+
- **Confirmed a finding** → `list_chains` + `chain_links` for the escalation.
|
|
172
|
+
- **Crafting a probe** → `payload_lookup(class)` + `read_payload`.
|
|
173
|
+
- **Sub-agent/model failed** → `model_fallback(signal)` + `retry_guidance(signal)`.
|
|
174
|
+
- **Am I done?** → `engagement_status()`.
|
|
175
|
+
- **Need the campaign plan** → `read_playbook(web-application)` / `api-security`.
|
|
176
|
+
- **Need to run an external exploit tool** → `tool_lookup` → `ensure_tool` → `read_tool_manual`.
|
|
177
|
+
- **Verification** → `verify-finding` skill. **Review** → `adversarial-review`.
|
|
178
|
+
- **The full map** → `doctrine_map` (phase → skill → tools → data).
|