@shriyanss/js-recon 1.0.0 → 1.1.0-beta.1
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/.api_gateway_config.json +1 -0
- package/.github/workflows/npm-publish.yml +35 -0
- package/.github/workflows/prettier.yaml +44 -0
- package/.prettierignore +2 -0
- package/.prettierrc +4 -0
- package/.resp_cache.json +1 -0
- package/.vscode/launch.json +27 -0
- package/CHANGELOG.md +40 -0
- package/README.md +35 -140
- package/build/api_gateway/checkFeasibility.js +32 -0
- package/build/api_gateway/checkFeasibility.js.map +1 -0
- package/build/api_gateway/checkFireWallBlocking.js +24 -0
- package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
- package/build/api_gateway/genReq.js +202 -0
- package/build/api_gateway/genReq.js.map +1 -0
- package/build/api_gateway/index.js +277 -0
- package/build/api_gateway/index.js.map +1 -0
- package/build/endpoints/gen_report/gen_json.js +22 -0
- package/build/endpoints/gen_report/gen_json.js.map +1 -0
- package/build/endpoints/gen_report/gen_markdown.js +66 -0
- package/build/endpoints/gen_report/gen_markdown.js.map +1 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js +46 -0
- package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
- package/build/endpoints/index.js +89 -0
- package/build/endpoints/index.js.map +1 -0
- package/build/endpoints/next_js/client_jsFilesHref.js +91 -0
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
- package/build/endpoints/next_js/client_jsonParse.js +75 -0
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
- package/build/endpoints/next_js/client_subsequentRequests.js +199 -0
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
- package/build/endpoints/next_js/getWebpacks.js +45 -0
- package/build/endpoints/next_js/getWebpacks.js.map +1 -0
- package/build/globalConfig.js +11 -0
- package/build/globalConfig.js.map +1 -0
- package/build/index.js +166 -0
- package/build/index.js.map +1 -0
- package/build/lazyLoad/downloadFilesUtil.js +128 -0
- package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js +51 -0
- package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
- package/build/lazyLoad/globals.js +25 -0
- package/build/lazyLoad/globals.js.map +1 -0
- package/build/lazyLoad/index.js +171 -0
- package/build/lazyLoad/index.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js +94 -0
- package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
- package/build/lazyLoad/next_js/next_GetLazyResources.js +202 -0
- package/build/lazyLoad/next_js/next_GetLazyResources.js.map +1 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js +120 -0
- package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +188 -0
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +75 -0
- package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +94 -0
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +68 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +95 -0
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
- package/build/map/index.js +58 -0
- package/build/map/index.js.map +1 -0
- package/build/map/next_js/getFetchInstances.js +105 -0
- package/build/map/next_js/getFetchInstances.js.map +1 -0
- package/build/map/next_js/getWebpackConnections.js +224 -0
- package/build/map/next_js/getWebpackConnections.js.map +1 -0
- package/build/map/next_js/interactive.js +32 -0
- package/build/map/next_js/interactive.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js +190 -0
- package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js +91 -0
- package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js +11 -0
- package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
- package/build/map/next_js/interactive_helpers/keybindings.js +80 -0
- package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
- package/build/map/next_js/interactive_helpers/printer.js +17 -0
- package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
- package/build/map/next_js/interactive_helpers/ui.js +81 -0
- package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
- package/build/map/next_js/resolveFetch.js +201 -0
- package/build/map/next_js/resolveFetch.js.map +1 -0
- package/build/run/index.js +62 -0
- package/build/run/index.js.map +1 -0
- package/build/strings/index.js +235 -0
- package/build/strings/index.js.map +1 -0
- package/build/strings/openapi.js +55 -0
- package/build/strings/openapi.js.map +1 -0
- package/build/strings/permutate.js +55 -0
- package/build/strings/permutate.js.map +1 -0
- package/build/strings/secrets.js +89 -0
- package/build/strings/secrets.js.map +1 -0
- package/build/techDetect/index.js +224 -0
- package/build/techDetect/index.js.map +1 -0
- package/build/utility/ai.js +69 -0
- package/build/utility/ai.js.map +1 -0
- package/build/utility/globals.js +84 -0
- package/build/utility/globals.js.map +1 -0
- package/build/utility/interfaces.js +2 -0
- package/build/utility/interfaces.js.map +1 -0
- package/build/utility/makeReq.js +265 -0
- package/build/utility/makeReq.js.map +1 -0
- package/build/utility/resolvePath.js +44 -0
- package/build/utility/resolvePath.js.map +1 -0
- package/{utility → build/utility}/runSandboxed.js +10 -13
- package/build/utility/runSandboxed.js.map +1 -0
- package/{utility → build/utility}/urlUtils.js +9 -11
- package/build/utility/urlUtils.js.map +1 -0
- package/docs/README.md +20 -0
- package/docs/api-gateway.md +68 -0
- package/docs/endpoints.md +49 -0
- package/docs/example-scenario.md +258 -0
- package/docs/interactive-mode.md +76 -0
- package/docs/lazyload.md +56 -0
- package/docs/map.md +53 -0
- package/docs/run.md +54 -0
- package/docs/strings.md +75 -0
- package/endpoints.json +77 -0
- package/extracted_urls-openapi.json +225 -0
- package/extracted_urls-swagger.json +225 -0
- package/extracted_urls.json +47 -0
- package/extracted_urls.txt +296 -0
- package/mapped.json +3413 -0
- package/output/ss0x00.com/_next/data/k7xKVnxmboK4SktY2dZWt/index.json +971 -0
- package/output/ss0x00.com/_next/static/chunks/12.7e6d2ac6e1808fc2.js +247 -0
- package/output/ss0x00.com/_next/static/chunks/128.160aa801ef0445bc.js +1074 -0
- package/output/ss0x00.com/_next/static/chunks/132.55df84f7707fc278.js +102 -0
- package/output/ss0x00.com/_next/static/chunks/142.77038c55d9ec10ba.js +96 -0
- package/output/ss0x00.com/_next/static/chunks/215.321479e91d330bfa.js +228 -0
- package/output/ss0x00.com/_next/static/chunks/229.097c396d86b4a882.js +458 -0
- package/output/ss0x00.com/_next/static/chunks/257.5fd052aa4ef06ef9.js +1327 -0
- package/output/ss0x00.com/_next/static/chunks/268.72cb3779f66db70b.js +10520 -0
- package/output/ss0x00.com/_next/static/chunks/320.57d528b0e9bf86f0.js +186 -0
- package/output/ss0x00.com/_next/static/chunks/325.302a44b604c35f17.js +88 -0
- package/output/ss0x00.com/_next/static/chunks/328.e4a0307a4fddf318.js +248 -0
- package/output/ss0x00.com/_next/static/chunks/432.3621f17504ef18f2.js +443 -0
- package/output/ss0x00.com/_next/static/chunks/44.e90dd963003a3d43.js +1094 -0
- package/output/ss0x00.com/_next/static/chunks/442.8c054f100f9e5e50.js +1082 -0
- package/output/ss0x00.com/_next/static/chunks/460.f8db9a5142598e2c.js +466 -0
- package/output/ss0x00.com/_next/static/chunks/487.05ca55420459c002.js +78 -0
- package/output/ss0x00.com/_next/static/chunks/567.1909a6b0a920114b.js +1374 -0
- package/output/ss0x00.com/_next/static/chunks/586.802fc9214d87fb29.js +752 -0
- package/output/ss0x00.com/_next/static/chunks/620.a2a3a6b94d30a4c8.js +1037 -0
- package/output/ss0x00.com/_next/static/chunks/642.6b3e487c9604cbb8.js +1628 -0
- package/output/ss0x00.com/_next/static/chunks/673.e5d77887e5c6a68c.js +1045 -0
- package/output/ss0x00.com/_next/static/chunks/684.8b8e52baca70524b.js +96 -0
- package/output/ss0x00.com/_next/static/chunks/686.79480519e5ccfb77.js +296 -0
- package/output/ss0x00.com/_next/static/chunks/756.7a3878a2e6765be7.js +504 -0
- package/output/ss0x00.com/_next/static/chunks/761.7bea7516c5d22b2a.js +1485 -0
- package/output/ss0x00.com/_next/static/chunks/794.e079ef369b41a3c5.js +1350 -0
- package/output/ss0x00.com/_next/static/chunks/826.31ba213e1d023c68.js +1031 -0
- package/output/ss0x00.com/_next/static/chunks/847.d8397a73efc81848.js +1068 -0
- package/output/ss0x00.com/_next/static/chunks/848.5feaeee1e2624aea.js +132 -0
- package/output/ss0x00.com/_next/static/chunks/850.ecc7c3c3d787ee03.js +1472 -0
- package/output/ss0x00.com/_next/static/chunks/853.50b9eb60b7d0e83c.js +1472 -0
- package/output/ss0x00.com/_next/static/chunks/856.7a7bb6c3c7bfc2ba.js +1320 -0
- package/output/ss0x00.com/_next/static/chunks/859.df4bd45c03a65f53.js +1306 -0
- package/output/ss0x00.com/_next/static/chunks/867.e8633955a147c978.js +541 -0
- package/output/ss0x00.com/_next/static/chunks/921.c3123f20a4c8d53c.js +96 -0
- package/output/ss0x00.com/_next/static/chunks/932.25cb421c466c99cb.js +999 -0
- package/output/ss0x00.com/_next/static/chunks/framework-64ad27b21261a9ce.js +9189 -0
- package/output/ss0x00.com/_next/static/chunks/main-710ab85aa9a8f10d.js +6583 -0
- package/output/ss0x00.com/_next/static/chunks/pages/5D-af5a23529ce3c337.js +486 -0
- package/output/ss0x00.com/_next/static/chunks/pages/_app-c449865c8af1faa0.js +39 -0
- package/output/ss0x00.com/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +6383 -0
- package/output/ss0x00.com/_next/static/chunks/webpack-efff35ee26971294.js +271 -0
- package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_buildManifest.js +8 -0
- package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_ssgManifest.js +3 -0
- package/output/ss0x00.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js +82 -0
- package/package.json +50 -38
- package/strings.json +7407 -0
- package/api_gateway/checkFeasibility.js +0 -25
- package/api_gateway/checkFireWallBlocking.js +0 -17
- package/api_gateway/genReq.js +0 -214
- package/api_gateway/index.js +0 -325
- package/endpoints/index.js +0 -7
- package/globalConfig.js +0 -12
- package/index.js +0 -69
- package/lazyLoad/downloadFilesUtil.js +0 -122
- package/lazyLoad/downloadLoadedJsUtil.js +0 -54
- package/lazyLoad/globals.js +0 -15
- package/lazyLoad/index.js +0 -167
- package/lazyLoad/next_js/next_GetJSScript.js +0 -99
- package/lazyLoad/next_js/next_GetLazyResources.js +0 -201
- package/lazyLoad/next_js/next_SubsequentRequests.js +0 -138
- package/lazyLoad/nuxt_js/nuxt_astParse.js +0 -194
- package/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +0 -77
- package/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +0 -99
- package/research/firewall_bypass.md +0 -38
- package/research/next_js.md +0 -116
- package/research/nuxt_js.md +0 -125
- package/research/vue_js.md +0 -9
- package/strings/index.js +0 -145
- package/techDetect/index.js +0 -156
- package/utility/globals.js +0 -6
- package/utility/makeReq.js +0 -179
- package/utility/resolvePath.js +0 -43
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
function setupKeybindings(screen, inputBox, outputBox, state) {
|
|
3
|
+
// Quit on ctl-c
|
|
4
|
+
screen.key(["C-c", "q"], () => {
|
|
5
|
+
return process.exit(0);
|
|
6
|
+
});
|
|
7
|
+
// on pressing esc on input, focus on output
|
|
8
|
+
inputBox.key(["escape"], () => {
|
|
9
|
+
outputBox.focus();
|
|
10
|
+
outputBox.style.border.fg = "blue";
|
|
11
|
+
inputBox.style.border.fg = "gray";
|
|
12
|
+
screen.render();
|
|
13
|
+
});
|
|
14
|
+
// Clear input box on ctl-c
|
|
15
|
+
inputBox.key(["C-c"], () => {
|
|
16
|
+
outputBox.log(chalk.yellow("^C (Use Esc then C-c to exit)"));
|
|
17
|
+
inputBox.focus();
|
|
18
|
+
state.lastCommandStatus = false;
|
|
19
|
+
screen.render();
|
|
20
|
+
});
|
|
21
|
+
// on pressing 'o' on screen, focus on output box
|
|
22
|
+
screen.key(["o"], () => {
|
|
23
|
+
outputBox.focus();
|
|
24
|
+
outputBox.style.border.fg = "blue";
|
|
25
|
+
inputBox.style.border.fg = "gray";
|
|
26
|
+
screen.render();
|
|
27
|
+
});
|
|
28
|
+
// on pressing 'i' on screen, focus on input box
|
|
29
|
+
screen.key(["i"], () => {
|
|
30
|
+
inputBox.focus();
|
|
31
|
+
inputBox.style.border.fg = "blue";
|
|
32
|
+
outputBox.style.border.fg = "gray";
|
|
33
|
+
screen.render();
|
|
34
|
+
});
|
|
35
|
+
// on pressing arrow keys on output box, scroll the output
|
|
36
|
+
outputBox.key(["up", "down"], (ch, key) => {
|
|
37
|
+
outputBox.scroll(key.name === "up" ? -1 : 1);
|
|
38
|
+
screen.render();
|
|
39
|
+
});
|
|
40
|
+
// on pressing arrow keys on input box, navigate through command history
|
|
41
|
+
inputBox.key(["up", "down"], (ch, key) => {
|
|
42
|
+
if (key.name === "up") {
|
|
43
|
+
if (state.commandHistoryIndex > 0) {
|
|
44
|
+
state.commandHistoryIndex--;
|
|
45
|
+
inputBox.setValue(state.commandHistory[state.commandHistoryIndex]);
|
|
46
|
+
screen.render();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// blink red
|
|
50
|
+
inputBox.style.border.fg = "red";
|
|
51
|
+
screen.render();
|
|
52
|
+
setTimeout(() => {
|
|
53
|
+
inputBox.style.border.fg = "blue";
|
|
54
|
+
screen.render();
|
|
55
|
+
}, 50);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// down
|
|
60
|
+
if (state.commandHistoryIndex < state.commandHistory.length - 1) {
|
|
61
|
+
state.commandHistoryIndex++;
|
|
62
|
+
inputBox.setValue(state.commandHistory[state.commandHistoryIndex]);
|
|
63
|
+
screen.render();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
state.commandHistoryIndex = state.commandHistory.length;
|
|
67
|
+
inputBox.setValue("");
|
|
68
|
+
// blink red
|
|
69
|
+
inputBox.style.border.fg = "red";
|
|
70
|
+
screen.render();
|
|
71
|
+
setTimeout(() => {
|
|
72
|
+
inputBox.style.border.fg = "blue";
|
|
73
|
+
screen.render();
|
|
74
|
+
}, 50);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export { setupKeybindings };
|
|
80
|
+
//# sourceMappingURL=keybindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../../../src/map/next_js/interactive_helpers/keybindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { highlight } from "cli-highlight";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
// Function to print function code with syntax highlighting
|
|
4
|
+
const printFunction = (outputBox, funcCode, funcDesc, funcWriteFile) => {
|
|
5
|
+
const rawText = `/**\n* ${funcDesc}\n*/\n${funcCode}`;
|
|
6
|
+
const highlighted = highlight(rawText, {
|
|
7
|
+
language: "javascript",
|
|
8
|
+
ignoreIllegals: true,
|
|
9
|
+
theme: undefined, // This makes cli-highlight use ANSI colors
|
|
10
|
+
});
|
|
11
|
+
outputBox.setContent(highlighted); // << use setContent instead of setText
|
|
12
|
+
if (funcWriteFile) {
|
|
13
|
+
fs.writeFileSync(funcWriteFile, rawText); // Save raw (non-colored) version to file
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export { printFunction };
|
|
17
|
+
//# sourceMappingURL=printer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printer.js","sourceRoot":"","sources":["../../../../src/map/next_js/interactive_helpers/printer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,2DAA2D;AAC3D,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE;IACnE,MAAM,OAAO,GAAG,UAAU,QAAQ,SAAS,QAAQ,EAAE,CAAC;IACtD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE;QACnC,QAAQ,EAAE,YAAY;QACtB,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE,SAAS,EAAE,2CAA2C;KAChE,CAAC,CAAC;IAEH,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,uCAAuC;IAE1E,IAAI,aAAa,EAAE,CAAC;QAChB,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,yCAAyC;IACvF,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import blessed from "blessed";
|
|
2
|
+
function createUI() {
|
|
3
|
+
// Create a screen object.
|
|
4
|
+
const screen = blessed.screen({
|
|
5
|
+
smartCSR: true,
|
|
6
|
+
title: "JS Recon Interactive Mode",
|
|
7
|
+
fullUnicode: true,
|
|
8
|
+
});
|
|
9
|
+
// Title Box
|
|
10
|
+
const titleBox = blessed.box({
|
|
11
|
+
parent: screen,
|
|
12
|
+
top: 0,
|
|
13
|
+
left: "center",
|
|
14
|
+
width: "98%",
|
|
15
|
+
height: 3,
|
|
16
|
+
content: "JS Recon Interactive Mode",
|
|
17
|
+
border: {
|
|
18
|
+
type: "line",
|
|
19
|
+
},
|
|
20
|
+
style: {
|
|
21
|
+
fg: "white",
|
|
22
|
+
border: {
|
|
23
|
+
fg: "gray",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
// Output Box
|
|
28
|
+
const outputBox = blessed.log({
|
|
29
|
+
parent: screen,
|
|
30
|
+
top: 3,
|
|
31
|
+
left: "center",
|
|
32
|
+
width: "98%",
|
|
33
|
+
bottom: 3,
|
|
34
|
+
border: {
|
|
35
|
+
type: "line",
|
|
36
|
+
},
|
|
37
|
+
style: {
|
|
38
|
+
fg: "white",
|
|
39
|
+
border: {
|
|
40
|
+
fg: "gray",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
scrollable: true,
|
|
44
|
+
alwaysScroll: true,
|
|
45
|
+
scrollbar: {
|
|
46
|
+
ch: " ",
|
|
47
|
+
inverse: true,
|
|
48
|
+
},
|
|
49
|
+
keys: true,
|
|
50
|
+
vi: true,
|
|
51
|
+
mouse: true,
|
|
52
|
+
scrollSpeed: 0.5,
|
|
53
|
+
});
|
|
54
|
+
// Input Box
|
|
55
|
+
const inputBox = blessed.textbox({
|
|
56
|
+
parent: screen,
|
|
57
|
+
bottom: 0,
|
|
58
|
+
left: "center",
|
|
59
|
+
width: "98%",
|
|
60
|
+
height: 3,
|
|
61
|
+
border: {
|
|
62
|
+
type: "line",
|
|
63
|
+
},
|
|
64
|
+
style: {
|
|
65
|
+
fg: "white",
|
|
66
|
+
bg: "black",
|
|
67
|
+
border: {
|
|
68
|
+
fg: "gray",
|
|
69
|
+
},
|
|
70
|
+
focus: {
|
|
71
|
+
border: {
|
|
72
|
+
fg: "blue",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
inputOnFocus: true,
|
|
77
|
+
});
|
|
78
|
+
return { screen, titleBox, outputBox, inputBox };
|
|
79
|
+
}
|
|
80
|
+
export { createUI };
|
|
81
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../../src/map/next_js/interactive_helpers/ui.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,SAAS,QAAQ;IACb,0BAA0B;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1B,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,YAAY;IACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,2BAA2B;QACpC,MAAM,EAAE;YACJ,IAAI,EAAE,MAAM;SACf;QACD,KAAK,EAAE;YACH,EAAE,EAAE,OAAO;YACX,MAAM,EAAE;gBACJ,EAAE,EAAE,MAAM;aACb;SACJ;KACJ,CAAC,CAAC;IAEH,aAAa;IACb,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;QAC1B,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,CAAC;QACT,MAAM,EAAE;YACJ,IAAI,EAAE,MAAM;SACf;QACD,KAAK,EAAE;YACH,EAAE,EAAE,OAAO;YACX,MAAM,EAAE;gBACJ,EAAE,EAAE,MAAM;aACb;SACJ;QACD,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE;YACP,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,IAAI;SAChB;QACD,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,GAAG;KACnB,CAAC,CAAC;IAEH,YAAY;IACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,CAAC;QACT,MAAM,EAAE;YACJ,IAAI,EAAE,MAAM;SACf;QACD,KAAK,EAAE;YACH,EAAE,EAAE,OAAO;YACX,EAAE,EAAE,OAAO;YACX,MAAM,EAAE;gBACJ,EAAE,EAAE,MAAM;aACb;YACD,KAAK,EAAE;gBACH,MAAM,EAAE;oBACJ,EAAE,EAAE,MAAM;iBACb;aACJ;SACJ;QACD,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACrD,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import parser from "@babel/parser";
|
|
12
|
+
import _traverse from "@babel/traverse";
|
|
13
|
+
import fs from "fs";
|
|
14
|
+
import path from "path";
|
|
15
|
+
const traverse = _traverse.default;
|
|
16
|
+
const resolveNodeValue = (node, scope) => {
|
|
17
|
+
if (!node)
|
|
18
|
+
return null;
|
|
19
|
+
switch (node.type) {
|
|
20
|
+
case "StringLiteral":
|
|
21
|
+
case "NumericLiteral":
|
|
22
|
+
case "BooleanLiteral":
|
|
23
|
+
return node.value;
|
|
24
|
+
case "NullLiteral":
|
|
25
|
+
return null;
|
|
26
|
+
case "TemplateLiteral":
|
|
27
|
+
let result = "";
|
|
28
|
+
for (let i = 0; i < node.quasis.length; i++) {
|
|
29
|
+
result += node.quasis[i].value.raw;
|
|
30
|
+
if (i < node.expressions.length) {
|
|
31
|
+
result += resolveNodeValue(node.expressions[i], scope);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
case "Identifier": {
|
|
36
|
+
const binding = scope.getBinding(node.name);
|
|
37
|
+
if (binding && binding.path.node.init) {
|
|
38
|
+
return resolveNodeValue(binding.path.node.init, scope);
|
|
39
|
+
}
|
|
40
|
+
return `[unresolved: ${node.name}]`;
|
|
41
|
+
}
|
|
42
|
+
case "ObjectExpression": {
|
|
43
|
+
const obj = {};
|
|
44
|
+
for (const prop of node.properties) {
|
|
45
|
+
if (prop.type === "ObjectProperty") {
|
|
46
|
+
const key = prop.computed
|
|
47
|
+
? resolveNodeValue(prop.key, scope)
|
|
48
|
+
: prop.key.name || prop.key.value;
|
|
49
|
+
const value = resolveNodeValue(prop.value, scope);
|
|
50
|
+
obj[key] = value;
|
|
51
|
+
}
|
|
52
|
+
else if (prop.type === "SpreadElement") {
|
|
53
|
+
const spreadObj = resolveNodeValue(prop.argument, scope);
|
|
54
|
+
if (typeof spreadObj === "object" && spreadObj !== null) {
|
|
55
|
+
Object.assign(obj, spreadObj);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return obj;
|
|
60
|
+
}
|
|
61
|
+
case "MemberExpression": {
|
|
62
|
+
const object = resolveNodeValue(node.object, scope);
|
|
63
|
+
if (typeof object === "object" && object !== null) {
|
|
64
|
+
const propertyName = node.computed
|
|
65
|
+
? resolveNodeValue(node.property, scope)
|
|
66
|
+
: node.property.name;
|
|
67
|
+
return object[propertyName];
|
|
68
|
+
}
|
|
69
|
+
return `[unresolved member expression]`;
|
|
70
|
+
}
|
|
71
|
+
case "CallExpression": {
|
|
72
|
+
if (node.callee.type === "MemberExpression" &&
|
|
73
|
+
node.callee.property.name === "toString") {
|
|
74
|
+
return resolveNodeValue(node.callee.object, scope);
|
|
75
|
+
}
|
|
76
|
+
return `[unresolved call to ${node.callee.name || "function"}]`;
|
|
77
|
+
}
|
|
78
|
+
case "NewExpression": {
|
|
79
|
+
if (node.callee.type === "Identifier" &&
|
|
80
|
+
node.callee.name === "URL" &&
|
|
81
|
+
node.arguments.length > 0) {
|
|
82
|
+
return resolveNodeValue(node.arguments[0], scope);
|
|
83
|
+
}
|
|
84
|
+
return `[unresolved new expression]`;
|
|
85
|
+
}
|
|
86
|
+
case "LogicalExpression": {
|
|
87
|
+
const left = resolveNodeValue(node.left, scope);
|
|
88
|
+
if (left && !String(left).startsWith("[")) {
|
|
89
|
+
return left;
|
|
90
|
+
}
|
|
91
|
+
return resolveNodeValue(node.right, scope);
|
|
92
|
+
}
|
|
93
|
+
case "ConditionalExpression": {
|
|
94
|
+
const consequent = resolveNodeValue(node.consequent, scope);
|
|
95
|
+
if (consequent && !String(consequent).startsWith("[")) {
|
|
96
|
+
return consequent;
|
|
97
|
+
}
|
|
98
|
+
return resolveNodeValue(node.alternate, scope);
|
|
99
|
+
}
|
|
100
|
+
case "BinaryExpression": {
|
|
101
|
+
const left = resolveNodeValue(node.left, scope);
|
|
102
|
+
const right = resolveNodeValue(node.right, scope);
|
|
103
|
+
if (left !== null &&
|
|
104
|
+
right !== null &&
|
|
105
|
+
!String(left).startsWith("[") &&
|
|
106
|
+
!String(right).startsWith("[")) {
|
|
107
|
+
// eslint-disable-next-line default-case
|
|
108
|
+
switch (node.operator) {
|
|
109
|
+
case "+":
|
|
110
|
+
return left + right;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return `[unresolved binary expression: ${node.operator}]`;
|
|
114
|
+
}
|
|
115
|
+
default:
|
|
116
|
+
return `[unsupported node type: ${node.type}]`;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const resolveFetch = (chunks, directory, formats) => __awaiter(void 0, void 0, void 0, function* () {
|
|
120
|
+
console.log(chalk.cyan("[i] Resolving fetch instances"));
|
|
121
|
+
for (const chunk of Object.values(chunks)) {
|
|
122
|
+
if (!chunk.containsFetch || !chunk.file) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const filePath = path.join(directory, chunk.file);
|
|
126
|
+
let fileContent;
|
|
127
|
+
try {
|
|
128
|
+
fileContent = fs.readFileSync(filePath, "utf-8");
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.log(chalk.red(`[!] Could not read file: ${filePath}`));
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
let fileAst;
|
|
135
|
+
try {
|
|
136
|
+
fileAst = parser.parse(fileContent, {
|
|
137
|
+
sourceType: "module",
|
|
138
|
+
plugins: ["jsx", "typescript"],
|
|
139
|
+
errorRecovery: true,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
console.log(chalk.red(`[!] Failed to parse file: ${filePath}. Error: ${err.message}`));
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const fetchAliases = new Set();
|
|
147
|
+
// Pass 1: Find fetch aliases on the full file AST
|
|
148
|
+
traverse(fileAst, {
|
|
149
|
+
VariableDeclarator(path) {
|
|
150
|
+
if (path.node.id.type === "Identifier" && path.node.init) {
|
|
151
|
+
if (path.node.init.type === "Identifier" &&
|
|
152
|
+
path.node.init.name === "fetch") {
|
|
153
|
+
const binding = path.scope.getBinding(path.node.id.name);
|
|
154
|
+
if (binding)
|
|
155
|
+
fetchAliases.add(binding);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
// Pass 2: Find and resolve fetch calls on the full file AST
|
|
161
|
+
traverse(fileAst, {
|
|
162
|
+
CallExpression(path) {
|
|
163
|
+
let isFetchCall = false;
|
|
164
|
+
const calleeName = path.node.callee.name;
|
|
165
|
+
if (calleeName === "fetch") {
|
|
166
|
+
isFetchCall = true;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const binding = path.scope.getBinding(calleeName);
|
|
170
|
+
if (binding && fetchAliases.has(binding)) {
|
|
171
|
+
isFetchCall = true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (isFetchCall) {
|
|
175
|
+
console.log(chalk.blue(`[+] Found fetch call in chunk ${chunk.id} (${chunk.file}) at L${path.node.loc.start.line}`));
|
|
176
|
+
const args = path.node.arguments;
|
|
177
|
+
if (args.length > 0) {
|
|
178
|
+
const url = resolveNodeValue(args[0], path.scope);
|
|
179
|
+
console.log(chalk.green(` URL: ${url}`));
|
|
180
|
+
if (args.length > 1) {
|
|
181
|
+
const options = resolveNodeValue(args[1], path.scope);
|
|
182
|
+
if (typeof options === "object" &&
|
|
183
|
+
options !== null) {
|
|
184
|
+
console.log(chalk.green(` Method: ${options.method || "GET"}`));
|
|
185
|
+
if (options.headers)
|
|
186
|
+
console.log(chalk.green(` Headers: ${JSON.stringify(options.headers)}`));
|
|
187
|
+
if (options.body)
|
|
188
|
+
console.log(chalk.green(` Body: ${JSON.stringify(options.body)}`));
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
console.log(chalk.yellow(` Options: ${options}`));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
export default resolveFetch;
|
|
201
|
+
//# sourceMappingURL=resolveFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveFetch.js","sourceRoot":"","sources":["../../../src/map/next_js/resolveFetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import endpoints from "../endpoints/index.js";
|
|
11
|
+
import strings from "../strings/index.js";
|
|
12
|
+
import map from "../map/index.js";
|
|
13
|
+
import * as globalsUtil from "../utility/globals.js";
|
|
14
|
+
import * as fs from "fs";
|
|
15
|
+
import lazyLoad from "../lazyLoad/index.js";
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
export default (cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
globalsUtil.setApiGatewayConfigFile(cmd.apiGatewayConfig);
|
|
19
|
+
globalsUtil.setUseApiGateway(cmd.apiGateway);
|
|
20
|
+
globalsUtil.setDisableCache(cmd.disableCache);
|
|
21
|
+
globalsUtil.setRespCacheFile(cmd.cacheFile);
|
|
22
|
+
globalsUtil.setYes(cmd.yes);
|
|
23
|
+
const targetHost = new URL(cmd.url).host;
|
|
24
|
+
console.log(chalk.bgGreenBright("[+] Starting analysis..."));
|
|
25
|
+
console.log(chalk.bgCyan("[1/6] Running lazyload to download JavaScript files..."));
|
|
26
|
+
yield lazyLoad(cmd.url, cmd.output, cmd.strictScope, cmd.scope.split(","), cmd.threads, false, "");
|
|
27
|
+
console.log(chalk.bgGreen("[+] Lazyload complete."));
|
|
28
|
+
// globals.setTech("next");
|
|
29
|
+
// if tech is undefined, i.e. it can't be detected, quit. Nothing to be done :(
|
|
30
|
+
if (globalsUtil.getTech() === "") {
|
|
31
|
+
console.log(chalk.bgRed("[!] Technology not detected. Quitting."));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// run strings
|
|
35
|
+
console.log(chalk.bgCyan("[2/6] Running strings to extract endpoints..."));
|
|
36
|
+
yield strings(cmd.output, "strings.json", true, "extracted_urls", false, false, false);
|
|
37
|
+
console.log(chalk.bgGreen("[+] Strings complete."));
|
|
38
|
+
// run lazyload with subsequent requests
|
|
39
|
+
console.log(chalk.bgCyan("[3/6] Running lazyload with subsequent requests to download JavaScript files..."));
|
|
40
|
+
yield lazyLoad(cmd.url, cmd.output, cmd.strictScope, cmd.scope.split(","), cmd.threads, true, "extracted_urls.json");
|
|
41
|
+
console.log(chalk.bgGreen("[+] Lazyload with subsequent requests complete."));
|
|
42
|
+
// run strings again to extract endpoints from the files that are downloaded in the previous step
|
|
43
|
+
console.log(chalk.bgCyan("[4/6] Running strings again to extract endpoints..."));
|
|
44
|
+
yield strings(cmd.output, "strings.json", true, "extracted_urls", cmd.secrets, true, true);
|
|
45
|
+
console.log(chalk.bgGreen("[+] Strings complete."));
|
|
46
|
+
// now, run endpoints
|
|
47
|
+
console.log(chalk.bgCyan("[5/6] Running endpoints to extract endpoints..."));
|
|
48
|
+
// check if the subsequent requests directory exists
|
|
49
|
+
if (fs.existsSync(`output/${targetHost}/___subsequent_requests`)) {
|
|
50
|
+
yield endpoints(cmd.url, cmd.output, "strings", ["json"], globalsUtil.getTech(), false, `output/${targetHost}/___subsequent_requests`);
|
|
51
|
+
console.log(chalk.bgGreen("[+] Endpoints complete."));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(chalk.bgYellow("[!] Subsequent requests directory does not exist. Skipping endpoints."));
|
|
55
|
+
}
|
|
56
|
+
// now, run map
|
|
57
|
+
console.log(chalk.bgCyan("[6/6] Running map to find functions..."));
|
|
58
|
+
yield map(cmd.output, "mapped", ["json"], globalsUtil.getTech(), false, false);
|
|
59
|
+
console.log(chalk.bgGreen("[+] Map complete."));
|
|
60
|
+
console.log(chalk.bgGreenBright("[+] Analysis complete."));
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"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"}
|