@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.
Files changed (198) hide show
  1. package/.api_gateway_config.json +1 -0
  2. package/.github/workflows/npm-publish.yml +35 -0
  3. package/.github/workflows/prettier.yaml +44 -0
  4. package/.prettierignore +2 -0
  5. package/.prettierrc +4 -0
  6. package/.resp_cache.json +1 -0
  7. package/.vscode/launch.json +27 -0
  8. package/CHANGELOG.md +40 -0
  9. package/README.md +35 -140
  10. package/build/api_gateway/checkFeasibility.js +32 -0
  11. package/build/api_gateway/checkFeasibility.js.map +1 -0
  12. package/build/api_gateway/checkFireWallBlocking.js +24 -0
  13. package/build/api_gateway/checkFireWallBlocking.js.map +1 -0
  14. package/build/api_gateway/genReq.js +202 -0
  15. package/build/api_gateway/genReq.js.map +1 -0
  16. package/build/api_gateway/index.js +277 -0
  17. package/build/api_gateway/index.js.map +1 -0
  18. package/build/endpoints/gen_report/gen_json.js +22 -0
  19. package/build/endpoints/gen_report/gen_json.js.map +1 -0
  20. package/build/endpoints/gen_report/gen_markdown.js +66 -0
  21. package/build/endpoints/gen_report/gen_markdown.js.map +1 -0
  22. package/build/endpoints/gen_report/utility/iterate_n_store.js +46 -0
  23. package/build/endpoints/gen_report/utility/iterate_n_store.js.map +1 -0
  24. package/build/endpoints/index.js +89 -0
  25. package/build/endpoints/index.js.map +1 -0
  26. package/build/endpoints/next_js/client_jsFilesHref.js +91 -0
  27. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -0
  28. package/build/endpoints/next_js/client_jsonParse.js +75 -0
  29. package/build/endpoints/next_js/client_jsonParse.js.map +1 -0
  30. package/build/endpoints/next_js/client_subsequentRequests.js +199 -0
  31. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -0
  32. package/build/endpoints/next_js/getWebpacks.js +45 -0
  33. package/build/endpoints/next_js/getWebpacks.js.map +1 -0
  34. package/build/globalConfig.js +11 -0
  35. package/build/globalConfig.js.map +1 -0
  36. package/build/index.js +166 -0
  37. package/build/index.js.map +1 -0
  38. package/build/lazyLoad/downloadFilesUtil.js +128 -0
  39. package/build/lazyLoad/downloadFilesUtil.js.map +1 -0
  40. package/build/lazyLoad/downloadLoadedJsUtil.js +51 -0
  41. package/build/lazyLoad/downloadLoadedJsUtil.js.map +1 -0
  42. package/build/lazyLoad/globals.js +25 -0
  43. package/build/lazyLoad/globals.js.map +1 -0
  44. package/build/lazyLoad/index.js +171 -0
  45. package/build/lazyLoad/index.js.map +1 -0
  46. package/build/lazyLoad/next_js/next_GetJSScript.js +94 -0
  47. package/build/lazyLoad/next_js/next_GetJSScript.js.map +1 -0
  48. package/build/lazyLoad/next_js/next_GetLazyResources.js +202 -0
  49. package/build/lazyLoad/next_js/next_GetLazyResources.js.map +1 -0
  50. package/build/lazyLoad/next_js/next_SubsequentRequests.js +120 -0
  51. package/build/lazyLoad/next_js/next_SubsequentRequests.js.map +1 -0
  52. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +188 -0
  53. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -0
  54. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +75 -0
  55. package/build/lazyLoad/nuxt_js/nuxt_getFromPageSource.js.map +1 -0
  56. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +94 -0
  57. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -0
  58. package/build/lazyLoad/svelte/svelte_getFromPageSource.js +68 -0
  59. package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -0
  60. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +95 -0
  61. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -0
  62. package/build/map/index.js +58 -0
  63. package/build/map/index.js.map +1 -0
  64. package/build/map/next_js/getFetchInstances.js +105 -0
  65. package/build/map/next_js/getFetchInstances.js.map +1 -0
  66. package/build/map/next_js/getWebpackConnections.js +224 -0
  67. package/build/map/next_js/getWebpackConnections.js.map +1 -0
  68. package/build/map/next_js/interactive.js +32 -0
  69. package/build/map/next_js/interactive.js.map +1 -0
  70. package/build/map/next_js/interactive_helpers/commandHandler.js +190 -0
  71. package/build/map/next_js/interactive_helpers/commandHandler.js.map +1 -0
  72. package/build/map/next_js/interactive_helpers/commandHelpers.js +91 -0
  73. package/build/map/next_js/interactive_helpers/commandHelpers.js.map +1 -0
  74. package/build/map/next_js/interactive_helpers/helpMenu.js +11 -0
  75. package/build/map/next_js/interactive_helpers/helpMenu.js.map +1 -0
  76. package/build/map/next_js/interactive_helpers/keybindings.js +80 -0
  77. package/build/map/next_js/interactive_helpers/keybindings.js.map +1 -0
  78. package/build/map/next_js/interactive_helpers/printer.js +17 -0
  79. package/build/map/next_js/interactive_helpers/printer.js.map +1 -0
  80. package/build/map/next_js/interactive_helpers/ui.js +81 -0
  81. package/build/map/next_js/interactive_helpers/ui.js.map +1 -0
  82. package/build/map/next_js/resolveFetch.js +201 -0
  83. package/build/map/next_js/resolveFetch.js.map +1 -0
  84. package/build/run/index.js +62 -0
  85. package/build/run/index.js.map +1 -0
  86. package/build/strings/index.js +235 -0
  87. package/build/strings/index.js.map +1 -0
  88. package/build/strings/openapi.js +55 -0
  89. package/build/strings/openapi.js.map +1 -0
  90. package/build/strings/permutate.js +55 -0
  91. package/build/strings/permutate.js.map +1 -0
  92. package/build/strings/secrets.js +89 -0
  93. package/build/strings/secrets.js.map +1 -0
  94. package/build/techDetect/index.js +224 -0
  95. package/build/techDetect/index.js.map +1 -0
  96. package/build/utility/ai.js +69 -0
  97. package/build/utility/ai.js.map +1 -0
  98. package/build/utility/globals.js +84 -0
  99. package/build/utility/globals.js.map +1 -0
  100. package/build/utility/interfaces.js +2 -0
  101. package/build/utility/interfaces.js.map +1 -0
  102. package/build/utility/makeReq.js +265 -0
  103. package/build/utility/makeReq.js.map +1 -0
  104. package/build/utility/resolvePath.js +44 -0
  105. package/build/utility/resolvePath.js.map +1 -0
  106. package/{utility → build/utility}/runSandboxed.js +10 -13
  107. package/build/utility/runSandboxed.js.map +1 -0
  108. package/{utility → build/utility}/urlUtils.js +9 -11
  109. package/build/utility/urlUtils.js.map +1 -0
  110. package/docs/README.md +20 -0
  111. package/docs/api-gateway.md +68 -0
  112. package/docs/endpoints.md +49 -0
  113. package/docs/example-scenario.md +258 -0
  114. package/docs/interactive-mode.md +76 -0
  115. package/docs/lazyload.md +56 -0
  116. package/docs/map.md +53 -0
  117. package/docs/run.md +54 -0
  118. package/docs/strings.md +75 -0
  119. package/endpoints.json +77 -0
  120. package/extracted_urls-openapi.json +225 -0
  121. package/extracted_urls-swagger.json +225 -0
  122. package/extracted_urls.json +47 -0
  123. package/extracted_urls.txt +296 -0
  124. package/mapped.json +3413 -0
  125. package/output/ss0x00.com/_next/data/k7xKVnxmboK4SktY2dZWt/index.json +971 -0
  126. package/output/ss0x00.com/_next/static/chunks/12.7e6d2ac6e1808fc2.js +247 -0
  127. package/output/ss0x00.com/_next/static/chunks/128.160aa801ef0445bc.js +1074 -0
  128. package/output/ss0x00.com/_next/static/chunks/132.55df84f7707fc278.js +102 -0
  129. package/output/ss0x00.com/_next/static/chunks/142.77038c55d9ec10ba.js +96 -0
  130. package/output/ss0x00.com/_next/static/chunks/215.321479e91d330bfa.js +228 -0
  131. package/output/ss0x00.com/_next/static/chunks/229.097c396d86b4a882.js +458 -0
  132. package/output/ss0x00.com/_next/static/chunks/257.5fd052aa4ef06ef9.js +1327 -0
  133. package/output/ss0x00.com/_next/static/chunks/268.72cb3779f66db70b.js +10520 -0
  134. package/output/ss0x00.com/_next/static/chunks/320.57d528b0e9bf86f0.js +186 -0
  135. package/output/ss0x00.com/_next/static/chunks/325.302a44b604c35f17.js +88 -0
  136. package/output/ss0x00.com/_next/static/chunks/328.e4a0307a4fddf318.js +248 -0
  137. package/output/ss0x00.com/_next/static/chunks/432.3621f17504ef18f2.js +443 -0
  138. package/output/ss0x00.com/_next/static/chunks/44.e90dd963003a3d43.js +1094 -0
  139. package/output/ss0x00.com/_next/static/chunks/442.8c054f100f9e5e50.js +1082 -0
  140. package/output/ss0x00.com/_next/static/chunks/460.f8db9a5142598e2c.js +466 -0
  141. package/output/ss0x00.com/_next/static/chunks/487.05ca55420459c002.js +78 -0
  142. package/output/ss0x00.com/_next/static/chunks/567.1909a6b0a920114b.js +1374 -0
  143. package/output/ss0x00.com/_next/static/chunks/586.802fc9214d87fb29.js +752 -0
  144. package/output/ss0x00.com/_next/static/chunks/620.a2a3a6b94d30a4c8.js +1037 -0
  145. package/output/ss0x00.com/_next/static/chunks/642.6b3e487c9604cbb8.js +1628 -0
  146. package/output/ss0x00.com/_next/static/chunks/673.e5d77887e5c6a68c.js +1045 -0
  147. package/output/ss0x00.com/_next/static/chunks/684.8b8e52baca70524b.js +96 -0
  148. package/output/ss0x00.com/_next/static/chunks/686.79480519e5ccfb77.js +296 -0
  149. package/output/ss0x00.com/_next/static/chunks/756.7a3878a2e6765be7.js +504 -0
  150. package/output/ss0x00.com/_next/static/chunks/761.7bea7516c5d22b2a.js +1485 -0
  151. package/output/ss0x00.com/_next/static/chunks/794.e079ef369b41a3c5.js +1350 -0
  152. package/output/ss0x00.com/_next/static/chunks/826.31ba213e1d023c68.js +1031 -0
  153. package/output/ss0x00.com/_next/static/chunks/847.d8397a73efc81848.js +1068 -0
  154. package/output/ss0x00.com/_next/static/chunks/848.5feaeee1e2624aea.js +132 -0
  155. package/output/ss0x00.com/_next/static/chunks/850.ecc7c3c3d787ee03.js +1472 -0
  156. package/output/ss0x00.com/_next/static/chunks/853.50b9eb60b7d0e83c.js +1472 -0
  157. package/output/ss0x00.com/_next/static/chunks/856.7a7bb6c3c7bfc2ba.js +1320 -0
  158. package/output/ss0x00.com/_next/static/chunks/859.df4bd45c03a65f53.js +1306 -0
  159. package/output/ss0x00.com/_next/static/chunks/867.e8633955a147c978.js +541 -0
  160. package/output/ss0x00.com/_next/static/chunks/921.c3123f20a4c8d53c.js +96 -0
  161. package/output/ss0x00.com/_next/static/chunks/932.25cb421c466c99cb.js +999 -0
  162. package/output/ss0x00.com/_next/static/chunks/framework-64ad27b21261a9ce.js +9189 -0
  163. package/output/ss0x00.com/_next/static/chunks/main-710ab85aa9a8f10d.js +6583 -0
  164. package/output/ss0x00.com/_next/static/chunks/pages/5D-af5a23529ce3c337.js +486 -0
  165. package/output/ss0x00.com/_next/static/chunks/pages/_app-c449865c8af1faa0.js +39 -0
  166. package/output/ss0x00.com/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +6383 -0
  167. package/output/ss0x00.com/_next/static/chunks/webpack-efff35ee26971294.js +271 -0
  168. package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_buildManifest.js +8 -0
  169. package/output/ss0x00.com/_next/static/k7xKVnxmboK4SktY2dZWt/_ssgManifest.js +3 -0
  170. package/output/ss0x00.com/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js +82 -0
  171. package/package.json +50 -38
  172. package/strings.json +7407 -0
  173. package/api_gateway/checkFeasibility.js +0 -25
  174. package/api_gateway/checkFireWallBlocking.js +0 -17
  175. package/api_gateway/genReq.js +0 -214
  176. package/api_gateway/index.js +0 -325
  177. package/endpoints/index.js +0 -7
  178. package/globalConfig.js +0 -12
  179. package/index.js +0 -69
  180. package/lazyLoad/downloadFilesUtil.js +0 -122
  181. package/lazyLoad/downloadLoadedJsUtil.js +0 -54
  182. package/lazyLoad/globals.js +0 -15
  183. package/lazyLoad/index.js +0 -167
  184. package/lazyLoad/next_js/next_GetJSScript.js +0 -99
  185. package/lazyLoad/next_js/next_GetLazyResources.js +0 -201
  186. package/lazyLoad/next_js/next_SubsequentRequests.js +0 -138
  187. package/lazyLoad/nuxt_js/nuxt_astParse.js +0 -194
  188. package/lazyLoad/nuxt_js/nuxt_getFromPageSource.js +0 -77
  189. package/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +0 -99
  190. package/research/firewall_bypass.md +0 -38
  191. package/research/next_js.md +0 -116
  192. package/research/nuxt_js.md +0 -125
  193. package/research/vue_js.md +0 -9
  194. package/strings/index.js +0 -145
  195. package/techDetect/index.js +0 -156
  196. package/utility/globals.js +0 -6
  197. package/utility/makeReq.js +0 -179
  198. package/utility/resolvePath.js +0 -43
