blitzstrike 2.4.73 → 2.4.74
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 +15 -0
- package/dist/index.js +54 -22
- package/package.json +1 -1
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.74] — 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Fixed — live_recon tech fingerprint false-positive (benchmark-driven)
|
|
11
|
+
|
|
12
|
+
- Tech detection now uses header + cookie signals FIRST (authoritative), then
|
|
13
|
+
body regex as fallback, via a new `detectTech(headers, body)`:
|
|
14
|
+
- `x-powered-by: Express` / `connect.sid` cookie → nodejs (was missed).
|
|
15
|
+
- `laravel_session` / `XSRF-TOKEN` cookie → laravel.
|
|
16
|
+
- `PHPSESSID` → php, `csrftoken`+`sessionid` → django, `rack.session` → rails.
|
|
17
|
+
- Removed the over-broad `_token` / `csrf-token` → laravel body signature (those
|
|
18
|
+
are generic CSRF tokens, present in Node/Express apps too) — this caused the
|
|
19
|
+
Hackbot Arena labs03 (Node/Express) to be mis-flagged as "laravel".
|
|
20
|
+
- `gunicorn` no longer implies "flask" (it's a generic WSGI server shared by
|
|
21
|
+
Flask/Django/FastAPI); only `werkzeug` maps to flask.
|
|
22
|
+
|
|
8
23
|
## [2.4.73] — 2026-09-17
|
|
9
24
|
|
|
10
25
|
### Changed — crack_hash wordlist support (benchmark-driven fix)
|
package/dist/index.js
CHANGED
|
@@ -35884,6 +35884,59 @@ function extractVersion(headers, body) {
|
|
|
35884
35884
|
}
|
|
35885
35885
|
return out;
|
|
35886
35886
|
}
|
|
35887
|
+
function detectTech(headers, body) {
|
|
35888
|
+
const techs = new Set;
|
|
35889
|
+
const low = (s) => (s ?? "").toLowerCase();
|
|
35890
|
+
const powered = low(headers["x-powered-by"]);
|
|
35891
|
+
const server = low(headers["server"]);
|
|
35892
|
+
const cookies = low(headers["set-cookie"]);
|
|
35893
|
+
const generator = low(headers["x-generator"]);
|
|
35894
|
+
if (/express|node\b|nodejs/i.test(powered))
|
|
35895
|
+
techs.add("nodejs");
|
|
35896
|
+
if (/^php\b|^php\//i.test(powered))
|
|
35897
|
+
techs.add("php");
|
|
35898
|
+
if (/asp\.net/i.test(powered) || (headers["x-aspnet-version"] ?? ""))
|
|
35899
|
+
techs.add("aspnet");
|
|
35900
|
+
if (/werkzeug/i.test(server))
|
|
35901
|
+
techs.add("flask");
|
|
35902
|
+
if (/drupal/i.test(generator))
|
|
35903
|
+
techs.add("drupal");
|
|
35904
|
+
if (/laravel_session|xsrf-token/i.test(cookies))
|
|
35905
|
+
techs.add("laravel");
|
|
35906
|
+
if (/phpsessid/i.test(cookies))
|
|
35907
|
+
techs.add("php");
|
|
35908
|
+
if (/connect\.sid/i.test(cookies))
|
|
35909
|
+
techs.add("nodejs");
|
|
35910
|
+
if (/csrftoken/i.test(cookies) && /sessionid/i.test(cookies))
|
|
35911
|
+
techs.add("django");
|
|
35912
|
+
if (/rack\.session/i.test(cookies))
|
|
35913
|
+
techs.add("rails");
|
|
35914
|
+
const bodySig = [
|
|
35915
|
+
[/wp-content|wp-includes|wp-json/i, "wordpress"],
|
|
35916
|
+
[/wp-login\.php|wp-admin/i, "wordpress"],
|
|
35917
|
+
[/powered by joomla|com_content/i, "joomla"],
|
|
35918
|
+
[/laravel_session|xsrf-token|\blaravel\b/i, "laravel"],
|
|
35919
|
+
[/react|__NEXT_DATA__|next\/static/i, "nextjs"],
|
|
35920
|
+
[/angular|ng-version/i, "angular"],
|
|
35921
|
+
[/vue|__vue__|v-data/i, "vue"],
|
|
35922
|
+
[/django|csrftoken|__debug__/i, "django"],
|
|
35923
|
+
[/ruby on rails|rails/i, "rails"],
|
|
35924
|
+
[/asp\.net|__VIEWSTATE|__EVENTVALIDATION/i, "aspnet"],
|
|
35925
|
+
[/phpBB|phpbb/i, "phpbb"],
|
|
35926
|
+
[/mybb|mybb/i, "mybb"],
|
|
35927
|
+
[/drupal|Drupal\.settings/i, "drupal"],
|
|
35928
|
+
[/magento|Mage\./i, "magento"],
|
|
35929
|
+
[/shopify|cdn\.shopify/i, "shopify"],
|
|
35930
|
+
[/grafana|kibana|elastic/i, "grafana-kibana"],
|
|
35931
|
+
[/node\.js|express/i, "nodejs"],
|
|
35932
|
+
[/flask|werkzeug/i, "flask"],
|
|
35933
|
+
[/spring|actuator/i, "spring"]
|
|
35934
|
+
];
|
|
35935
|
+
for (const [re, t] of bodySig)
|
|
35936
|
+
if (re.test(body))
|
|
35937
|
+
techs.add(t);
|
|
35938
|
+
return [...techs];
|
|
35939
|
+
}
|
|
35887
35940
|
function correlateIntel(techs, versionList, portList) {
|
|
35888
35941
|
const tech = techs.map((t) => ({ tech: t, ...techCorrelation(t) }));
|
|
35889
35942
|
const versions = versionList.map((v) => ({
|
|
@@ -35919,28 +35972,7 @@ async function liveRecon(target, includeActive = false) {
|
|
|
35919
35972
|
body_size: root.body.length
|
|
35920
35973
|
};
|
|
35921
35974
|
const waf = detectWaf(root.headers, root.body);
|
|
35922
|
-
const
|
|
35923
|
-
[/wp-content|wp-includes|wp-json/i, "wordpress"],
|
|
35924
|
-
[/wp-login\.php|wp-admin/i, "wordpress"],
|
|
35925
|
-
[/powered by joomla|com_content/i, "joomla"],
|
|
35926
|
-
[/laravel|_token|csrf-token/i, "laravel"],
|
|
35927
|
-
[/react|__NEXT_DATA__|next\/static/i, "nextjs"],
|
|
35928
|
-
[/angular|ng-version/i, "angular"],
|
|
35929
|
-
[/vue|__vue__|v-data/i, "vue"],
|
|
35930
|
-
[/django|csrftoken|__debug__/i, "django"],
|
|
35931
|
-
[/ruby on rails|rails/i, "rails"],
|
|
35932
|
-
[/asp\.net|__VIEWSTATE|__EVENTVALIDATION/i, "aspnet"],
|
|
35933
|
-
[/phpBB|phpbb/i, "phpbb"],
|
|
35934
|
-
[/mybb|mybb/i, "mybb"],
|
|
35935
|
-
[/drupal|Drupal\.settings/i, "drupal"],
|
|
35936
|
-
[/magento|Mage\./i, "magento"],
|
|
35937
|
-
[/shopify|cdn\.shopify/i, "shopify"],
|
|
35938
|
-
[/grafana|kibana|elastic/i, "grafana-kibana"],
|
|
35939
|
-
[/node\.js|express/i, "nodejs"],
|
|
35940
|
-
[/flask|werkzeug/i, "flask"],
|
|
35941
|
-
[/spring|actuator/i, "spring"]
|
|
35942
|
-
];
|
|
35943
|
-
const techs = [...new Set(techSig.filter(([re]) => re.test(root.body)).map(([, t]) => t))];
|
|
35975
|
+
const techs = detectTech(root.headers, root.body);
|
|
35944
35976
|
const versions = extractVersion(root.headers, root.body);
|
|
35945
35977
|
const { links, scripts } = crawlLinks(base, root.body);
|
|
35946
35978
|
const { robots, sitemap } = await fetchRobotsAndSitemap(base);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.74",
|
|
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": {
|