s3db.js 19.2.2-next.ab202d14 → 19.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/recon/config/defaults.js +0 -9
- package/dist/plugins/recon/config/defaults.js.map +1 -1
- package/dist/plugins/recon/index.js +0 -5
- package/dist/plugins/recon/index.js.map +1 -1
- package/dist/plugins/recon/stages/index.js +0 -1
- package/dist/plugins/recon/stages/index.js.map +1 -1
- package/dist/s3db.cjs +2 -150
- package/dist/s3db.cjs.map +1 -1
- package/dist/s3db.es.js +2 -150
- package/dist/s3db.es.js.map +1 -1
- package/dist/types/plugins/recon/config/defaults.d.ts +0 -7
- package/dist/types/plugins/recon/config/defaults.d.ts.map +1 -1
- package/dist/types/plugins/recon/index.d.ts +0 -3
- package/dist/types/plugins/recon/index.d.ts.map +1 -1
- package/dist/types/plugins/recon/stages/index.d.ts +0 -2
- package/dist/types/plugins/recon/stages/index.d.ts.map +1 -1
- package/mcp/data/embeddings-core.json +935 -529
- package/mcp/data/embeddings-plugins.json +1 -1
- package/package.json +1 -1
- package/src/plugins/recon/config/defaults.ts +0 -17
- package/src/plugins/recon/index.ts +0 -8
- package/src/plugins/recon/stages/index.ts +0 -8
- package/src/plugins/recon/stages/massdns-stage.ts +0 -209
package/dist/s3db.es.js
CHANGED
|
@@ -19844,8 +19844,8 @@ class Database extends SafeEventEmitter {
|
|
|
19844
19844
|
})();
|
|
19845
19845
|
this.version = '1';
|
|
19846
19846
|
this.s3dbVersion = (() => {
|
|
19847
|
-
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.2.
|
|
19848
|
-
? globalThis['19.2.
|
|
19847
|
+
const [ok, , version] = tryFnSync(() => (typeof globalThis['19.2.3'] !== 'undefined' && globalThis['19.2.3'] !== '19.2.3'
|
|
19848
|
+
? globalThis['19.2.3']
|
|
19849
19849
|
: 'latest'));
|
|
19850
19850
|
return ok ? version : 'latest';
|
|
19851
19851
|
})();
|
|
@@ -84231,141 +84231,6 @@ class DNSDumpsterStage {
|
|
|
84231
84231
|
}
|
|
84232
84232
|
}
|
|
84233
84233
|
|
|
84234
|
-
/**
|
|
84235
|
-
* MassDNSStage
|
|
84236
|
-
*
|
|
84237
|
-
* High-performance DNS resolution using RedBlue:
|
|
84238
|
-
* - Mass subdomain resolution
|
|
84239
|
-
* - Wordlist-based brute force
|
|
84240
|
-
* - Fast parallel queries
|
|
84241
|
-
*/
|
|
84242
|
-
class MassDNSStage {
|
|
84243
|
-
plugin;
|
|
84244
|
-
commandRunner;
|
|
84245
|
-
config;
|
|
84246
|
-
constructor(plugin) {
|
|
84247
|
-
this.plugin = plugin;
|
|
84248
|
-
this.commandRunner = plugin.commandRunner;
|
|
84249
|
-
this.config = plugin.config;
|
|
84250
|
-
}
|
|
84251
|
-
async execute(target, featureConfig = {}) {
|
|
84252
|
-
const wordlist = featureConfig.wordlist || this.config.massdns?.wordlist;
|
|
84253
|
-
if (!wordlist) {
|
|
84254
|
-
return {
|
|
84255
|
-
status: 'error',
|
|
84256
|
-
message: 'No wordlist provided for mass DNS resolution',
|
|
84257
|
-
host: target.host,
|
|
84258
|
-
subdomains: [],
|
|
84259
|
-
resolvedCount: 0
|
|
84260
|
-
};
|
|
84261
|
-
}
|
|
84262
|
-
const flags = ['--wordlist', wordlist];
|
|
84263
|
-
if (featureConfig.rate) {
|
|
84264
|
-
flags.push('--rate', String(featureConfig.rate));
|
|
84265
|
-
}
|
|
84266
|
-
if (featureConfig.resolvers) {
|
|
84267
|
-
flags.push('--resolvers', featureConfig.resolvers);
|
|
84268
|
-
}
|
|
84269
|
-
const result = await this.commandRunner.runRedBlue('dns', 'record', 'bruteforce', target.host, {
|
|
84270
|
-
timeout: featureConfig.timeout || 120000,
|
|
84271
|
-
flags
|
|
84272
|
-
});
|
|
84273
|
-
if (result.status === 'unavailable') {
|
|
84274
|
-
return {
|
|
84275
|
-
status: 'unavailable',
|
|
84276
|
-
message: 'RedBlue (rb) is not available',
|
|
84277
|
-
host: target.host,
|
|
84278
|
-
subdomains: [],
|
|
84279
|
-
resolvedCount: 0,
|
|
84280
|
-
metadata: result.metadata
|
|
84281
|
-
};
|
|
84282
|
-
}
|
|
84283
|
-
if (result.status === 'error') {
|
|
84284
|
-
return {
|
|
84285
|
-
status: 'error',
|
|
84286
|
-
message: result.error,
|
|
84287
|
-
host: target.host,
|
|
84288
|
-
subdomains: [],
|
|
84289
|
-
resolvedCount: 0,
|
|
84290
|
-
metadata: result.metadata
|
|
84291
|
-
};
|
|
84292
|
-
}
|
|
84293
|
-
const resolved = this._normalizeResolved(result.data, target.host);
|
|
84294
|
-
return {
|
|
84295
|
-
status: resolved.subdomains.length > 0 ? 'ok' : 'empty',
|
|
84296
|
-
host: target.host,
|
|
84297
|
-
...resolved,
|
|
84298
|
-
metadata: result.metadata
|
|
84299
|
-
};
|
|
84300
|
-
}
|
|
84301
|
-
_normalizeResolved(data, baseDomain) {
|
|
84302
|
-
if (!data || typeof data !== 'object') {
|
|
84303
|
-
return { subdomains: [], resolvedCount: 0, totalAttempts: null };
|
|
84304
|
-
}
|
|
84305
|
-
if (data.raw) {
|
|
84306
|
-
return this._parseRawResolved(data.raw, baseDomain);
|
|
84307
|
-
}
|
|
84308
|
-
const subdomains = [];
|
|
84309
|
-
if (Array.isArray(data.subdomains)) {
|
|
84310
|
-
subdomains.push(...data.subdomains.map((s) => this._normalizeSubdomain(s)).filter(Boolean));
|
|
84311
|
-
}
|
|
84312
|
-
else if (Array.isArray(data.results)) {
|
|
84313
|
-
subdomains.push(...data.results.map((s) => this._normalizeSubdomain(s)).filter(Boolean));
|
|
84314
|
-
}
|
|
84315
|
-
else if (Array.isArray(data.resolved)) {
|
|
84316
|
-
subdomains.push(...data.resolved.map((s) => this._normalizeSubdomain(s)).filter(Boolean));
|
|
84317
|
-
}
|
|
84318
|
-
else if (Array.isArray(data)) {
|
|
84319
|
-
subdomains.push(...data.map((s) => this._normalizeSubdomain(s)).filter((s) => s !== null));
|
|
84320
|
-
}
|
|
84321
|
-
return {
|
|
84322
|
-
subdomains: subdomains.filter((s) => s !== null),
|
|
84323
|
-
resolvedCount: subdomains.length,
|
|
84324
|
-
totalAttempts: data.totalAttempts || data.attempts || null
|
|
84325
|
-
};
|
|
84326
|
-
}
|
|
84327
|
-
_normalizeSubdomain(subdomain) {
|
|
84328
|
-
if (!subdomain)
|
|
84329
|
-
return null;
|
|
84330
|
-
if (typeof subdomain === 'string') {
|
|
84331
|
-
return { subdomain, ip: null };
|
|
84332
|
-
}
|
|
84333
|
-
return {
|
|
84334
|
-
subdomain: subdomain.subdomain || subdomain.name || subdomain.host || subdomain.domain,
|
|
84335
|
-
ip: subdomain.ip || subdomain.address || subdomain.a || null,
|
|
84336
|
-
ips: subdomain.ips || subdomain.addresses || null,
|
|
84337
|
-
cname: subdomain.cname || null
|
|
84338
|
-
};
|
|
84339
|
-
}
|
|
84340
|
-
_parseRawResolved(raw, baseDomain) {
|
|
84341
|
-
const subdomains = [];
|
|
84342
|
-
const lines = raw.split('\n').filter(Boolean);
|
|
84343
|
-
for (const line of lines) {
|
|
84344
|
-
const match = line.match(/^([\w\-\.]+)\.\s+A\s+([\d\.]+)$/);
|
|
84345
|
-
if (match) {
|
|
84346
|
-
const subdomain = match[1].replace(/\.$/, '');
|
|
84347
|
-
const ip = match[2];
|
|
84348
|
-
if (subdomain && ip && subdomain.endsWith(baseDomain)) {
|
|
84349
|
-
subdomains.push({ subdomain, ip });
|
|
84350
|
-
}
|
|
84351
|
-
continue;
|
|
84352
|
-
}
|
|
84353
|
-
const simpleMatch = line.match(/^([\w\-\.]+)\s+([\d\.]+)$/);
|
|
84354
|
-
if (simpleMatch) {
|
|
84355
|
-
subdomains.push({
|
|
84356
|
-
subdomain: simpleMatch[1],
|
|
84357
|
-
ip: simpleMatch[2] ?? null
|
|
84358
|
-
});
|
|
84359
|
-
}
|
|
84360
|
-
}
|
|
84361
|
-
return {
|
|
84362
|
-
subdomains,
|
|
84363
|
-
resolvedCount: subdomains.length,
|
|
84364
|
-
totalAttempts: null
|
|
84365
|
-
};
|
|
84366
|
-
}
|
|
84367
|
-
}
|
|
84368
|
-
|
|
84369
84234
|
/**
|
|
84370
84235
|
* GoogleDorksStage
|
|
84371
84236
|
*
|
|
@@ -87100,12 +86965,6 @@ const DEFAULT_FEATURES = {
|
|
|
87100
86965
|
},
|
|
87101
86966
|
dnsdumpster: {
|
|
87102
86967
|
enabled: true
|
|
87103
|
-
},
|
|
87104
|
-
massdns: {
|
|
87105
|
-
enabled: false,
|
|
87106
|
-
wordlist: null,
|
|
87107
|
-
rate: 1000,
|
|
87108
|
-
maxSubdomains: 1000
|
|
87109
86968
|
}
|
|
87110
86969
|
};
|
|
87111
86970
|
const BEHAVIOR_PRESETS = {
|
|
@@ -87128,7 +86987,6 @@ const BEHAVIOR_PRESETS = {
|
|
|
87128
86987
|
secrets: { enabled: false },
|
|
87129
86988
|
asn: { enabled: true },
|
|
87130
86989
|
dnsdumpster: { enabled: true },
|
|
87131
|
-
massdns: { enabled: false, wordlist: null, rate: 1000, maxSubdomains: 1000 }
|
|
87132
86990
|
},
|
|
87133
86991
|
concurrency: 2,
|
|
87134
86992
|
timeout: { default: 30000 },
|
|
@@ -87153,7 +87011,6 @@ const BEHAVIOR_PRESETS = {
|
|
|
87153
87011
|
secrets: { enabled: false },
|
|
87154
87012
|
asn: { enabled: true },
|
|
87155
87013
|
dnsdumpster: { enabled: true },
|
|
87156
|
-
massdns: { enabled: false, wordlist: null, rate: 1000, maxSubdomains: 1000 }
|
|
87157
87014
|
},
|
|
87158
87015
|
concurrency: 1,
|
|
87159
87016
|
timeout: { default: 60000 },
|
|
@@ -87178,7 +87035,6 @@ const BEHAVIOR_PRESETS = {
|
|
|
87178
87035
|
secrets: { enabled: false },
|
|
87179
87036
|
asn: { enabled: true },
|
|
87180
87037
|
dnsdumpster: { enabled: true },
|
|
87181
|
-
massdns: { enabled: true, wordlist: null, rate: 5000, maxSubdomains: 5000 }
|
|
87182
87038
|
},
|
|
87183
87039
|
concurrency: 8,
|
|
87184
87040
|
timeout: { default: 120000 },
|
|
@@ -87328,7 +87184,6 @@ class ReconPlugin extends Plugin {
|
|
|
87328
87184
|
secrets: new SecretsStage(this),
|
|
87329
87185
|
asn: new ASNStage(this),
|
|
87330
87186
|
dnsdumpster: new DNSDumpsterStage(this),
|
|
87331
|
-
massdns: new MassDNSStage(this),
|
|
87332
87187
|
googleDorks: new GoogleDorksStage(this)
|
|
87333
87188
|
};
|
|
87334
87189
|
}
|
|
@@ -87431,9 +87286,6 @@ class ReconPlugin extends Plugin {
|
|
|
87431
87286
|
if (scanConfig.dnsdumpster !== false) {
|
|
87432
87287
|
results.dnsdumpster = await this.stages.dnsdumpster.execute(normalizedTarget, scanConfig.dnsdumpster);
|
|
87433
87288
|
}
|
|
87434
|
-
if (scanConfig.massdns !== false) {
|
|
87435
|
-
results.massdns = await this.stages.massdns.execute(normalizedTarget, scanConfig.massdns);
|
|
87436
|
-
}
|
|
87437
87289
|
if (scanConfig.googleDorks !== false) {
|
|
87438
87290
|
results.googleDorks = await this.stages.googleDorks.execute(normalizedTarget, scanConfig.googleDorks);
|
|
87439
87291
|
}
|