fingerprint-mcp 0.1.0
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/LICENSE +663 -0
- package/README.ar.md +767 -0
- package/README.bn.md +767 -0
- package/README.bs.md +767 -0
- package/README.da.md +767 -0
- package/README.de.md +770 -0
- package/README.el.md +767 -0
- package/README.es.md +769 -0
- package/README.fr.md +769 -0
- package/README.hi.md +767 -0
- package/README.it.md +767 -0
- package/README.ja.md +767 -0
- package/README.ko.md +772 -0
- package/README.md +767 -0
- package/README.no.md +767 -0
- package/README.pl.md +767 -0
- package/README.pt-BR.md +767 -0
- package/README.ru.md +767 -0
- package/README.th.md +767 -0
- package/README.tr.md +767 -0
- package/README.uk.md +767 -0
- package/README.vi.md +767 -0
- package/README.zh-TW.md +768 -0
- package/README.zh.md +768 -0
- package/dist/app/index.d.ts +3 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +614 -0
- package/dist/app/index.js.map +1 -0
- package/dist/composite/analyze.d.ts +3 -0
- package/dist/composite/analyze.d.ts.map +1 -0
- package/dist/composite/analyze.js +59 -0
- package/dist/composite/analyze.js.map +1 -0
- package/dist/composite/correlate.d.ts +3 -0
- package/dist/composite/correlate.d.ts.map +1 -0
- package/dist/composite/correlate.js +184 -0
- package/dist/composite/correlate.js.map +1 -0
- package/dist/composite/enumerate.d.ts +3 -0
- package/dist/composite/enumerate.d.ts.map +1 -0
- package/dist/composite/enumerate.js +94 -0
- package/dist/composite/enumerate.js.map +1 -0
- package/dist/composite/helpers.d.ts +22 -0
- package/dist/composite/helpers.d.ts.map +1 -0
- package/dist/composite/helpers.js +111 -0
- package/dist/composite/helpers.js.map +1 -0
- package/dist/composite/index.d.ts +3 -0
- package/dist/composite/index.d.ts.map +1 -0
- package/dist/composite/index.js +29 -0
- package/dist/composite/index.js.map +1 -0
- package/dist/composite/meta.d.ts +3 -0
- package/dist/composite/meta.d.ts.map +1 -0
- package/dist/composite/meta.js +23 -0
- package/dist/composite/meta.js.map +1 -0
- package/dist/composite/osint.d.ts +3 -0
- package/dist/composite/osint.d.ts.map +1 -0
- package/dist/composite/osint.js +40 -0
- package/dist/composite/osint.js.map +1 -0
- package/dist/composite/recon.d.ts +3 -0
- package/dist/composite/recon.d.ts.map +1 -0
- package/dist/composite/recon.js +131 -0
- package/dist/composite/recon.js.map +1 -0
- package/dist/composite/scan-dns.d.ts +3 -0
- package/dist/composite/scan-dns.d.ts.map +1 -0
- package/dist/composite/scan-dns.js +44 -0
- package/dist/composite/scan-dns.js.map +1 -0
- package/dist/composite/scan-http.d.ts +3 -0
- package/dist/composite/scan-http.d.ts.map +1 -0
- package/dist/composite/scan-http.js +68 -0
- package/dist/composite/scan-http.js.map +1 -0
- package/dist/composite/scan-paths.d.ts +3 -0
- package/dist/composite/scan-paths.d.ts.map +1 -0
- package/dist/composite/scan-paths.js +32 -0
- package/dist/composite/scan-paths.js.map +1 -0
- package/dist/composite/scan-ports.d.ts +3 -0
- package/dist/composite/scan-ports.d.ts.map +1 -0
- package/dist/composite/scan-ports.js +79 -0
- package/dist/composite/scan-ports.js.map +1 -0
- package/dist/composite/scan-services.d.ts +3 -0
- package/dist/composite/scan-services.d.ts.map +1 -0
- package/dist/composite/scan-services.js +111 -0
- package/dist/composite/scan-services.js.map +1 -0
- package/dist/composite/scan-tls.d.ts +3 -0
- package/dist/composite/scan-tls.d.ts.map +1 -0
- package/dist/composite/scan-tls.js +32 -0
- package/dist/composite/scan-tls.js.map +1 -0
- package/dist/composite/scan-waf.d.ts +3 -0
- package/dist/composite/scan-waf.d.ts.map +1 -0
- package/dist/composite/scan-waf.js +35 -0
- package/dist/composite/scan-waf.js.map +1 -0
- package/dist/correlation/index.d.ts +3 -0
- package/dist/correlation/index.d.ts.map +1 -0
- package/dist/correlation/index.js +1044 -0
- package/dist/correlation/index.js.map +1 -0
- package/dist/data/analytics-patterns.d.ts +21 -0
- package/dist/data/analytics-patterns.d.ts.map +1 -0
- package/dist/data/analytics-patterns.js +449 -0
- package/dist/data/analytics-patterns.js.map +1 -0
- package/dist/data/app-signatures.d.ts +52 -0
- package/dist/data/app-signatures.d.ts.map +1 -0
- package/dist/data/app-signatures.js +1143 -0
- package/dist/data/app-signatures.js.map +1 -0
- package/dist/data/c2-signatures.d.ts +54 -0
- package/dist/data/c2-signatures.d.ts.map +1 -0
- package/dist/data/c2-signatures.js +256 -0
- package/dist/data/c2-signatures.js.map +1 -0
- package/dist/data/cloud-ranges.d.ts +34 -0
- package/dist/data/cloud-ranges.d.ts.map +1 -0
- package/dist/data/cloud-ranges.js +628 -0
- package/dist/data/cloud-ranges.js.map +1 -0
- package/dist/data/cookie-patterns.d.ts +28 -0
- package/dist/data/cookie-patterns.d.ts.map +1 -0
- package/dist/data/cookie-patterns.js +225 -0
- package/dist/data/cookie-patterns.js.map +1 -0
- package/dist/data/error-signatures.d.ts +19 -0
- package/dist/data/error-signatures.d.ts.map +1 -0
- package/dist/data/error-signatures.js +321 -0
- package/dist/data/error-signatures.js.map +1 -0
- package/dist/data/favicon-hashes.d.ts +25 -0
- package/dist/data/favicon-hashes.d.ts.map +1 -0
- package/dist/data/favicon-hashes.js +249 -0
- package/dist/data/favicon-hashes.js.map +1 -0
- package/dist/data/h2-signatures.d.ts +50 -0
- package/dist/data/h2-signatures.d.ts.map +1 -0
- package/dist/data/h2-signatures.js +211 -0
- package/dist/data/h2-signatures.js.map +1 -0
- package/dist/data/header-order.d.ts +38 -0
- package/dist/data/header-order.d.ts.map +1 -0
- package/dist/data/header-order.js +185 -0
- package/dist/data/header-order.js.map +1 -0
- package/dist/data/jarm-signatures.d.ts +25 -0
- package/dist/data/jarm-signatures.d.ts.map +1 -0
- package/dist/data/jarm-signatures.js +213 -0
- package/dist/data/jarm-signatures.js.map +1 -0
- package/dist/data/saas-patterns.d.ts +23 -0
- package/dist/data/saas-patterns.d.ts.map +1 -0
- package/dist/data/saas-patterns.js +139 -0
- package/dist/data/saas-patterns.js.map +1 -0
- package/dist/data/sensitive-paths.d.ts +12 -0
- package/dist/data/sensitive-paths.d.ts.map +1 -0
- package/dist/data/sensitive-paths.js +1539 -0
- package/dist/data/sensitive-paths.js.map +1 -0
- package/dist/data/service-banners.d.ts +59 -0
- package/dist/data/service-banners.d.ts.map +1 -0
- package/dist/data/service-banners.js +323 -0
- package/dist/data/service-banners.js.map +1 -0
- package/dist/data/smtp-signatures.d.ts +12 -0
- package/dist/data/smtp-signatures.d.ts.map +1 -0
- package/dist/data/smtp-signatures.js +350 -0
- package/dist/data/smtp-signatures.js.map +1 -0
- package/dist/data/takeover-patterns.d.ts +37 -0
- package/dist/data/takeover-patterns.d.ts.map +1 -0
- package/dist/data/takeover-patterns.js +249 -0
- package/dist/data/takeover-patterns.js.map +1 -0
- package/dist/data/tech-patterns.d.ts +44 -0
- package/dist/data/tech-patterns.d.ts.map +1 -0
- package/dist/data/tech-patterns.js +690 -0
- package/dist/data/tech-patterns.js.map +1 -0
- package/dist/data/waf-signatures.d.ts +21 -0
- package/dist/data/waf-signatures.d.ts.map +1 -0
- package/dist/data/waf-signatures.js +318 -0
- package/dist/data/waf-signatures.js.map +1 -0
- package/dist/dns/index.d.ts +3 -0
- package/dist/dns/index.d.ts.map +1 -0
- package/dist/dns/index.js +1067 -0
- package/dist/dns/index.js.map +1 -0
- package/dist/enum/index.d.ts +3 -0
- package/dist/enum/index.d.ts.map +1 -0
- package/dist/enum/index.js +818 -0
- package/dist/enum/index.js.map +1 -0
- package/dist/h2/index.d.ts +3 -0
- package/dist/h2/index.d.ts.map +1 -0
- package/dist/h2/index.js +414 -0
- package/dist/h2/index.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +2444 -0
- package/dist/http/index.js.map +1 -0
- package/dist/identify/index.d.ts +3 -0
- package/dist/identify/index.d.ts.map +1 -0
- package/dist/identify/index.js +447 -0
- package/dist/identify/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/index.d.ts +3 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +989 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/iot/index.d.ts +3 -0
- package/dist/iot/index.d.ts.map +1 -0
- package/dist/iot/index.js +610 -0
- package/dist/iot/index.js.map +1 -0
- package/dist/meta/index.d.ts +3 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +442 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/osint/index.d.ts +3 -0
- package/dist/osint/index.d.ts.map +1 -0
- package/dist/osint/index.js +687 -0
- package/dist/osint/index.js.map +1 -0
- package/dist/passive/index.d.ts +3 -0
- package/dist/passive/index.d.ts.map +1 -0
- package/dist/passive/index.js +944 -0
- package/dist/passive/index.js.map +1 -0
- package/dist/path/index.d.ts +3 -0
- package/dist/path/index.d.ts.map +1 -0
- package/dist/path/index.js +878 -0
- package/dist/path/index.js.map +1 -0
- package/dist/protocol/mcp-server.d.ts +4 -0
- package/dist/protocol/mcp-server.d.ts.map +1 -0
- package/dist/protocol/mcp-server.js +32 -0
- package/dist/protocol/mcp-server.js.map +1 -0
- package/dist/protocol/tools.d.ts +3 -0
- package/dist/protocol/tools.d.ts.map +1 -0
- package/dist/protocol/tools.js +5 -0
- package/dist/protocol/tools.js.map +1 -0
- package/dist/service/index.d.ts +3 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +1053 -0
- package/dist/service/index.js.map +1 -0
- package/dist/smtp/index.d.ts +3 -0
- package/dist/smtp/index.d.ts.map +1 -0
- package/dist/smtp/index.js +437 -0
- package/dist/smtp/index.js.map +1 -0
- package/dist/ssh/index.d.ts +3 -0
- package/dist/ssh/index.d.ts.map +1 -0
- package/dist/ssh/index.js +676 -0
- package/dist/ssh/index.js.map +1 -0
- package/dist/tcp/index.d.ts +3 -0
- package/dist/tcp/index.d.ts.map +1 -0
- package/dist/tcp/index.js +369 -0
- package/dist/tcp/index.js.map +1 -0
- package/dist/timing/index.d.ts +3 -0
- package/dist/timing/index.d.ts.map +1 -0
- package/dist/timing/index.js +425 -0
- package/dist/timing/index.js.map +1 -0
- package/dist/tls/index.d.ts +3 -0
- package/dist/tls/index.d.ts.map +1 -0
- package/dist/tls/index.js +1332 -0
- package/dist/tls/index.js.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cache.d.ts +11 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +35 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/murmurhash3.d.ts +3 -0
- package/dist/utils/murmurhash3.d.ts.map +1 -0
- package/dist/utils/murmurhash3.js +57 -0
- package/dist/utils/murmurhash3.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +10 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +35 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/require-key.d.ts +2 -0
- package/dist/utils/require-key.d.ts.map +1 -0
- package/dist/utils/require-key.js +8 -0
- package/dist/utils/require-key.js.map +1 -0
- package/dist/waf/index.d.ts +3 -0
- package/dist/waf/index.d.ts.map +1 -0
- package/dist/waf/index.js +767 -0
- package/dist/waf/index.js.map +1 -0
- package/dist/web/index.d.ts +3 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +1366 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callTool } from "./helpers.js";
|
|
3
|
+
export const analyzeTool = {
|
|
4
|
+
name: "analyze",
|
|
5
|
+
description: "Passive analysis of pre-collected data. No network calls. Supports three modes: headers (HTTP header fingerprinting), html (HTML source analysis), banner (service banner identification).",
|
|
6
|
+
schema: {
|
|
7
|
+
type: z
|
|
8
|
+
.enum(["headers", "html", "banner"])
|
|
9
|
+
.describe("Analysis type"),
|
|
10
|
+
headers: z
|
|
11
|
+
.record(z.string())
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("HTTP response headers (for type=headers)"),
|
|
14
|
+
html: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("HTML source code (for type=html)"),
|
|
18
|
+
banner: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Service banner string (for type=banner)"),
|
|
22
|
+
url: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("URL context for headers/html analysis"),
|
|
26
|
+
port: z
|
|
27
|
+
.number()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Port number context for banner analysis"),
|
|
30
|
+
},
|
|
31
|
+
async execute(args, ctx) {
|
|
32
|
+
const type = args.type;
|
|
33
|
+
const filteredArgs = {};
|
|
34
|
+
for (const [k, v] of Object.entries(args)) {
|
|
35
|
+
if (v !== undefined && k !== "type")
|
|
36
|
+
filteredArgs[k] = v;
|
|
37
|
+
}
|
|
38
|
+
let result;
|
|
39
|
+
switch (type) {
|
|
40
|
+
case "headers":
|
|
41
|
+
result = await callTool("fp_analyze_headers", { headers: args.headers, url: args.url }, ctx);
|
|
42
|
+
break;
|
|
43
|
+
case "html":
|
|
44
|
+
result = await callTool("fp_analyze_html", { html: args.html, url: args.url }, ctx);
|
|
45
|
+
break;
|
|
46
|
+
case "banner":
|
|
47
|
+
result = await callTool("fp_analyze_banner", { banner: args.banner, port: args.port }, ctx);
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
return {
|
|
51
|
+
content: [{ type: "text", text: JSON.stringify({ error: `Unknown analysis type: ${type}` }, null, 2) }],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/composite/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,SAAS;IACf,WAAW,EACT,4LAA4L;IAC9L,MAAM,EAAE;QACN,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;aACnC,QAAQ,CAAC,eAAe,CAAC;QAC5B,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,0CAA0C,CAAC;QACvD,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;QACtD,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uCAAuC,CAAC;QACpD,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;KACvD;IAED,KAAK,CAAC,OAAO,CACX,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;QAEjC,MAAM,YAAY,GAA4B,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,MAAM;gBAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,MAAM,CAAC;QAEX,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,MAAM,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC7F,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;gBACpF,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,GAAG,MAAM,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC5F,MAAM;YACR;gBACE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBACxG,CAAC;QACN,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlate.d.ts","sourceRoot":"","sources":["../../src/composite/correlate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,aAAa,EAAE,OA2N3B,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callTool } from "./helpers.js";
|
|
3
|
+
export const correlateTool = {
|
|
4
|
+
name: "correlate",
|
|
5
|
+
description: "Cross-layer correlation engine. Validates fingerprint consistency, detects honeypots, identifies spoofing, compares profiles, reconstructs infrastructure topology, detects C2 frameworks, and looks up fingerprint hashes.",
|
|
6
|
+
schema: {
|
|
7
|
+
type: z
|
|
8
|
+
.enum(["consistency", "honeypot", "spoofing", "compare", "topology", "c2", "identify"])
|
|
9
|
+
.describe("Correlation type"),
|
|
10
|
+
serverHeader: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Server header value"),
|
|
14
|
+
headerOrderHash: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Header order hash"),
|
|
18
|
+
tlsVersion: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("TLS version"),
|
|
22
|
+
errorSignature: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Error page signature"),
|
|
26
|
+
cookies: z
|
|
27
|
+
.array(z.string())
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Cookie names"),
|
|
30
|
+
sshBanner: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("SSH banner"),
|
|
34
|
+
jarm: z
|
|
35
|
+
.string()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("JARM hash"),
|
|
38
|
+
services: z
|
|
39
|
+
.array(z.object({
|
|
40
|
+
port: z.number(),
|
|
41
|
+
protocol: z.string(),
|
|
42
|
+
banner: z.string().optional(),
|
|
43
|
+
}))
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Detected services (for honeypot)"),
|
|
46
|
+
openPortCount: z
|
|
47
|
+
.number()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Total open ports (for honeypot)"),
|
|
50
|
+
sshAlgorithms: z
|
|
51
|
+
.array(z.string())
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("SSH algorithms"),
|
|
54
|
+
headerOrder: z
|
|
55
|
+
.array(z.string())
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("Header ordering (for spoofing)"),
|
|
58
|
+
hassh: z
|
|
59
|
+
.string()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("HASSH fingerprint"),
|
|
62
|
+
claimedVersion: z
|
|
63
|
+
.string()
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Claimed server version"),
|
|
66
|
+
profile1: z
|
|
67
|
+
.record(z.unknown())
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("First profile (for compare)"),
|
|
70
|
+
profile2: z
|
|
71
|
+
.record(z.unknown())
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Second profile (for compare)"),
|
|
74
|
+
cdnProvider: z
|
|
75
|
+
.string()
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("CDN provider (for topology)"),
|
|
78
|
+
originIp: z
|
|
79
|
+
.string()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("Origin IP (for topology)"),
|
|
82
|
+
lbCookies: z
|
|
83
|
+
.array(z.string())
|
|
84
|
+
.optional()
|
|
85
|
+
.describe("LB cookies (for topology)"),
|
|
86
|
+
certSans: z
|
|
87
|
+
.array(z.string())
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Certificate SANs (for topology)"),
|
|
90
|
+
dnsRecords: z
|
|
91
|
+
.record(z.unknown())
|
|
92
|
+
.optional()
|
|
93
|
+
.describe("DNS records (for topology)"),
|
|
94
|
+
internalHostnames: z
|
|
95
|
+
.array(z.string())
|
|
96
|
+
.optional()
|
|
97
|
+
.describe("Internal hostnames (for topology)"),
|
|
98
|
+
host: z
|
|
99
|
+
.string()
|
|
100
|
+
.optional()
|
|
101
|
+
.describe("Target host (for c2)"),
|
|
102
|
+
port: z
|
|
103
|
+
.number()
|
|
104
|
+
.optional()
|
|
105
|
+
.describe("Target port (for c2)"),
|
|
106
|
+
certCn: z
|
|
107
|
+
.string()
|
|
108
|
+
.optional()
|
|
109
|
+
.describe("Certificate CN (for c2)"),
|
|
110
|
+
certOrg: z
|
|
111
|
+
.string()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("Certificate Org (for c2)"),
|
|
114
|
+
certSelfSigned: z
|
|
115
|
+
.boolean()
|
|
116
|
+
.optional()
|
|
117
|
+
.describe("Self-signed cert (for c2)"),
|
|
118
|
+
certValidityDays: z
|
|
119
|
+
.number()
|
|
120
|
+
.optional()
|
|
121
|
+
.describe("Cert validity days (for c2)"),
|
|
122
|
+
responseTimingMs: z
|
|
123
|
+
.number()
|
|
124
|
+
.optional()
|
|
125
|
+
.describe("Response timing ms (for c2)"),
|
|
126
|
+
hash: z
|
|
127
|
+
.string()
|
|
128
|
+
.optional()
|
|
129
|
+
.describe("Fingerprint hash (for identify)"),
|
|
130
|
+
hashType: z
|
|
131
|
+
.enum(["jarm", "favicon", "hassh", "header_order"])
|
|
132
|
+
.optional()
|
|
133
|
+
.describe("Hash type (for identify)"),
|
|
134
|
+
},
|
|
135
|
+
async execute(args, ctx) {
|
|
136
|
+
const type = args.type;
|
|
137
|
+
const filter = (keys) => {
|
|
138
|
+
const filtered = {};
|
|
139
|
+
for (const k of keys) {
|
|
140
|
+
if (args[k] !== undefined)
|
|
141
|
+
filtered[k] = args[k];
|
|
142
|
+
}
|
|
143
|
+
return filtered;
|
|
144
|
+
};
|
|
145
|
+
let result;
|
|
146
|
+
switch (type) {
|
|
147
|
+
case "consistency":
|
|
148
|
+
result = await callTool("fp_correlate", filter(["serverHeader", "headerOrderHash", "tlsVersion", "errorSignature", "cookies", "sshBanner", "jarm"]), ctx);
|
|
149
|
+
break;
|
|
150
|
+
case "honeypot":
|
|
151
|
+
result = await callTool("fp_honeypot", filter(["services", "openPortCount", "sshBanner", "sshAlgorithms"]), ctx);
|
|
152
|
+
break;
|
|
153
|
+
case "spoofing":
|
|
154
|
+
result = await callTool("fp_spoofing", filter(["serverHeader", "headerOrder", "sshBanner", "hassh", "sshAlgorithms", "claimedVersion"]), ctx);
|
|
155
|
+
break;
|
|
156
|
+
case "compare":
|
|
157
|
+
result = await callTool("fp_compare", filter(["profile1", "profile2"]), ctx);
|
|
158
|
+
break;
|
|
159
|
+
case "topology":
|
|
160
|
+
result = await callTool("fp_topology", filter(["cdnProvider", "originIp", "lbCookies", "certSans", "dnsRecords", "serverHeader", "internalHostnames"]), ctx);
|
|
161
|
+
break;
|
|
162
|
+
case "c2":
|
|
163
|
+
result = await callTool("fp_c2_detect", filter(["host", "port", "jarm", "certCn", "certOrg", "certSelfSigned", "certValidityDays", "responseTimingMs"]), ctx);
|
|
164
|
+
break;
|
|
165
|
+
case "identify": {
|
|
166
|
+
const identifyArgs = {};
|
|
167
|
+
if (args.hash !== undefined)
|
|
168
|
+
identifyArgs.hash = args.hash;
|
|
169
|
+
if (args.hashType !== undefined)
|
|
170
|
+
identifyArgs.type = args.hashType;
|
|
171
|
+
result = await callTool("fp_identify", identifyArgs, ctx);
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
default:
|
|
175
|
+
return {
|
|
176
|
+
content: [{ type: "text", text: JSON.stringify({ error: `Unknown correlation type: ${type}` }, null, 2) }],
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=correlate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlate.js","sourceRoot":"","sources":["../../src/composite/correlate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enumerate.d.ts","sourceRoot":"","sources":["../../src/composite/enumerate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,aAAa,EAAE,OA4G3B,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
export const enumerateTool = {
|
|
4
|
+
name: "enumerate",
|
|
5
|
+
description: "Scope expansion: subdomain enumeration (SecurityTrails/HackerTarget), wildcard DNS detection, TLD/ccTLD expansion, related domain discovery via certificate transparency, ASN neighbor enumeration, passive DNS history, and attack surface summary. 8 techniques across 3 phases.",
|
|
6
|
+
schema: {
|
|
7
|
+
domain: z.string().describe("Target domain for scope expansion"),
|
|
8
|
+
},
|
|
9
|
+
async execute(args, ctx) {
|
|
10
|
+
const domain = args.domain;
|
|
11
|
+
const basename = domain.split(".")[0];
|
|
12
|
+
// ── Phase 1: parallel discovery (5 tools) ──
|
|
13
|
+
const phase1Results = await callToolsParallel([
|
|
14
|
+
{ name: "enum_subdomains", args: { domain } },
|
|
15
|
+
{ name: "enum_wildcard_detect", args: { domain } },
|
|
16
|
+
{ name: "enum_tld_expansion", args: { basename } },
|
|
17
|
+
{ name: "enum_related_domains", args: { domain } },
|
|
18
|
+
{ name: "tls_ct_subdomains", args: { domain } },
|
|
19
|
+
], ctx);
|
|
20
|
+
// ── Phase 2: parallel enrichment (2 tools) ──
|
|
21
|
+
const phase2Results = await callToolsParallel([
|
|
22
|
+
{ name: "enum_asn_neighbors", args: { target: domain } },
|
|
23
|
+
{ name: "enum_passive_dns", args: { domain } },
|
|
24
|
+
], ctx);
|
|
25
|
+
// ── Phase 3: scope summary ──
|
|
26
|
+
// Attempt to extract subdomains, IPs, and wildcard zones from phase 1
|
|
27
|
+
let subdomains = [];
|
|
28
|
+
let ips = [];
|
|
29
|
+
let wildcardZones = [];
|
|
30
|
+
try {
|
|
31
|
+
// Extract subdomains from enum_subdomains result
|
|
32
|
+
const enumSubResult = phase1Results.find((r) => r.tool === "enum_subdomains");
|
|
33
|
+
if (enumSubResult?.ok && enumSubResult.data && typeof enumSubResult.data === "object") {
|
|
34
|
+
const enumData = enumSubResult.data;
|
|
35
|
+
if (Array.isArray(enumData.subdomains)) {
|
|
36
|
+
subdomains = [...subdomains, ...enumData.subdomains];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Extract subdomains from CT log result
|
|
40
|
+
const ctResult = phase1Results.find((r) => r.tool === "tls_ct_subdomains");
|
|
41
|
+
if (ctResult?.ok && ctResult.data) {
|
|
42
|
+
const ctData = ctResult.data;
|
|
43
|
+
if (Array.isArray(ctData.subdomains)) {
|
|
44
|
+
subdomains = [...subdomains, ...ctData.subdomains];
|
|
45
|
+
}
|
|
46
|
+
else if (Array.isArray(ctData.domains)) {
|
|
47
|
+
subdomains = [...subdomains, ...ctData.domains];
|
|
48
|
+
}
|
|
49
|
+
else if (Array.isArray(ctData.results)) {
|
|
50
|
+
subdomains = [...subdomains, ...ctData.results];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Deduplicate subdomains
|
|
54
|
+
subdomains = [...new Set(subdomains)];
|
|
55
|
+
// Extract wildcard zones from wildcard detect result
|
|
56
|
+
const wildcardResult = phase1Results.find((r) => r.tool === "enum_wildcard_detect");
|
|
57
|
+
if (wildcardResult?.ok && wildcardResult.data && typeof wildcardResult.data === "object") {
|
|
58
|
+
const wcData = wildcardResult.data;
|
|
59
|
+
if (Array.isArray(wcData.wildcardZones)) {
|
|
60
|
+
wildcardZones = wcData.wildcardZones;
|
|
61
|
+
}
|
|
62
|
+
else if (Array.isArray(wcData.zones)) {
|
|
63
|
+
wildcardZones = wcData.zones;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Extract IPs from passive DNS if available
|
|
67
|
+
const passiveResult = phase2Results.find((r) => r.tool === "enum_passive_dns");
|
|
68
|
+
if (passiveResult?.ok && passiveResult.data && typeof passiveResult.data === "object") {
|
|
69
|
+
const pdData = passiveResult.data;
|
|
70
|
+
if (Array.isArray(pdData.ips)) {
|
|
71
|
+
ips = pdData.ips;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Extraction failed — call scope_summary with domain only
|
|
77
|
+
}
|
|
78
|
+
const summaryArgs = { domain };
|
|
79
|
+
if (subdomains.length > 0)
|
|
80
|
+
summaryArgs.subdomains = subdomains;
|
|
81
|
+
if (ips.length > 0)
|
|
82
|
+
summaryArgs.ips = ips;
|
|
83
|
+
if (wildcardZones.length > 0)
|
|
84
|
+
summaryArgs.wildcardZones = wildcardZones;
|
|
85
|
+
const phase3Result = await callToolsParallel([{ name: "enum_scope_summary", args: summaryArgs }], ctx);
|
|
86
|
+
// ── Combine all phases ──
|
|
87
|
+
return buildCompositeResponse("enumerate", [
|
|
88
|
+
...phase1Results,
|
|
89
|
+
...phase2Results,
|
|
90
|
+
...phase3Result,
|
|
91
|
+
]);
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=enumerate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enumerate.js","sourceRoot":"","sources":["../../src/composite/enumerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ToolDef, ToolContext, ToolResult } from "../types/index.js";
|
|
2
|
+
export declare const ALL_INDIVIDUAL: ToolDef[];
|
|
3
|
+
export interface SubToolResult {
|
|
4
|
+
tool: string;
|
|
5
|
+
ok: boolean;
|
|
6
|
+
data: unknown;
|
|
7
|
+
error?: string;
|
|
8
|
+
durationMs: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function callTool(name: string, args: Record<string, unknown>, ctx: ToolContext): Promise<SubToolResult>;
|
|
11
|
+
export declare function callToolsParallel(calls: Array<{
|
|
12
|
+
name: string;
|
|
13
|
+
args: Record<string, unknown>;
|
|
14
|
+
}>, ctx: ToolContext): Promise<SubToolResult[]>;
|
|
15
|
+
export declare function buildCompositeResponse(compositeName: string, results: SubToolResult[], extra?: Record<string, unknown>): ToolResult;
|
|
16
|
+
export declare function parseTarget(url: string): {
|
|
17
|
+
host: string;
|
|
18
|
+
domain: string;
|
|
19
|
+
port: number;
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/composite/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA4B1E,eAAO,MAAM,cAAc,EAAE,OAAO,EAsBnC,CAAC;AAQF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,aAAa,CAAC,CAiBxB;AAID,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,EAC7D,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;AAID,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,aAAa,EAAE,EACxB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,UAAU,CA6BZ;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAYA"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// ─── Direct imports from all 21 providers (avoids circular dep with protocol/tools.ts) ───
|
|
2
|
+
import { tcpTools } from "../tcp/index.js";
|
|
3
|
+
import { tlsTools } from "../tls/index.js";
|
|
4
|
+
import { sshTools } from "../ssh/index.js";
|
|
5
|
+
import { httpTools } from "../http/index.js";
|
|
6
|
+
import { webTools } from "../web/index.js";
|
|
7
|
+
import { pathTools } from "../path/index.js";
|
|
8
|
+
import { dnsTools } from "../dns/index.js";
|
|
9
|
+
import { wafTools } from "../waf/index.js";
|
|
10
|
+
import { timingTools } from "../timing/index.js";
|
|
11
|
+
import { h2Tools } from "../h2/index.js";
|
|
12
|
+
import { smtpTools } from "../smtp/index.js";
|
|
13
|
+
import { iotTools } from "../iot/index.js";
|
|
14
|
+
import { appTools } from "../app/index.js";
|
|
15
|
+
import { serviceTools } from "../service/index.js";
|
|
16
|
+
import { correlationTools } from "../correlation/index.js";
|
|
17
|
+
import { identifyTools } from "../identify/index.js";
|
|
18
|
+
import { passiveTools } from "../passive/index.js";
|
|
19
|
+
import { osintTools } from "../osint/index.js";
|
|
20
|
+
import { enumTools } from "../enum/index.js";
|
|
21
|
+
import { infraTools } from "../infra/index.js";
|
|
22
|
+
import { metaTools } from "../meta/index.js";
|
|
23
|
+
// ─── Tool Registry ───
|
|
24
|
+
export const ALL_INDIVIDUAL = [
|
|
25
|
+
...tcpTools,
|
|
26
|
+
...tlsTools,
|
|
27
|
+
...sshTools,
|
|
28
|
+
...httpTools,
|
|
29
|
+
...webTools,
|
|
30
|
+
...pathTools,
|
|
31
|
+
...dnsTools,
|
|
32
|
+
...wafTools,
|
|
33
|
+
...timingTools,
|
|
34
|
+
...h2Tools,
|
|
35
|
+
...smtpTools,
|
|
36
|
+
...iotTools,
|
|
37
|
+
...appTools,
|
|
38
|
+
...serviceTools,
|
|
39
|
+
...correlationTools,
|
|
40
|
+
...identifyTools,
|
|
41
|
+
...passiveTools,
|
|
42
|
+
...osintTools,
|
|
43
|
+
...enumTools,
|
|
44
|
+
...infraTools,
|
|
45
|
+
...metaTools,
|
|
46
|
+
];
|
|
47
|
+
const TOOL_REGISTRY = new Map(ALL_INDIVIDUAL.map((t) => [t.name, t]));
|
|
48
|
+
// ─── callTool ───
|
|
49
|
+
export async function callTool(name, args, ctx) {
|
|
50
|
+
const tool = TOOL_REGISTRY.get(name);
|
|
51
|
+
if (!tool) {
|
|
52
|
+
return { tool: name, ok: false, data: null, error: `Unknown tool: ${name}`, durationMs: 0 };
|
|
53
|
+
}
|
|
54
|
+
const start = performance.now();
|
|
55
|
+
try {
|
|
56
|
+
const result = await tool.execute(args, ctx);
|
|
57
|
+
const durationMs = Math.round(performance.now() - start);
|
|
58
|
+
const text = result.content?.[0]?.text;
|
|
59
|
+
const data = text ? JSON.parse(text) : null;
|
|
60
|
+
return { tool: name, ok: true, data, durationMs };
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const durationMs = Math.round(performance.now() - start);
|
|
64
|
+
return { tool: name, ok: false, data: null, error: err.message, durationMs };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// ─── callToolsParallel ───
|
|
68
|
+
export async function callToolsParallel(calls, ctx) {
|
|
69
|
+
return Promise.all(calls.map((c) => callTool(c.name, c.args, ctx)));
|
|
70
|
+
}
|
|
71
|
+
// ─── buildCompositeResponse ───
|
|
72
|
+
export function buildCompositeResponse(compositeName, results, extra) {
|
|
73
|
+
const succeeded = results.filter((r) => r.ok);
|
|
74
|
+
const failed = results.filter((r) => !r.ok);
|
|
75
|
+
const totalDurationMs = results.reduce((sum, r) => sum + r.durationMs, 0);
|
|
76
|
+
const response = {
|
|
77
|
+
_composite: compositeName,
|
|
78
|
+
_meta: {
|
|
79
|
+
techniques: results.length,
|
|
80
|
+
succeeded: succeeded.length,
|
|
81
|
+
failed: failed.length,
|
|
82
|
+
totalDurationMs,
|
|
83
|
+
},
|
|
84
|
+
...Object.fromEntries(succeeded.map((r) => [r.tool, r.data])),
|
|
85
|
+
};
|
|
86
|
+
if (failed.length > 0) {
|
|
87
|
+
response._errors = failed.map((f) => ({ tool: f.tool, error: f.error }));
|
|
88
|
+
}
|
|
89
|
+
if (extra) {
|
|
90
|
+
Object.assign(response, extra);
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// ─── URL Parsing Helper ───
|
|
97
|
+
export function parseTarget(url) {
|
|
98
|
+
try {
|
|
99
|
+
const u = new URL(url);
|
|
100
|
+
const host = u.hostname;
|
|
101
|
+
const parts = host.split(".");
|
|
102
|
+
const domain = parts.length > 2 ? parts.slice(-2).join(".") : host;
|
|
103
|
+
const port = u.port ? parseInt(u.port, 10) : u.protocol === "https:" ? 443 : 80;
|
|
104
|
+
const baseUrl = `${u.protocol}//${u.host}`;
|
|
105
|
+
return { host, domain, port, baseUrl };
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return { host: url, domain: url, port: 443, baseUrl: `https://${url}` };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/composite/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composite/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,eAAO,MAAM,cAAc,EAAE,OAAO,EAcnC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { reconTool } from "./recon.js";
|
|
2
|
+
import { scanPortsTool } from "./scan-ports.js";
|
|
3
|
+
import { scanTlsTool } from "./scan-tls.js";
|
|
4
|
+
import { scanDnsTool } from "./scan-dns.js";
|
|
5
|
+
import { scanHttpTool } from "./scan-http.js";
|
|
6
|
+
import { scanPathsTool } from "./scan-paths.js";
|
|
7
|
+
import { scanWafTool } from "./scan-waf.js";
|
|
8
|
+
import { scanServicesTool } from "./scan-services.js";
|
|
9
|
+
import { enumerateTool } from "./enumerate.js";
|
|
10
|
+
import { osintTool } from "./osint.js";
|
|
11
|
+
import { analyzeTool } from "./analyze.js";
|
|
12
|
+
import { correlateTool } from "./correlate.js";
|
|
13
|
+
import { metaTool } from "./meta.js";
|
|
14
|
+
export const compositeTools = [
|
|
15
|
+
reconTool,
|
|
16
|
+
scanPortsTool,
|
|
17
|
+
scanTlsTool,
|
|
18
|
+
scanDnsTool,
|
|
19
|
+
scanHttpTool,
|
|
20
|
+
scanPathsTool,
|
|
21
|
+
scanWafTool,
|
|
22
|
+
scanServicesTool,
|
|
23
|
+
enumerateTool,
|
|
24
|
+
osintTool,
|
|
25
|
+
analyzeTool,
|
|
26
|
+
correlateTool,
|
|
27
|
+
metaTool,
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/composite/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,SAAS;IACT,aAAa;IACb,WAAW;IACX,WAAW;IACX,YAAY;IACZ,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,SAAS;IACT,WAAW;IACX,aAAa;IACb,QAAQ;CACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/composite/meta.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,QAAQ,EAAE,OA6BtB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
export const metaTool = {
|
|
4
|
+
name: "meta",
|
|
5
|
+
description: "Server info: lists all providers, tools, configuration, and known signature databases in a single response.",
|
|
6
|
+
schema: {
|
|
7
|
+
category: z
|
|
8
|
+
.string()
|
|
9
|
+
.optional()
|
|
10
|
+
.describe("Filter by category: active, passive, osint, enum, analysis, meta"),
|
|
11
|
+
},
|
|
12
|
+
async execute(args, ctx) {
|
|
13
|
+
const category = args.category;
|
|
14
|
+
const calls = [
|
|
15
|
+
{ name: "fp_list_sources", args: category ? { category } : {} },
|
|
16
|
+
{ name: "fp_server_config", args: {} },
|
|
17
|
+
{ name: "fp_list_signatures", args: {} },
|
|
18
|
+
];
|
|
19
|
+
const results = await callToolsParallel(calls, ctx);
|
|
20
|
+
return buildCompositeResponse("meta", results);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/composite/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,MAAM;IACZ,WAAW,EACT,6GAA6G;IAC/G,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,kEAAkE,CACnE;KACJ;IAED,KAAK,CAAC,OAAO,CACX,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;QAErD,MAAM,KAAK,GAAG;YACZ,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/D,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE;SACzC,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEpD,OAAO,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osint.d.ts","sourceRoot":"","sources":["../../src/composite/osint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,SAAS,EAAE,OA6CvB,CAAC"}
|