@@ -0,0 +1,75 @@
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, { recursive: true });
21
+ files = files.filter((file) => !fs.statSync(path.join(directory, file)).isDirectory());
22
+ // filter out the subsequent requests files
23
+ files = files.filter((file) => !file.startsWith("___subsequent_requests"));
24
+ for (const file of files) {
25
+ // read the file
26
+ const code = fs.readFileSync(path.join(directory, file), "utf8");
27
+ // parse the code with ast
28
+ let ast;
29
+ try {
30
+ ast = parser.parse(code, {
31
+ sourceType: "unambiguous",
32
+ plugins: ["jsx", "typescript"],
33
+ });
34
+ // traverse the ast, and find all the instances where JSON.parse() is used with a string as its
35
+ // argument, and if you parse that string, it contains paths
36
+ traverse(ast, {
37
+ CallExpression(path) {
38
+ const callee = path.get("callee");
39
+ if (callee.matchesPattern("JSON.parse")) {
40
+ const args = path.get("arguments");
41
+ if (args.length > 0 && args[0].isStringLiteral()) {
42
+ const jsonString = args[0].node.value;
43
+ try {
44
+ const parsedData = JSON.parse(jsonString);
45
+ // get all the keys of parsedData
46
+ const keys = Object.keys(parsedData);
47
+ // check if they all match the regex of path
48
+ let matched = true;
49
+ for (const key of keys) {
50
+ if (!key.match(/^\/[\w\.\/\-]*$/)) {
51
+ matched = false;
52
+ break;
53
+ }
54
+ }
55
+ if (matched) {
56
+ // push all the keys to foundUrls
57
+ foundUrls.push(...keys);
58
+ }
59
+ }
60
+ catch (e) {
61
+ // Ignore errors from JSON.parse
62
+ }
63
+ }
64
+ }
65
+ },
66
+ });
67
+ }
68
+ catch (err) {
69
+ console.error(chalk.red(`[!] Error when parsing JSON: ${err}`));
70
+ }
71
+ }
72
+ return foundUrls;
73
+ });
74
+ export default client_jsonParse;
75
+ //# 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.1";
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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"}