@shriyanss/js-recon 1.0.0 → 1.1.0-beta.2
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/.github/workflows/build-and-prettify.yaml +65 -0
- package/.github/workflows/npm-publish.yml +35 -0
- package/.prettierignore +2 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +50 -0
- package/README.md +35 -139
- 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 +199 -0
- package/build/api_gateway/genReq.js.map +1 -0
- package/build/api_gateway/index.js +275 -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 +78 -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 +22 -0
- package/build/lazyLoad/globals.js.map +1 -0
- package/build/lazyLoad/index.js +170 -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 +108 -0
- package/build/map/next_js/getFetchInstances.js.map +1 -0
- package/build/map/next_js/getWebpackConnections.js +227 -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 +238 -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 +229 -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/CNAME +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/package.json +50 -38
- 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,78 @@
|
|
|
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
|
+
const traverse = _traverse.default;
|
|
14
|
+
import fs from "fs";
|
|
15
|
+
import path from "path";
|
|
16
|
+
const client_jsonParse = (directory) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
let foundUrls = [];
|
|
18
|
+
console.log(chalk.cyan("[i] Searching for client-side paths in JSON.parse()"));
|
|
19
|
+
// filter out the directories
|
|
20
|
+
let files = fs.readdirSync(directory, {
|
|
21
|
+
recursive: true,
|
|
22
|
+
encoding: "utf8",
|
|
23
|
+
});
|
|
24
|
+
files = files.filter((file) => !fs.statSync(path.join(directory, file)).isDirectory());
|
|
25
|
+
// filter out the subsequent requests files
|
|
26
|
+
files = files.filter((file) => !file.startsWith("___subsequent_requests"));
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
// read the file
|
|
29
|
+
const code = fs.readFileSync(path.join(directory, file), "utf8");
|
|
30
|
+
// parse the code with ast
|
|
31
|
+
let ast;
|
|
32
|
+
try {
|
|
33
|
+
ast = parser.parse(code, {
|
|
34
|
+
sourceType: "unambiguous",
|
|
35
|
+
plugins: ["jsx", "typescript"],
|
|
36
|
+
});
|
|
37
|
+
// traverse the ast, and find all the instances where JSON.parse() is used with a string as its
|
|
38
|
+
// argument, and if you parse that string, it contains paths
|
|
39
|
+
traverse(ast, {
|
|
40
|
+
CallExpression(path) {
|
|
41
|
+
const callee = path.get("callee");
|
|
42
|
+
if (callee.matchesPattern("JSON.parse")) {
|
|
43
|
+
const args = path.get("arguments");
|
|
44
|
+
if (args.length > 0 && args[0].isStringLiteral()) {
|
|
45
|
+
const jsonString = args[0].node.value;
|
|
46
|
+
try {
|
|
47
|
+
const parsedData = JSON.parse(jsonString);
|
|
48
|
+
// get all the keys of parsedData
|
|
49
|
+
const keys = Object.keys(parsedData);
|
|
50
|
+
// check if they all match the regex of path
|
|
51
|
+
let matched = true;
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
if (!key.match(/^\/[\w\.\/\-]*$/)) {
|
|
54
|
+
matched = false;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (matched) {
|
|
59
|
+
// push all the keys to foundUrls
|
|
60
|
+
foundUrls.push(...keys);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
// Ignore errors from JSON.parse
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
console.error(chalk.red(`[!] Error when parsing JSON: ${err}`));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return foundUrls;
|
|
76
|
+
});
|
|
77
|
+
export default client_jsonParse;
|
|
78
|
+
//# sourceMappingURL=client_jsonParse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client_jsonParse.js","sourceRoot":"","sources":["../../../src/endpoints/next_js/client_jsonParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
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 fs from "fs";
|
|
12
|
+
import path from "path";
|
|
13
|
+
import parser from "@babel/parser";
|
|
14
|
+
import _traverse from "@babel/traverse";
|
|
15
|
+
import makeRequest from "../../utility/makeReq.js";
|
|
16
|
+
const traverse = _traverse.default;
|
|
17
|
+
let toReturn = [];
|
|
18
|
+
const checkHref = (files, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
// open each file and read the contents
|
|
20
|
+
for (const file of files) {
|
|
21
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
22
|
+
// go through each line
|
|
23
|
+
const lines = content.split("\n");
|
|
24
|
+
for (const line of lines) {
|
|
25
|
+
// check what is the type of line's content by matching it against regex
|
|
26
|
+
if (line.match(/^[0-9a-z]+:I\[.+/)) {
|
|
27
|
+
// console.log("JS Chunks");
|
|
28
|
+
continue;
|
|
29
|
+
// } else if (line.match(/^[0-9a-z\s\.]+:([A-Za-z0-9\,\.\s\-]+:)?[\[\{].+/)) {
|
|
30
|
+
}
|
|
31
|
+
else if (line.match(/^[0-9a-z]+:\[.+/)) {
|
|
32
|
+
// extract the JS code. i.e. between [ and ]
|
|
33
|
+
let jsCode;
|
|
34
|
+
try {
|
|
35
|
+
jsCode = `[${line.match(/\[(.+)\]/)[1]}]`;
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// parse JS code with ast
|
|
41
|
+
let ast;
|
|
42
|
+
try {
|
|
43
|
+
ast = parser.parse(jsCode, {
|
|
44
|
+
sourceType: "unambiguous",
|
|
45
|
+
plugins: ["jsx", "typescript"],
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// traverse the ast, and find the objects with href, and external
|
|
52
|
+
let finds = [];
|
|
53
|
+
traverse(ast, {
|
|
54
|
+
ObjectExpression(path) {
|
|
55
|
+
const properties = path.node.properties;
|
|
56
|
+
let hasHrefOrUrl = false;
|
|
57
|
+
let hasExternal = false;
|
|
58
|
+
let hasChildren = false;
|
|
59
|
+
let hrefValue = null;
|
|
60
|
+
let externalValue = null;
|
|
61
|
+
for (const prop of properties) {
|
|
62
|
+
const prop_name = jsCode.substring(prop.key.start, prop.key.end);
|
|
63
|
+
if (prop_name === '"href"') {
|
|
64
|
+
hasHrefOrUrl = true;
|
|
65
|
+
hrefValue = jsCode
|
|
66
|
+
.substring(prop.value.start, prop.value.end)
|
|
67
|
+
.replace(/^"|"$/g, "");
|
|
68
|
+
}
|
|
69
|
+
if (prop_name === '"external"') {
|
|
70
|
+
hasExternal = true;
|
|
71
|
+
externalValue = jsCode
|
|
72
|
+
.substring(prop.value.start, prop.value.end)
|
|
73
|
+
.replace(/^"|"$/g, "");
|
|
74
|
+
}
|
|
75
|
+
if (prop_name === '"children"') {
|
|
76
|
+
hasChildren = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (hasHrefOrUrl) {
|
|
80
|
+
if ((hasExternal || hasChildren) &&
|
|
81
|
+
!hrefValue.startsWith("#")) {
|
|
82
|
+
// if the path doesn't starts with a `/`, then resolve the path
|
|
83
|
+
if (!hrefValue.startsWith("/") &&
|
|
84
|
+
!hrefValue.startsWith("http")) {
|
|
85
|
+
let path = file
|
|
86
|
+
.replace(/output\/[a-zA-Z0-9_\.\-]+\/___subsequent_requests\//, "/")
|
|
87
|
+
.split("/");
|
|
88
|
+
// remove the last one
|
|
89
|
+
path.pop();
|
|
90
|
+
path = path.join("/");
|
|
91
|
+
const fileUrl = url + path;
|
|
92
|
+
// now, resolve the path
|
|
93
|
+
const resolvedPath = new URL(hrefValue, fileUrl).href;
|
|
94
|
+
finds.push({
|
|
95
|
+
href: resolvedPath,
|
|
96
|
+
external: externalValue,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
finds.push({
|
|
101
|
+
href: hrefValue,
|
|
102
|
+
external: externalValue,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// // iterate through the finds and resolve the paths
|
|
110
|
+
// for (const find of finds) {
|
|
111
|
+
// console.log(find);
|
|
112
|
+
// report += `### ${find.href}\n`;
|
|
113
|
+
// report += `${find.external}\n`;
|
|
114
|
+
// }
|
|
115
|
+
for (const find of finds) {
|
|
116
|
+
toReturn.push(find.href);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// console.log("Unknown");
|
|
121
|
+
// console.log(line);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
const checkSlug = (files, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
128
|
+
// open each file and read the contents
|
|
129
|
+
for (const file of files) {
|
|
130
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
131
|
+
// go through each line
|
|
132
|
+
const lines = content.split("\n");
|
|
133
|
+
for (const line of lines) {
|
|
134
|
+
if (line.match(/^[0-9a-z]+:I\[.+/)) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
else if (line.match(/^[0-9a-z]+:\[.+/)) {
|
|
138
|
+
let jsCode;
|
|
139
|
+
try {
|
|
140
|
+
jsCode = `[${line.match(/\[(.+)\]/)[1]}]`;
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
let jsonObject;
|
|
146
|
+
try {
|
|
147
|
+
jsonObject = JSON.parse(jsCode);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const slugUrls = [];
|
|
153
|
+
const traverse = (obj) => {
|
|
154
|
+
if (obj && typeof obj === "object") {
|
|
155
|
+
if (obj.slug) {
|
|
156
|
+
const slugUrl = new URL(obj.slug, file.replace(/output\/[a-zA-Z0-9_\.\-]+\/___subsequent_requests\//, url + "/")).href;
|
|
157
|
+
slugUrls.push(slugUrl);
|
|
158
|
+
}
|
|
159
|
+
Object.values(obj).forEach((value) => traverse(value));
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
traverse(jsonObject);
|
|
163
|
+
for (const path of slugUrls) {
|
|
164
|
+
const res = yield makeRequest(path, {});
|
|
165
|
+
const statusCode = res.status;
|
|
166
|
+
if (statusCode !== 404) {
|
|
167
|
+
toReturn.push(path);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
const client_subsequentRequests = (subsequentRequestsDir, url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
178
|
+
// let report = `## Subsequent Requests\n`;
|
|
179
|
+
console.log(chalk.cyan("[i] Using subsequent requests file method"));
|
|
180
|
+
// get all the files in the directory
|
|
181
|
+
const walkSync = (dir, files = []) => {
|
|
182
|
+
fs.readdirSync(dir).forEach((file) => {
|
|
183
|
+
let dirFile = path.join(dir, file);
|
|
184
|
+
if (fs.statSync(dirFile).isDirectory()) {
|
|
185
|
+
walkSync(dirFile, files);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
files.push(dirFile);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
return files;
|
|
192
|
+
};
|
|
193
|
+
const files = walkSync(subsequentRequestsDir);
|
|
194
|
+
yield checkHref(files, url);
|
|
195
|
+
// await checkSlug(files, url);
|
|
196
|
+
return toReturn;
|
|
197
|
+
});
|
|
198
|
+
export default client_subsequentRequests;
|
|
199
|
+
//# sourceMappingURL=client_subsequentRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client_subsequentRequests.js","sourceRoot":"","sources":["../../../src/endpoints/next_js/client_subsequentRequests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import parser from "@babel/parser";
|
|
2
|
+
import _traverse from "@babel/traverse";
|
|
3
|
+
const traverse = _traverse.default;
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
const getWebpacks = (directory) => {
|
|
8
|
+
console.log(chalk.cyan("[i] Getting webpacks"));
|
|
9
|
+
let webpacks = {};
|
|
10
|
+
// get all files in the directory
|
|
11
|
+
let files;
|
|
12
|
+
files = fs.readdirSync(directory, { recursive: true });
|
|
13
|
+
// filter out the directories
|
|
14
|
+
files = files.filter((file) => !fs.statSync(path.join(directory, file)).isDirectory());
|
|
15
|
+
// filter out the subsequent requests files
|
|
16
|
+
files = files.filter((file) => !file.startsWith("___subsequent_requests"));
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
const code = fs.readFileSync(path.join(directory, file), "utf8");
|
|
19
|
+
// parse the code with ast
|
|
20
|
+
let ast;
|
|
21
|
+
try {
|
|
22
|
+
ast = parser.parse(code, {
|
|
23
|
+
sourceType: "unambiguous",
|
|
24
|
+
plugins: ["jsx", "typescript"],
|
|
25
|
+
});
|
|
26
|
+
// find all the function definition like 219038: function() {}
|
|
27
|
+
traverse(ast, {
|
|
28
|
+
FunctionDeclaration(path) {
|
|
29
|
+
const name = path.node.id.name;
|
|
30
|
+
const body = path.node.body;
|
|
31
|
+
// check if the function name is an integer
|
|
32
|
+
if (!isNaN(name)) {
|
|
33
|
+
webpacks[name] = body;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return webpacks;
|
|
43
|
+
};
|
|
44
|
+
export default getWebpacks;
|
|
45
|
+
//# sourceMappingURL=getWebpacks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getWebpacks.js","sourceRoot":"","sources":["../../../src/endpoints/next_js/getWebpacks.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,iCAAiC;IACjC,IAAI,KAAK,CAAC;IACV,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,6BAA6B;IAC7B,KAAK,GAAG,KAAK,CAAC,MAAM,CAChB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CACnE,CAAC;IAEF,2CAA2C;IAC3C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAE3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAEjE,0BAA0B;QAC1B,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACD,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;gBACrB,UAAU,EAAE,aAAa;gBACzB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;aACjC,CAAC,CAAC;YAEH,8DAA8D;YAC9D,QAAQ,CAAC,GAAG,EAAE;gBACV,mBAAmB,CAAC,IAAI;oBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAE5B,2CAA2C;oBAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBAC1B,CAAC;gBACL,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,SAAS;QACb,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const githubURL = "https://github.com/shriyanss/js-recon";
|
|
2
|
+
const version = "1.1.0-beta.2";
|
|
3
|
+
const toolDesc = "JS Recon Tool";
|
|
4
|
+
let CONFIG = {
|
|
5
|
+
github: githubURL,
|
|
6
|
+
notFoundMessage: `If you believe this is an error or is a new technology, please create an issue on ${githubURL} and we'll figure it out for you`,
|
|
7
|
+
version: version,
|
|
8
|
+
toolDesc: toolDesc,
|
|
9
|
+
};
|
|
10
|
+
export default CONFIG;
|
|
11
|
+
//# sourceMappingURL=globalConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalConfig.js","sourceRoot":"","sources":["../src/globalConfig.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAC1D,MAAM,OAAO,GAAG,cAAc,CAAC;AAC/B,MAAM,QAAQ,GAAG,eAAe,CAAC;AAEjC,IAAI,MAAM,GAAG;IACT,MAAM,EAAE,SAAS;IACjB,eAAe,EAAE,qFAAqF,SAAS,kCAAkC;IACjJ,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;CACrB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
import { program } from "commander";
|
|
12
|
+
import lazyLoad from "./lazyLoad/index.js";
|
|
13
|
+
import endpoints from "./endpoints/index.js";
|
|
14
|
+
import CONFIG from "./globalConfig.js";
|
|
15
|
+
import strings from "./strings/index.js";
|
|
16
|
+
import apiGateway from "./api_gateway/index.js";
|
|
17
|
+
import map from "./map/index.js";
|
|
18
|
+
import * as globalsUtil from "./utility/globals.js";
|
|
19
|
+
import run from "./run/index.js";
|
|
20
|
+
import chalk from "chalk";
|
|
21
|
+
program.version(CONFIG.version).description(CONFIG.toolDesc);
|
|
22
|
+
const validAiOptions = ["description"];
|
|
23
|
+
program
|
|
24
|
+
.command("lazyload")
|
|
25
|
+
.description("Run lazy load module")
|
|
26
|
+
.requiredOption("-u, --url <url/file>", "Target URL or a file containing a list of URLs (one per line)")
|
|
27
|
+
.option("-o, --output <directory>", "Output directory", "output")
|
|
28
|
+
.option("--strict-scope", "Download JS files from only the input URL domain", false)
|
|
29
|
+
.option("-s, --scope <scope>", "Download JS files from specific domains (comma-separated)", "*")
|
|
30
|
+
.option("-t, --threads <threads>", "Number of threads to use", "1")
|
|
31
|
+
.option("--subsequent-requests", "Download JS files from subsequent requests (Next.JS only)", false)
|
|
32
|
+
.option("--urls-file <file>", "Input JSON file containing URLs", "extracted_urls.json")
|
|
33
|
+
.option("--api-gateway", "Generate requests using API Gateway", false)
|
|
34
|
+
.option("--api-gateway-config <file>", "API Gateway config file", ".api_gateway_config.json")
|
|
35
|
+
.option("--cache-file <file>", "File to store response cache", ".resp_cache.json")
|
|
36
|
+
.option("--disable-cache", "Disable response caching", false)
|
|
37
|
+
.option("-y, --yes", "Auto-approve executing JS code from the target", false)
|
|
38
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
+
globalsUtil.setApiGatewayConfigFile(cmd.apiGatewayConfig);
|
|
40
|
+
globalsUtil.setUseApiGateway(cmd.apiGateway);
|
|
41
|
+
globalsUtil.setDisableCache(cmd.disableCache);
|
|
42
|
+
globalsUtil.setRespCacheFile(cmd.cacheFile);
|
|
43
|
+
globalsUtil.setYes(cmd.yes);
|
|
44
|
+
yield lazyLoad(cmd.url, cmd.output, cmd.strictScope, cmd.scope.split(","), Number(cmd.threads), cmd.subsequentRequests, cmd.urlsFile);
|
|
45
|
+
}));
|
|
46
|
+
program
|
|
47
|
+
.command("endpoints")
|
|
48
|
+
.description("Extract API endpoints")
|
|
49
|
+
.option("-u, --url <url>", "Target Base URL (will be used to resolve relative paths)")
|
|
50
|
+
.option("-d, --directory <directory>", "Directory containing JS files")
|
|
51
|
+
.option("-o, --output <filename>", "Output filename (without file extension)", "endpoints")
|
|
52
|
+
.option("--output-format <format>", "Output format for the results comma-separated (available: json, md)", "json")
|
|
53
|
+
.option("-t, --tech <tech>", "Technology used in the JS files (run with -l/--list to see available options)")
|
|
54
|
+
.option("-l, --list", "List available technologies", false)
|
|
55
|
+
.option("--subsequent-requests-dir <directory>", "Directory containing subsequent requests (for Next.JS)")
|
|
56
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
yield endpoints(cmd.url, cmd.directory, cmd.output, cmd.outputFormat.split(","), cmd.tech, cmd.list, cmd.subsequentRequestsDir);
|
|
58
|
+
}));
|
|
59
|
+
program
|
|
60
|
+
.command("strings")
|
|
61
|
+
.description("Extract strings from JS files")
|
|
62
|
+
.requiredOption("-d, --directory <directory>", "Directory containing JS files")
|
|
63
|
+
.option("-o, --output <file>", "JSON file to save the strings", "strings.json")
|
|
64
|
+
.option("-e, --extract-urls", "Extract URLs from strings", false)
|
|
65
|
+
.option("--extracted-url-path <file>", "Output file for extracted URLs and paths (without extension)", "extracted_urls")
|
|
66
|
+
.option("-p, --permutate", "Permutate URLs and paths found", false)
|
|
67
|
+
.option("--openapi", "Generate OpenAPI specification from the paths found", false)
|
|
68
|
+
.option("-s, --scan-secrets", "Scan for secrets", false)
|
|
69
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
|
+
yield strings(cmd.directory, cmd.output, cmd.extractUrls, cmd.extractedUrlPath, cmd.scanSecrets, cmd.permutate, cmd.openapi);
|
|
71
|
+
}));
|
|
72
|
+
program
|
|
73
|
+
.command("api-gateway")
|
|
74
|
+
.description("Configure AWS API Gateway to rotate IP addresses")
|
|
75
|
+
.option("-i, --init", "Initialize the config file (create API)", false)
|
|
76
|
+
.option("-d, --destroy <id>", "Destroy API with the given ID")
|
|
77
|
+
.option("--destroy-all", "Destroy all the API created by this tool in all regions", false)
|
|
78
|
+
.option("-r, --region <region>", "AWS region (default: random region)")
|
|
79
|
+
.option("-a, --access-key <access-key>", "AWS access key (if not provided, AWS_ACCESS_KEY_ID environment variable will be used)")
|
|
80
|
+
.option("-s, --secret-key <secret-key>", "AWS secret key (if not provided, AWS_SECRET_ACCESS_KEY environment variable will be used)")
|
|
81
|
+
.option("-c, --config <config>", "Name of the config file", ".api_gateway_config.json")
|
|
82
|
+
.option("-l, --list", "List all the API created by this tool", false)
|
|
83
|
+
.option("--feasibility", "Check feasibility of API Gateway", false)
|
|
84
|
+
.option("--feasibility-url <url>", "URL to check feasibility of")
|
|
85
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
globalsUtil.setApiGatewayConfigFile(cmd.config);
|
|
87
|
+
globalsUtil.setUseApiGateway(true);
|
|
88
|
+
yield apiGateway(cmd.init, cmd.destroy, cmd.destroyAll, cmd.list, cmd.region, cmd.accessKey, cmd.secretKey, cmd.config, cmd.feasibility, cmd.feasibilityUrl);
|
|
89
|
+
}));
|
|
90
|
+
program
|
|
91
|
+
.command("map")
|
|
92
|
+
.description("Map all the functions")
|
|
93
|
+
.option("-d, --directory <directory>", "Directory containing JS files")
|
|
94
|
+
.option("-t, --tech <tech>", "Technology used in the JS files (run with -l/--list to see available options)")
|
|
95
|
+
.option("-l, --list", "List available technologies", false)
|
|
96
|
+
.option("-o, --output <file>", "Output file name (without extension)", "mapped")
|
|
97
|
+
.option("-f, --format <format>", "Output format for the results comma-separated (available: JSON)", "json")
|
|
98
|
+
.option("-i, --interactive", "Interactive mode", false)
|
|
99
|
+
.option("--ai <options>", "Use AI to analyze the code (comma-separated; available: description)")
|
|
100
|
+
.option("--ai-threads <threads>", "Number of threads to use for AI", "5")
|
|
101
|
+
.option("--ai-provider <provider>", "Service provider to use for AI (available: openai, ollama)", "openai")
|
|
102
|
+
.option("--ai-endpoint <endpoint>", "Endpoint to use for AI service (for Ollama, etc)")
|
|
103
|
+
.option("--openai-api-key <key>", "OpenAI API key")
|
|
104
|
+
.option("--model <model>", "AI model to use", "gpt-4o-mini")
|
|
105
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
var _a;
|
|
107
|
+
globalsUtil.setAi(((_a = cmd.ai) === null || _a === void 0 ? void 0 : _a.split(",")) || []);
|
|
108
|
+
globalsUtil.setAiServiceProvider(cmd.aiProvider);
|
|
109
|
+
globalsUtil.setOpenaiApiKey(cmd.openaiApiKey);
|
|
110
|
+
globalsUtil.setAiModel(cmd.model);
|
|
111
|
+
if (cmd.aiEndpoint)
|
|
112
|
+
globalsUtil.setAiEndpoint(cmd.aiEndpoint);
|
|
113
|
+
globalsUtil.setAiThreads(cmd.aiThreads);
|
|
114
|
+
// validate AI options
|
|
115
|
+
if (globalsUtil.getAi().length !== 0) {
|
|
116
|
+
for (const aiType of globalsUtil.getAi()) {
|
|
117
|
+
if (aiType !== "" && !validAiOptions.includes(aiType)) {
|
|
118
|
+
console.log(chalk.red(`[!] Invalid AI option: ${aiType}`));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
yield map(cmd.directory, cmd.output, cmd.format.split(","), cmd.tech, cmd.list, cmd.interactive);
|
|
124
|
+
}));
|
|
125
|
+
program
|
|
126
|
+
.command("run")
|
|
127
|
+
.description("Run all modules")
|
|
128
|
+
.requiredOption("-u, --url <url/file>", "Target URL or a file containing a list of URLs (one per line)")
|
|
129
|
+
.option("-o, --output <directory>", "Output directory", "output")
|
|
130
|
+
.option("--strict-scope", "Download JS files from only the input URL domain", false)
|
|
131
|
+
.option("-s, --scope <scope>", "Download JS files from specific domains (comma-separated)", "*")
|
|
132
|
+
.option("-t, --threads <threads>", "Number of threads to use", "1")
|
|
133
|
+
.option("--api-gateway", "Generate requests using API Gateway", false)
|
|
134
|
+
.option("--api-gateway-config <file>", "API Gateway config file", ".api_gateway_config.json")
|
|
135
|
+
.option("--cache-file <file>", "File to store response cache", ".resp_cache.json")
|
|
136
|
+
.option("--disable-cache", "Disable response caching", false)
|
|
137
|
+
.option("-y, --yes", "Auto-approve executing JS code from the target", false)
|
|
138
|
+
.option("--secrets", "Scan for secrets", false)
|
|
139
|
+
.option("--ai <options>", "Use AI to analyze the code (comma-separated; available: description)")
|
|
140
|
+
.option("--ai-threads <threads>", "Number of threads to use for AI", "5")
|
|
141
|
+
.option("--ai-provider <provider>", "Service provider to use for AI (available: openai, ollama)", "openai")
|
|
142
|
+
.option("--ai-endpoint <endpoint>", "Endpoint to use for AI service (for Ollama, etc)")
|
|
143
|
+
.option("--openai-api-key <key>", "OpenAI API key")
|
|
144
|
+
.option("--model <model>", "AI model to use", "gpt-4o-mini")
|
|
145
|
+
.action((cmd) => __awaiter(void 0, void 0, void 0, function* () {
|
|
146
|
+
var _a;
|
|
147
|
+
globalsUtil.setAi(((_a = cmd.ai) === null || _a === void 0 ? void 0 : _a.split(",")) || []);
|
|
148
|
+
globalsUtil.setOpenaiApiKey(cmd.openaiApiKey);
|
|
149
|
+
globalsUtil.setAiModel(cmd.model);
|
|
150
|
+
globalsUtil.setAiServiceProvider(cmd.aiProvider);
|
|
151
|
+
globalsUtil.setAiThreads(cmd.aiThreads);
|
|
152
|
+
if (cmd.aiEndpoint)
|
|
153
|
+
globalsUtil.setAiEndpoint(cmd.aiEndpoint);
|
|
154
|
+
// validate AI options
|
|
155
|
+
if (globalsUtil.getAi().length !== 0) {
|
|
156
|
+
for (const aiType of globalsUtil.getAi()) {
|
|
157
|
+
if (aiType !== "" && !validAiOptions.includes(aiType)) {
|
|
158
|
+
console.log(chalk.red(`[!] Invalid AI option: ${aiType}`));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
yield run(cmd);
|
|
164
|
+
}));
|
|
165
|
+
program.parse(process.argv);
|
|
166
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|