@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,971 @@
1
+ {
2
+ "pageProps": {
3
+ "type": "PageLayout",
4
+ "title": "Home",
5
+ "colors": "colors-a",
6
+ "backgroundImage": {
7
+ "type": "BackgroundImage",
8
+ "url": "/images/backgrounds/bg1.jpg",
9
+ "backgroundSize": "cover",
10
+ "backgroundPosition": "center",
11
+ "backgroundRepeat": "no-repeat",
12
+ "opacity": 75,
13
+ "__metadata": { "modelName": "BackgroundImage" }
14
+ },
15
+ "sections": [
16
+ {
17
+ "elementId": "",
18
+ "colors": "colors-f",
19
+ "backgroundSize": "full",
20
+ "title": "I'm a pentester, bug bounty hunter, and like to mess with some code in my free time",
21
+ "subtitle": "While messing around with code, I created this site to display my work",
22
+ "styles": {
23
+ "self": {
24
+ "height": "auto",
25
+ "width": "wide",
26
+ "margin": ["mt-0", "mb-0", "ml-0", "mr-0"],
27
+ "padding": ["pt-36", "pb-48", "pl-4", "pr-4"],
28
+ "alignItems": "center",
29
+ "justifyContent": "center",
30
+ "flexDirection": "row-reverse"
31
+ },
32
+ "title": { "textAlign": "left" },
33
+ "subtitle": { "textAlign": "left" },
34
+ "text": { "textAlign": "left" },
35
+ "actions": { "justifyContent": "flex-start" }
36
+ },
37
+ "type": "HeroSection",
38
+ "actions": [],
39
+ "__metadata": { "modelName": "HeroSection" }
40
+ },
41
+ {
42
+ "type": "DividerSection",
43
+ "title": "Divider",
44
+ "elementId": "",
45
+ "styles": {
46
+ "self": {
47
+ "width": "narrow",
48
+ "padding": ["pt-36", "pb-36", "pl-4", "pr-4"],
49
+ "justifyContent": "center",
50
+ "borderWidth": 1
51
+ }
52
+ },
53
+ "__metadata": { "modelName": "DividerSection" }
54
+ },
55
+ {
56
+ "type": "FeaturedItemsSection",
57
+ "title": "Value propositions",
58
+ "items": [
59
+ {
60
+ "type": "FeaturedItem",
61
+ "title": "Hacker",
62
+ "subtitle": "Feels good when I break something",
63
+ "text": "",
64
+ "elementId": "",
65
+ "styles": { "self": { "textAlign": "left" } },
66
+ "actions": [
67
+ {
68
+ "type": "Button",
69
+ "label": "Go to my H1 profile 👨‍💻",
70
+ "altText": "",
71
+ "url": "https://hackerone.com/shriyanss",
72
+ "showIcon": false,
73
+ "icon": "arrowRight",
74
+ "iconPosition": "right",
75
+ "style": "primary",
76
+ "elementId": "",
77
+ "__metadata": { "modelName": "Button" }
78
+ }
79
+ ],
80
+ "__metadata": { "modelName": "FeaturedItem" }
81
+ },
82
+ {
83
+ "type": "FeaturedItem",
84
+ "title": "Programmer (Security Tools)",
85
+ "subtitle": "I also like writing code that would break stuff",
86
+ "text": "",
87
+ "elementId": "",
88
+ "styles": { "self": { "textAlign": "left" } },
89
+ "actions": [
90
+ {
91
+ "type": "Button",
92
+ "label": "Checkout my GitHub 😺",
93
+ "altText": "",
94
+ "url": "https://github.com/shriyanss",
95
+ "showIcon": false,
96
+ "icon": "arrowRight",
97
+ "iconPosition": "right",
98
+ "style": "primary",
99
+ "elementId": "",
100
+ "__metadata": { "modelName": "Button" }
101
+ }
102
+ ],
103
+ "__metadata": { "modelName": "FeaturedItem" }
104
+ },
105
+ {
106
+ "type": "FeaturedItem",
107
+ "title": "Blogger",
108
+ "subtitle": "And I like to document the above two",
109
+ "text": "",
110
+ "elementId": "",
111
+ "styles": { "self": { "textAlign": "left" } },
112
+ "actions": [
113
+ {
114
+ "type": "Button",
115
+ "label": "Read the blog 👓",
116
+ "altText": "",
117
+ "url": "/blog/",
118
+ "showIcon": false,
119
+ "icon": "arrowRight",
120
+ "iconPosition": "right",
121
+ "style": "primary",
122
+ "elementId": "",
123
+ "__metadata": { "modelName": "Button" }
124
+ }
125
+ ],
126
+ "__metadata": { "modelName": "FeaturedItem" }
127
+ }
128
+ ],
129
+ "actions": [],
130
+ "colors": "colors-f",
131
+ "columns": 1,
132
+ "spacingX": 16,
133
+ "spacingY": 16,
134
+ "elementId": "",
135
+ "styles": {
136
+ "self": {
137
+ "height": "auto",
138
+ "width": "narrow",
139
+ "padding": ["pt-28", "pb-36", "pl-4", "pr-4"],
140
+ "justifyContent": "center"
141
+ },
142
+ "title": { "textAlign": "left" },
143
+ "subtitle": { "textAlign": "left" },
144
+ "actions": { "justifyContent": "flex-start" }
145
+ },
146
+ "__metadata": { "modelName": "FeaturedItemsSection" }
147
+ },
148
+ {
149
+ "type": "DividerSection",
150
+ "title": "Divider",
151
+ "elementId": "",
152
+ "styles": {
153
+ "self": {
154
+ "width": "narrow",
155
+ "padding": ["pt-36", "pb-36", "pl-4", "pr-4"],
156
+ "justifyContent": "center",
157
+ "borderWidth": 1
158
+ }
159
+ },
160
+ "__metadata": { "modelName": "DividerSection" }
161
+ },
162
+ {
163
+ "type": "FeaturedPostsSection",
164
+ "elementId": "",
165
+ "colors": "colors-f",
166
+ "variant": "variant-d",
167
+ "subtitle": "Featured Posts",
168
+ "showFeaturedImage": false,
169
+ "actions": [
170
+ {
171
+ "type": "Link",
172
+ "label": "See all posts",
173
+ "url": "/blog",
174
+ "__metadata": { "modelName": "Link" }
175
+ }
176
+ ],
177
+ "posts": [
178
+ {
179
+ "type": "PostLayout",
180
+ "title": "Hello, World!",
181
+ "date": "2020-10-01",
182
+ "featuredImage": {
183
+ "type": "ImageBlock",
184
+ "url": "/images/blog/hello-world-theme.png",
185
+ "altText": "Post thumbnail image",
186
+ "caption": "Caption of the image",
187
+ "elementId": "",
188
+ "__metadata": { "modelName": "ImageBlock" }
189
+ },
190
+ "media": {
191
+ "type": "ImageBlock",
192
+ "url": "/images/blog/hello-world-theme.png",
193
+ "altText": "Hello world image",
194
+ "caption": "Hello, World!",
195
+ "elementId": "",
196
+ "__metadata": { "modelName": "ImageBlock" }
197
+ },
198
+ "addTitleSuffix": true,
199
+ "colors": "colors-a",
200
+ "backgroundImage": {
201
+ "type": "BackgroundImage",
202
+ "url": "/images/backgrounds/bg2.jpg",
203
+ "backgroundSize": "cover",
204
+ "backgroundPosition": "center",
205
+ "backgroundRepeat": "no-repeat",
206
+ "opacity": 100,
207
+ "__metadata": { "modelName": "BackgroundImage" }
208
+ },
209
+ "author": {
210
+ "type": "Person",
211
+ "firstName": "Shriyans",
212
+ "lastName": "Sudhi",
213
+ "role": "Role",
214
+ "bio": "I am a pentester, and bug bounty hunter, and I also write some offensive code in my free time",
215
+ "image": {
216
+ "type": "ImageBlock",
217
+ "url": "/images/people/Image.jpeg",
218
+ "altText": "Person photo",
219
+ "caption": "Caption of the image",
220
+ "elementId": "",
221
+ "__metadata": { "modelName": "ImageBlock" }
222
+ },
223
+ "__metadata": {
224
+ "id": "content/data/team/shriyanss.json",
225
+ "modelName": "Person"
226
+ }
227
+ },
228
+ "socialImage": "/images/blog/hello-world-theme.png",
229
+ "markdownContent": "Yet another Hello World post on the internet\n",
230
+ "__metadata": {
231
+ "id": "content/pages/blog/hello-world.md",
232
+ "modelName": "PostLayout",
233
+ "urlPath": "/blog/hello-world"
234
+ }
235
+ },
236
+ {
237
+ "type": "PostLayout",
238
+ "title": "The Security Puzzle of GraphQL – 1",
239
+ "date": "2024-07-02",
240
+ "excerpt": "GraphQL is getting widely adopted for APIs, but with features, it also brings home vulnerabilities.",
241
+ "featuredImage": {
242
+ "type": "ImageBlock",
243
+ "url": "/images/blog/security-puzzle-of-graphql.webp",
244
+ "altText": "Post thumbnail image",
245
+ "caption": "Caption of the image",
246
+ "elementId": "",
247
+ "__metadata": { "modelName": "ImageBlock" }
248
+ },
249
+ "media": {
250
+ "type": "ImageBlock",
251
+ "url": "/images/blog/security-puzzle-of-graphql.webp",
252
+ "altText": "Post image",
253
+ "caption": "Caption of the image",
254
+ "elementId": "",
255
+ "__metadata": { "modelName": "ImageBlock" }
256
+ },
257
+ "addTitleSuffix": true,
258
+ "colors": "colors-a",
259
+ "backgroundImage": {
260
+ "type": "BackgroundImage",
261
+ "url": "/images/backgrounds/bg2.jpg",
262
+ "backgroundSize": "cover",
263
+ "backgroundPosition": "center",
264
+ "backgroundRepeat": "no-repeat",
265
+ "opacity": 100,
266
+ "__metadata": { "modelName": "BackgroundImage" }
267
+ },
268
+ "markdownContent": "This post was published on SecureMyOrg’s website. Please check it out [here](https://securemyorg.com/the-security-puzzle-of-graphql-1/)\n",
269
+ "__metadata": {
270
+ "id": "content/pages/blog/the-security-puzzle-of-graphql-1.md",
271
+ "modelName": "PostLayout",
272
+ "urlPath": "/blog/the-security-puzzle-of-graphql-1"
273
+ }
274
+ },
275
+ {
276
+ "type": "PostLayout",
277
+ "title": "How did I land my first cybersecurity internship while being a high-school student?",
278
+ "date": "2024-06-22",
279
+ "excerpt": "I got my first cybersecurity internship at a high-school, without a degree. Here's how!",
280
+ "featuredImage": {
281
+ "type": "ImageBlock",
282
+ "url": "/images/blog/cybersecurity-internship.png",
283
+ "altText": "Post thumbnail image",
284
+ "caption": "Caption of the image",
285
+ "elementId": "",
286
+ "__metadata": { "modelName": "ImageBlock" }
287
+ },
288
+ "media": {
289
+ "type": "ImageBlock",
290
+ "url": "/images/blog/cybersecurity-internship.png",
291
+ "altText": "Post image",
292
+ "caption": "Caption of the image",
293
+ "elementId": "",
294
+ "__metadata": { "modelName": "ImageBlock" }
295
+ },
296
+ "addTitleSuffix": true,
297
+ "colors": "colors-a",
298
+ "backgroundImage": {
299
+ "type": "BackgroundImage",
300
+ "url": "/images/backgrounds/bg2.jpg",
301
+ "backgroundSize": "cover",
302
+ "backgroundPosition": "center",
303
+ "backgroundRepeat": "no-repeat",
304
+ "opacity": 100,
305
+ "__metadata": { "modelName": "BackgroundImage" }
306
+ },
307
+ "markdownContent": "Hi there 👋,\nI hope you are doing well. On May 17th, 2024, I signed my first internship even before I graduated my high school. This was a way too thrilling experience for me.\n\nSo first of all, I’ll share the general story (non-technical) part of this, and then, I’ll move to technical things, like what I knew, my experience, and the kind of résumé thing I sent (it wasn’t a PDF file, but all things written in email)\n\n## Thought of internship\n\nI was doing bug bounties for a while, and I wanted to learn more skills, so what could’ve been better than taking an internship? So here started the journey of finding an internship, but before the rocket was even built, I had some doubts about myself.\n\nThe biggest question I had, was “Will someone give an internship to a high school guy?”. I saw a video of Ishan Sharma, in which he said: “They rejected me because of my childish voice”. (over telephonic call; for hiring him for marketing,,, as I remember). Yes, it was his first rejection, but fortunately (or maybe unfortunately) not for me. Even though he was rejected at that time, now (at the time of writing this blog), he has 1.3 Million+ subscribers on YouTube, and he also started a marketing company.\n\nThis thought was also fueled by another person, [Ankur Warikoo](https://www.youtube.com/@warikoo). I read his first book [*Do Epic Shit*](https://amzn.in/d/5zNtzbM) and in that, a quote was written: “If you never ask, the answer is always *No!*“. Another topic was there in that book, and it was related to cold emailing. It described the power of cold-emailing, and also from YouTube videos of other people as well, I learned that people landed at jobs with the help of this.\n\nSo, it was time to write the email\n\n## Sending out emails\n\nThe first thing was, to whom will I reach out for an internship? A thought randomly came to my mind, that I had seen an internship opportunity a few months before, though, at that time, I had my exams, so I didn’t apply for it.\n\nIt was the time for writing an email, but what will I mention in it? The first thing that came to my mind was the bug bounty experience. This was the only real-life experience I had and for very obvious reasons. Apart from this, I have done some projects on my GitHub, so that’s a great idea to highlight in my email.\n\nSo, I quickly drafted an email, mentioning all my previous work in bug bounty, building hacking tools, blogs, etc. Now, it’s time to create a title. From all the videos and other resources I had consumed related to cold emails, I noticed that they all said that the email must have a catchy title. It was important to note that I wrote most of the things in points, and not in long paragraphs (just like this blog) because people generally don’t want to read a long boring, and too formal paragraph from a heap of emails. I made sure that it was easy for me to know maybe \\~50% about me within the first few moments of opening the email. To make the person open the email, I needed a good email subject line. So, I started thinking about it, and instantly, got a title: “Can a high school guy get an internship” (maybe I am quick at thinking such things). Now my email draft was looking kinda good.\n\nAlso, to maintain professionalism, I decided not to shoot it with my email with the “@gmail.com” domain, but instead shoot it with my work email “<shriyanss@ss0x00.com>” (yes, you can contact me here) and also to look kinda *‘cool’*.\n\nBut I didn’t just shoot the email immediately, instead, scheduled it for Monday morning (I drafted the email on the weekend). The reason for this is very straightforward: most people don’t like to open their work email on weekends (maybe a bug bounty hunter dropped a critical 🤪), and they also to make sure, that when they open their email on Monday, my email will appear fairly on the top of their inbox (as most of the email providers show latest emails first).\n\nI combined all these tricks with perfect timing, my email was sent out to the founder\n\nAlso, if you are thinking why I didn’t message him regarding this on LinkedIn or X, the reason is that, on those platforms, it is very easy for a message to get lost in messages from other people. Also, there’s nothing to distinguish (other than the user who sent the email) like the subject in the email. If I sent a message on that platform, he would see “Hi there, I hope you are doing well. I am ….” and it’s not at all interesting.\n",
308
+ "__metadata": {
309
+ "id": "content/pages/blog/how-did-i-land-at-my-first-cybersecurity-internship.md",
310
+ "modelName": "PostLayout",
311
+ "urlPath": "/blog/how-did-i-land-at-my-first-cybersecurity-internship"
312
+ }
313
+ },
314
+ {
315
+ "type": "PostLayout",
316
+ "title": "Wardrive without a GPS module and WiFi adapter that supports monitor mode, but a Raspberry Pi",
317
+ "date": "2023-02-01",
318
+ "excerpt": "I did wardrive,,,, without a proper wardrive gear, but with a raspberry pi, and my centuries old mobile phone.",
319
+ "featuredImage": {
320
+ "type": "ImageBlock",
321
+ "url": "/images/blog/wardrive-theme.jpeg",
322
+ "altText": "Post thumbnail image",
323
+ "caption": "Caption of the image",
324
+ "elementId": "",
325
+ "__metadata": { "modelName": "ImageBlock" }
326
+ },
327
+ "media": {
328
+ "type": "ImageBlock",
329
+ "url": "/images/blog/wardrive-theme.jpeg",
330
+ "altText": "Post image",
331
+ "caption": "Caption of the image",
332
+ "elementId": "",
333
+ "__metadata": { "modelName": "ImageBlock" }
334
+ },
335
+ "addTitleSuffix": true,
336
+ "colors": "colors-a",
337
+ "backgroundImage": {
338
+ "type": "BackgroundImage",
339
+ "url": "/images/backgrounds/bg2.jpg",
340
+ "backgroundSize": "cover",
341
+ "backgroundPosition": "center",
342
+ "backgroundRepeat": "no-repeat",
343
+ "opacity": 100,
344
+ "__metadata": { "modelName": "BackgroundImage" }
345
+ },
346
+ "markdownContent": "Hi there,\n\nI hope you are well. In this article, I will describe how you can plot all the WiFi networks in your area on map. This article will contain the following:-\n\n* Backstory\n\n* Hardware requirements\n\n* Installing the app on your mobile phone\n\n* The code\n\nYou can read about what wardriving is on [Wikipedia](http://bit.ly/3GXwJAt)\n\nSo, let’s get started\n\n## Backstory\n\nI was very fascinated when I heard about hacking WiFi, in fact, I started hacking to get free WiFi 😅, but then after I jumped into it, I started web hacking. So, keeping my wish for WiFi hacking, I somehow wrote a script for NodeMCU (it is a micro-controller with an onboard WiFi chip, which costs about ₹400 — approx $5. Read on Wikipedia here). It just collected the names of WiFi and not the GPS data. You can access the script I used for this at my GitHub page at [https://github.com/shriyanss/NodeMCU\\_WiFi\\_Logger](http://bit.ly/3wny6DO)\n\n![](/images/blog/gh_repo_wardrive.webp)\n\nGetting on the main point, in this attempt, I collected WiFi information which contains the following things:-\n\n* SSID\n\n* ESSID\n\n* Channel\n\n* Quality\n\n* Signal level\n\n* Encryption info\n\nIt also contains a timestamp, but it is not a part of WiFi.\n\nThe same thing can also be done with the help of just a mobile phone, but in this case, I wanted raw data, that is according to me, so I continued with this method\n\n## Hardware required\n\nI used the following things for this wardrive:-\n\n* A Raspberry Pi to collect WiFi information\n\n* A mobile phone to collect GPS data\n\n* A power bank for power supply\n\nInstalling application on your mobile phone\n\nFor tracking GPS, we also need an app installed on our phone, which will output the results to a file.\n\nIn my case, I am using an app named *GPS Logger*. This is a quite simple app and is according to our needs. You can download the app from Google Play [here](https://bit.ly/3WwIy6C)\n\nIf you are an iOS user, you can use an equivalent app for this task.\n\nAfter you are done installing, just follow the steps below:-\n\n* Open the app\n\n* Go to the settings of the app (from three dots on the top right corner)\n\n* Switch on the following: \\*Keep screen on \\*in interface, *Export Tracks in TXT*and \\*Export Tracks in GPX \\*in the exportation menu.\n\n* Also, make sure that you export the timestamp in the same timezone, else you may use GMT\n\n* Set *GPS Update interval* in tracking to *1 second*\n\n<iframe title=\"Configuring GPS logger for wardrive\" width=\"960\" height=\"540\" src=\"https://www.youtube.com/embed/00bpU2jNhXo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n\n## The algorithm\n\nBefore diving into the code, let’s discuss the algorithm of the software.\n\n### Mobile Phone\n\nOur mobile phones have an inbuilt GPS sensor. To get the data from that GPS sensor, we are using an app from the Google Play store/App Store. The data we will export will be in CSV format, which means it is easy to read and process\n\n### Raspberry Pi\n\nThis will run the script, which will contain the WiFi information described above, as well as a timestamp\n\n### Synchronizing the data\n\nIn the output from both devices, we have the timestamp as common. So, we can use timestamps to get the GPS coordinated at a particular time.\n\n## The Code — #1\n\nFirst, let’s go wardriving and collect some data. The first script we will need is to collect WiFi networks in CSV format. Also we need the timestamp as described above. So, the code is:-\n\n> Check out the script at https://gist.github.com/shriyanss/914cbcd27428c668be03406b38c76de0\n\nMake it executable using `chmod +x scan.sh`. Now, we need another script that will keep running it. For this I can a simple python script:-\n\n```\nfrom os import system\nwhile True:\n system(\"./scan.sh\")\n```\n\nSo the command we need to run is: `sudo python3 main.py > wifi.csv`\n\nThis will pipe the output, i.e. CSV to a file called `wifi.csv` .\n\nNo, the only task is to go out, and collect data. Just switch on the GPS Logger app and an SSH app and keep in the split screen view.\n\n## Points to remember\n\n* Switch on the *GPS Logger* app first, and then SSH scanning so that we won’t get an entry for which we don’t have GPS coordinates. The same goes for switching off.\n\n* Keep the speed slow (\\~20 km/hr) when there is more possibility of getting WiFi, or you may do it according to the length of the wardrive route\n\n* Try to stay near buildings, e.g. on the left/right side of the road where there are buildings.\n\n* Prefer a bicycle/motorbike with a backpack to keep accessories.\n\n## Getting GPS data from the phone\n\nTo export data from the app, just go to \\*GPS Logger app -> Tracklist -> Click on the route (e.g. the on top *😅*) -> Click on the ‘up arrow’ \\*and the file will be exported to the specified location\n\nNow, copy the `.txt`, `.gpx` file to your computer, and edit the file extension for `.txt` file to `.csv`\n\n## Plot the route on the map\n\nNow, you can use any map to view your route. But in my case, I used [*Google My Maps*](http://bit.ly/3XHF5n4). Just click on *“CREATE A NEW MAP”*, and you will see a screen like this:-\n\n![](/images/blog/wardrive_maps.webp)\n\nJust click on *“Import”* under *“Untitled layer”*, and upload the `.gpx` file you got from the GPS logger app. It will plot the route on the map.\n\n## The Code — #2\n\nNow, we need a code to plot all WiFi APs on the map. For this, you can use the following script:-\n\n\n> Check out the script at https://gist.github.com/shriyanss/1c0007c1822bec471e1d1c5c771f9bc9\n\nBefore you run the script, make sure to use the right files on lines 4 and 5.\n\nNow, just run the script, and it will give the `kml` file to be plotted on Google My Maps\n\n**IMPORTANT: Don’t forget edit the file names in line 4 and 5, otherwise the script will end up with an error**\n\nJust run the following command to write data to a file:\n\n```\npython3 data_sorter.py > wifi-ap.kml\n```\n\nNow, go to Google my maps, click on *“New Layer”*, and it will plot all WiFi AP on the map\n\n***Please note that it is being sorted on the basis of AP name. To sort on the basis of SSID, please refer lines 143 to 146***\n\n![](/images/blog/wardrive_map_plotted.webp)\n\nIn the above image, you can see all WiFi APs plotted on the map. Please note that I’ve changed the view to \\*“Dark landmass” \\*through the base map and redacted all WiFi AP names for privacy.\n\n## Final notes\n\nThis is a demonstration of how one can do wardrive with given equipment. In the next article, we will discuss how we can \\*\\*crack these WiFi networks, without the help of a WiFi adapter that supports monitor mode. \\*\\*Also, there are more chances of errors if the device is not configured properly. Feel free to drop your query in the responses.\n\nI hope that you liked this article 😄. Feel free to follow me for more. Also, **if you want the next part, feel free to subscribe to my mailings list**.\n",
347
+ "__metadata": {
348
+ "id": "content/pages/blog/wardrive-without-gps-module-but-rpi.md",
349
+ "modelName": "PostLayout",
350
+ "urlPath": "/blog/wardrive-without-gps-module-but-rpi"
351
+ }
352
+ }
353
+ ],
354
+ "showDate": true,
355
+ "showExcerpt": true,
356
+ "showReadMoreLink": true,
357
+ "styles": {
358
+ "self": {
359
+ "height": "auto",
360
+ "width": "narrow",
361
+ "margin": ["mt-0", "mb-0", "ml-0", "mr-0"],
362
+ "padding": ["pt-28", "pb-48", "pl-4", "pr-4"],
363
+ "justifyContent": "center",
364
+ "borderRadius": "none",
365
+ "borderWidth": 0,
366
+ "borderStyle": "none",
367
+ "borderColor": "border-dark"
368
+ },
369
+ "title": { "textAlign": "left" },
370
+ "subtitle": { "textAlign": "left" },
371
+ "actions": { "justifyContent": "flex-end" }
372
+ },
373
+ "__metadata": { "modelName": "FeaturedPostsSection" }
374
+ },
375
+ {
376
+ "type": "FeaturedProjectsSection",
377
+ "subtitle": "Projects:",
378
+ "actions": [
379
+ {
380
+ "type": "Link",
381
+ "label": "See all projects",
382
+ "altText": "See all projects",
383
+ "url": "/projects",
384
+ "showIcon": false,
385
+ "icon": "arrowRight",
386
+ "iconPosition": "right",
387
+ "elementId": "",
388
+ "__metadata": { "modelName": "Link" }
389
+ }
390
+ ],
391
+ "projects": [
392
+ {
393
+ "type": "ProjectLayout",
394
+ "title": "VHost Master",
395
+ "date": "2024-01-20",
396
+ "client": "Open Source",
397
+ "description": "Virtual Host Fuzzer written in Python",
398
+ "addTitleSuffix": true,
399
+ "colors": "colors-a",
400
+ "backgroundImage": {
401
+ "type": "BackgroundImage",
402
+ "url": "/images/backgrounds/bg2.jpg",
403
+ "backgroundSize": "cover",
404
+ "backgroundPosition": "center",
405
+ "backgroundRepeat": "no-repeat",
406
+ "opacity": 100,
407
+ "__metadata": { "modelName": "BackgroundImage" }
408
+ },
409
+ "featuredImage": {
410
+ "type": "ImageBlock",
411
+ "url": "/images/projects/computer-master.png",
412
+ "altText": "Image depicting \"Computer Master\"",
413
+ "caption": "Image depicting \"Computer Master\"",
414
+ "elementId": "",
415
+ "__metadata": { "modelName": "ImageBlock" }
416
+ },
417
+ "media": {
418
+ "type": "ImageBlock",
419
+ "url": "/images/projects/computer-master.png",
420
+ "altText": "Image depicting \"Computer Master\"",
421
+ "caption": "Image depicting \"Computer Master\"",
422
+ "elementId": "",
423
+ "__metadata": { "modelName": "ImageBlock" }
424
+ },
425
+ "socialImage": "/images/projects/computer-master.png",
426
+ "markdownContent": "VHost Master is a virtual host fuzzer. It is written in Python and utilizes multiple threads to speed up the process. You can find it on GitHub at [GithHub/@shriyanss/vhost-master](http://github.com/shriyanss/vhost-master)\n",
427
+ "__metadata": {
428
+ "id": "content/pages/projects/vhost-master.md",
429
+ "modelName": "ProjectLayout",
430
+ "urlPath": "/projects/vhost-master"
431
+ },
432
+ "prevProject": {
433
+ "type": "ProjectLayout",
434
+ "title": "Payload Pro",
435
+ "date": "2023-01-02",
436
+ "client": "Open Source",
437
+ "description": "Fire blind XSS better",
438
+ "featuredImage": {
439
+ "type": "ImageBlock",
440
+ "url": "/images/projects/payload-pro-theme.png",
441
+ "altText": "Project thumbnail image",
442
+ "caption": "",
443
+ "elementId": "",
444
+ "__metadata": { "modelName": "ImageBlock" }
445
+ },
446
+ "media": {
447
+ "type": "ImageBlock",
448
+ "url": "/images/projects/payload-pro-theme.png",
449
+ "altText": "Project image",
450
+ "caption": "Caption of the image",
451
+ "elementId": "",
452
+ "__metadata": { "modelName": "ImageBlock" }
453
+ },
454
+ "addTitleSuffix": true,
455
+ "colors": "colors-a",
456
+ "backgroundImage": {
457
+ "type": "BackgroundImage",
458
+ "url": "/images/backgrounds/bg2.jpg",
459
+ "backgroundSize": "cover",
460
+ "backgroundPosition": "center",
461
+ "backgroundRepeat": "no-repeat",
462
+ "opacity": 100,
463
+ "__metadata": { "modelName": "BackgroundImage" }
464
+ },
465
+ "markdownContent": "Javascript payload for exploiting blind XSS. You can simply host `payload.js` file editing the specifications for an ultimate XSS\n\n\n\nYou can find the repository at [GitHub/@shriyanss/payload-pro](https://github.com/shriyanss/payload-pro)\n",
466
+ "__metadata": {
467
+ "id": "content/pages/projects/payload-pro.md",
468
+ "modelName": "ProjectLayout",
469
+ "urlPath": "/projects/payload-pro"
470
+ }
471
+ },
472
+ "nextProject": {
473
+ "type": "ProjectLayout",
474
+ "title": "Subdomains wordlist",
475
+ "date": "2024-02-08",
476
+ "client": "Open Source",
477
+ "description": "A list of commonly found subdomains",
478
+ "featuredImage": {
479
+ "type": "ImageBlock",
480
+ "url": "/images/projects/subdomains-wordlist-theme.png",
481
+ "altText": "Project thumbnail image",
482
+ "caption": "",
483
+ "elementId": "",
484
+ "__metadata": { "modelName": "ImageBlock" }
485
+ },
486
+ "media": {
487
+ "type": "ImageBlock",
488
+ "url": "/images/projects/subdomains-wordlist-theme.png",
489
+ "altText": "Project image",
490
+ "caption": "Caption of the image",
491
+ "elementId": "",
492
+ "__metadata": { "modelName": "ImageBlock" }
493
+ },
494
+ "addTitleSuffix": true,
495
+ "colors": "colors-a",
496
+ "backgroundImage": {
497
+ "type": "BackgroundImage",
498
+ "url": "/images/backgrounds/bg2.jpg",
499
+ "backgroundSize": "cover",
500
+ "backgroundPosition": "center",
501
+ "backgroundRepeat": "no-repeat",
502
+ "opacity": 100,
503
+ "__metadata": { "modelName": "BackgroundImage" }
504
+ },
505
+ "markdownContent": "\"Subdomains Wordlist\" is a repository containing a list of subdomain wordlists that can be used to bruteforce assets for a company. A full blog on how this is generated can be found at [My Website/Blog/SUBDOMAINS WORDLIST. HOW IT IS MADE?](https://ss0x00.com/blog/subdomains-wordlist-how-it-is-made/)\n\nThe repository can be found at [GitHub/@shriyanss/subdomains_wordlist](https://github.com/shriyanss/subdomains_wordlist)",
506
+ "__metadata": {
507
+ "id": "content/pages/projects/subdomains-wordlist.md",
508
+ "modelName": "ProjectLayout",
509
+ "urlPath": "/projects/subdomains-wordlist"
510
+ }
511
+ }
512
+ },
513
+ {
514
+ "type": "ProjectLayout",
515
+ "title": "Subdomains wordlist",
516
+ "date": "2024-02-08",
517
+ "client": "Open Source",
518
+ "description": "A list of commonly found subdomains",
519
+ "featuredImage": {
520
+ "type": "ImageBlock",
521
+ "url": "/images/projects/subdomains-wordlist-theme.png",
522
+ "altText": "Project thumbnail image",
523
+ "caption": "",
524
+ "elementId": "",
525
+ "__metadata": { "modelName": "ImageBlock" }
526
+ },
527
+ "media": {
528
+ "type": "ImageBlock",
529
+ "url": "/images/projects/subdomains-wordlist-theme.png",
530
+ "altText": "Project image",
531
+ "caption": "Caption of the image",
532
+ "elementId": "",
533
+ "__metadata": { "modelName": "ImageBlock" }
534
+ },
535
+ "addTitleSuffix": true,
536
+ "colors": "colors-a",
537
+ "backgroundImage": {
538
+ "type": "BackgroundImage",
539
+ "url": "/images/backgrounds/bg2.jpg",
540
+ "backgroundSize": "cover",
541
+ "backgroundPosition": "center",
542
+ "backgroundRepeat": "no-repeat",
543
+ "opacity": 100,
544
+ "__metadata": { "modelName": "BackgroundImage" }
545
+ },
546
+ "markdownContent": "\"Subdomains Wordlist\" is a repository containing a list of subdomain wordlists that can be used to bruteforce assets for a company. A full blog on how this is generated can be found at [My Website/Blog/SUBDOMAINS WORDLIST. HOW IT IS MADE?](https://ss0x00.com/blog/subdomains-wordlist-how-it-is-made/)\n\nThe repository can be found at [GitHub/@shriyanss/subdomains_wordlist](https://github.com/shriyanss/subdomains_wordlist)",
547
+ "__metadata": {
548
+ "id": "content/pages/projects/subdomains-wordlist.md",
549
+ "modelName": "ProjectLayout",
550
+ "urlPath": "/projects/subdomains-wordlist"
551
+ },
552
+ "prevProject": {
553
+ "type": "ProjectLayout",
554
+ "title": "VHost Master",
555
+ "date": "2024-01-20",
556
+ "client": "Open Source",
557
+ "description": "Virtual Host Fuzzer written in Python",
558
+ "addTitleSuffix": true,
559
+ "colors": "colors-a",
560
+ "backgroundImage": {
561
+ "type": "BackgroundImage",
562
+ "url": "/images/backgrounds/bg2.jpg",
563
+ "backgroundSize": "cover",
564
+ "backgroundPosition": "center",
565
+ "backgroundRepeat": "no-repeat",
566
+ "opacity": 100,
567
+ "__metadata": { "modelName": "BackgroundImage" }
568
+ },
569
+ "featuredImage": {
570
+ "type": "ImageBlock",
571
+ "url": "/images/projects/computer-master.png",
572
+ "altText": "Image depicting \"Computer Master\"",
573
+ "caption": "Image depicting \"Computer Master\"",
574
+ "elementId": "",
575
+ "__metadata": { "modelName": "ImageBlock" }
576
+ },
577
+ "media": {
578
+ "type": "ImageBlock",
579
+ "url": "/images/projects/computer-master.png",
580
+ "altText": "Image depicting \"Computer Master\"",
581
+ "caption": "Image depicting \"Computer Master\"",
582
+ "elementId": "",
583
+ "__metadata": { "modelName": "ImageBlock" }
584
+ },
585
+ "socialImage": "/images/projects/computer-master.png",
586
+ "markdownContent": "VHost Master is a virtual host fuzzer. It is written in Python and utilizes multiple threads to speed up the process. You can find it on GitHub at [GithHub/@shriyanss/vhost-master](http://github.com/shriyanss/vhost-master)\n",
587
+ "__metadata": {
588
+ "id": "content/pages/projects/vhost-master.md",
589
+ "modelName": "ProjectLayout",
590
+ "urlPath": "/projects/vhost-master"
591
+ }
592
+ },
593
+ "nextProject": {
594
+ "type": "ProjectLayout",
595
+ "title": "Subdomains Wordlist Generator",
596
+ "date": "2024-02-09",
597
+ "client": "Open Source",
598
+ "description": "Generate subdomain wordlist with ease",
599
+ "featuredImage": {
600
+ "type": "ImageBlock",
601
+ "url": "/images/projects/subdomains-wordlist-gen-theme.png",
602
+ "altText": "Project thumbnail image",
603
+ "caption": "",
604
+ "elementId": "",
605
+ "__metadata": { "modelName": "ImageBlock" }
606
+ },
607
+ "media": {
608
+ "type": "ImageBlock",
609
+ "url": "/images/projects/subdomains-wordlist-gen-theme.png",
610
+ "altText": "Project image",
611
+ "caption": "Caption of the image",
612
+ "elementId": "",
613
+ "__metadata": { "modelName": "ImageBlock" }
614
+ },
615
+ "addTitleSuffix": true,
616
+ "colors": "colors-a",
617
+ "backgroundImage": {
618
+ "type": "BackgroundImage",
619
+ "url": "/images/backgrounds/bg2.jpg",
620
+ "backgroundSize": "cover",
621
+ "backgroundPosition": "center",
622
+ "backgroundRepeat": "no-repeat",
623
+ "opacity": 100,
624
+ "__metadata": { "modelName": "BackgroundImage" }
625
+ },
626
+ "markdownContent": "Subdomains wordlist generator helps you generate wordlists from the subdomains found from the subdomain enumeration. It uses a combination of Python and Shell scripts to achieve the task.\n\nYou can check this project at [GitHub/@shriyanss/subdomain\\_wordlist\\_gen](https://github.com/shriyanss/subdomain_wordlist_gen)\n",
627
+ "__metadata": {
628
+ "id": "content/pages/projects/subdomains-wordlist-generator.md",
629
+ "modelName": "ProjectLayout",
630
+ "urlPath": "/projects/subdomains-wordlist-generator"
631
+ }
632
+ }
633
+ },
634
+ {
635
+ "type": "ProjectLayout",
636
+ "title": "HekShop (non-technical)",
637
+ "date": "2024-12-13",
638
+ "client": "Merch Store",
639
+ "description": "HekShop is my merch store focussed on computer security theme",
640
+ "featuredImage": {
641
+ "type": "ImageBlock",
642
+ "url": "/images/projects/hekshop-project-banner.png",
643
+ "altText": "Project thumbnail image",
644
+ "caption": "",
645
+ "elementId": "",
646
+ "__metadata": { "modelName": "ImageBlock" }
647
+ },
648
+ "addTitleSuffix": true,
649
+ "colors": "colors-a",
650
+ "backgroundImage": {
651
+ "type": "BackgroundImage",
652
+ "url": "/images/backgrounds/bg2.jpg",
653
+ "backgroundSize": "cover",
654
+ "backgroundPosition": "center",
655
+ "backgroundRepeat": "no-repeat",
656
+ "opacity": 100,
657
+ "__metadata": { "modelName": "BackgroundImage" }
658
+ },
659
+ "media": {
660
+ "type": "ImageBlock",
661
+ "url": "/images/projects/hekshop-project-banner.png",
662
+ "altText": "HekShop logo with a dark background",
663
+ "caption": "hekshop.com",
664
+ "elementId": "",
665
+ "__metadata": { "modelName": "ImageBlock" }
666
+ },
667
+ "markdownContent": "I created [HekShop](https://hekshop.com) from the random T-Shirt ideas that kept coming to my mind. Whenever an idea related to some cool merch comes to my mind, I design it, and it ready to purchase on HekShop.\n",
668
+ "__metadata": {
669
+ "id": "content/pages/projects/hekshop.md",
670
+ "modelName": "ProjectLayout",
671
+ "urlPath": "/projects/hekshop"
672
+ },
673
+ "prevProject": {
674
+ "type": "ProjectLayout",
675
+ "title": "Subdomains Wordlist Generator",
676
+ "date": "2024-02-09",
677
+ "client": "Open Source",
678
+ "description": "Generate subdomain wordlist with ease",
679
+ "featuredImage": {
680
+ "type": "ImageBlock",
681
+ "url": "/images/projects/subdomains-wordlist-gen-theme.png",
682
+ "altText": "Project thumbnail image",
683
+ "caption": "",
684
+ "elementId": "",
685
+ "__metadata": { "modelName": "ImageBlock" }
686
+ },
687
+ "media": {
688
+ "type": "ImageBlock",
689
+ "url": "/images/projects/subdomains-wordlist-gen-theme.png",
690
+ "altText": "Project image",
691
+ "caption": "Caption of the image",
692
+ "elementId": "",
693
+ "__metadata": { "modelName": "ImageBlock" }
694
+ },
695
+ "addTitleSuffix": true,
696
+ "colors": "colors-a",
697
+ "backgroundImage": {
698
+ "type": "BackgroundImage",
699
+ "url": "/images/backgrounds/bg2.jpg",
700
+ "backgroundSize": "cover",
701
+ "backgroundPosition": "center",
702
+ "backgroundRepeat": "no-repeat",
703
+ "opacity": 100,
704
+ "__metadata": { "modelName": "BackgroundImage" }
705
+ },
706
+ "markdownContent": "Subdomains wordlist generator helps you generate wordlists from the subdomains found from the subdomain enumeration. It uses a combination of Python and Shell scripts to achieve the task.\n\nYou can check this project at [GitHub/@shriyanss/subdomain\\_wordlist\\_gen](https://github.com/shriyanss/subdomain_wordlist_gen)\n",
707
+ "__metadata": {
708
+ "id": "content/pages/projects/subdomains-wordlist-generator.md",
709
+ "modelName": "ProjectLayout",
710
+ "urlPath": "/projects/subdomains-wordlist-generator"
711
+ }
712
+ },
713
+ "nextProject": {
714
+ "type": "ProjectLayout",
715
+ "title": "Subdomain Permut - Subdomain Permutation tool",
716
+ "date": "2025-04-06",
717
+ "client": "Open Source",
718
+ "description": "subdomain-permut is a tool that simplifies the subdomain permutation process for DNS bruteforcing and target discovery",
719
+ "featuredImage": {
720
+ "type": "ImageBlock",
721
+ "url": "/images/projects/subdomain-permut-theme.png",
722
+ "altText": "Project thumbnail image",
723
+ "caption": "",
724
+ "elementId": "",
725
+ "__metadata": { "modelName": "ImageBlock" }
726
+ },
727
+ "media": {
728
+ "type": "ImageBlock",
729
+ "url": "/images/projects/subdomain-permut-theme.png",
730
+ "altText": "Project image",
731
+ "caption": "Caption of the image",
732
+ "elementId": "",
733
+ "__metadata": { "modelName": "ImageBlock" }
734
+ },
735
+ "addTitleSuffix": true,
736
+ "colors": "colors-d",
737
+ "backgroundImage": {
738
+ "type": "BackgroundImage",
739
+ "url": "/images/backgrounds/bg3.jpg",
740
+ "backgroundSize": "cover",
741
+ "backgroundPosition": "center",
742
+ "backgroundRepeat": "no-repeat",
743
+ "opacity": 100,
744
+ "__metadata": { "modelName": "BackgroundImage" }
745
+ },
746
+ "markdownContent": "subdomain-permut is a tool that simplifies the subdomain permutation process for DNS bruteforcing and target discovery. It is a Python based tool, which takes the user inputs, and is capable of generating several 100 GBs of permutations. Please note that this tool is expected to run several hours and is expected to run on a VPS.\n\nThis project has its code hosted on [GitHub/@shriyanss/subdomain-permut](https://github.com/shriyanss/subdomain-permut). Additionally, it is also available on [PyPI/subdomain-permut](https://pypi.org/project/subdomain-permut/). To install this tool, you can use the following command\n\n```\npip install subdomain-permut\n```\n\nTo upgrade the tool in case a new version is available, use the following command\n\n```\npip install --upgrade subdomain-permut\n```\n",
747
+ "__metadata": {
748
+ "id": "content/pages/projects/subdomain-permut.md",
749
+ "modelName": "ProjectLayout",
750
+ "urlPath": "/projects/subdomain-permut"
751
+ }
752
+ }
753
+ }
754
+ ],
755
+ "colors": "colors-f",
756
+ "variant": "variant-d",
757
+ "elementId": "",
758
+ "showDate": false,
759
+ "showDescription": true,
760
+ "showFeaturedImage": true,
761
+ "showReadMoreLink": true,
762
+ "styles": {
763
+ "self": {
764
+ "height": "auto",
765
+ "width": "wide",
766
+ "padding": ["pt-24", "pb-24", "pl-4", "pr-4"],
767
+ "justifyContent": "center"
768
+ },
769
+ "title": { "textAlign": "left" },
770
+ "subtitle": { "textAlign": "left" },
771
+ "actions": { "justifyContent": "center" }
772
+ },
773
+ "__metadata": { "modelName": "FeaturedProjectsSection" }
774
+ },
775
+ {
776
+ "type": "ContactSection",
777
+ "colors": "colors-f",
778
+ "backgroundSize": "full",
779
+ "title": "Think I can hack something or need a companion while hacking...💬",
780
+ "form": {
781
+ "type": "FormBlock",
782
+ "elementId": "sign-up-form",
783
+ "fields": [
784
+ {
785
+ "name": "firstName",
786
+ "label": "First Name",
787
+ "hideLabel": true,
788
+ "placeholder": "First Name",
789
+ "isRequired": true,
790
+ "width": "1/2",
791
+ "type": "TextFormControl",
792
+ "__metadata": { "modelName": "TextFormControl" }
793
+ },
794
+ {
795
+ "name": "lastName",
796
+ "label": "Last Name",
797
+ "hideLabel": true,
798
+ "placeholder": "Last Name",
799
+ "isRequired": false,
800
+ "width": "1/2",
801
+ "type": "TextFormControl",
802
+ "__metadata": { "modelName": "TextFormControl" }
803
+ },
804
+ {
805
+ "name": "email",
806
+ "label": "Email",
807
+ "hideLabel": true,
808
+ "placeholder": "Email",
809
+ "isRequired": true,
810
+ "width": "1/2",
811
+ "type": "EmailFormControl",
812
+ "__metadata": { "modelName": "EmailFormControl" }
813
+ },
814
+ {
815
+ "name": "message",
816
+ "label": "Message",
817
+ "hideLabel": true,
818
+ "placeholder": "Message",
819
+ "isRequired": true,
820
+ "width": "full",
821
+ "type": "TextFormControl",
822
+ "__metadata": { "modelName": "TextFormControl" }
823
+ }
824
+ ],
825
+ "submitLabel": "Submit 🚀",
826
+ "styles": { "submitLabel": { "textAlign": "center" } },
827
+ "title": "Contact form",
828
+ "__metadata": { "modelName": "FormBlock" }
829
+ },
830
+ "styles": {
831
+ "self": {
832
+ "height": "auto",
833
+ "width": "narrow",
834
+ "margin": ["mt-0", "mb-0", "ml-0", "mr-0"],
835
+ "padding": ["pt-24", "pb-24", "pr-4", "pl-4"],
836
+ "alignItems": "center",
837
+ "justifyContent": "center",
838
+ "flexDirection": "row"
839
+ },
840
+ "title": { "textAlign": "left" },
841
+ "text": { "textAlign": "left" }
842
+ },
843
+ "__metadata": { "modelName": "ContactSection" }
844
+ }
845
+ ],
846
+ "markdownContent": "",
847
+ "__metadata": {
848
+ "id": "content/pages/index.md",
849
+ "modelName": "PageLayout",
850
+ "urlPath": "/"
851
+ },
852
+ "global": {
853
+ "site": {
854
+ "type": "Config",
855
+ "favicon": "/images/icons/favicon.svg",
856
+ "header": {
857
+ "type": "Header",
858
+ "headerVariant": "variant-c",
859
+ "isSticky": false,
860
+ "title": "Shriyans Sudhi",
861
+ "isTitleVisible": true,
862
+ "primaryLinks": [
863
+ {
864
+ "type": "Link",
865
+ "label": "Info",
866
+ "url": "/info",
867
+ "__metadata": { "modelName": "Link" }
868
+ },
869
+ {
870
+ "type": "Link",
871
+ "label": "Projects",
872
+ "url": "/projects",
873
+ "__metadata": { "modelName": "Link" }
874
+ },
875
+ {
876
+ "type": "Link",
877
+ "label": "Blog",
878
+ "altText": "",
879
+ "url": "/blog",
880
+ "showIcon": false,
881
+ "icon": "arrowRight",
882
+ "iconPosition": "right",
883
+ "elementId": "",
884
+ "__metadata": { "modelName": "Link" }
885
+ },
886
+ {
887
+ "type": "Hek Shop",
888
+ "label": "HekShop",
889
+ "url": "https://hekshop.com",
890
+ "__metadata": { "modelName": "Hek Shop" }
891
+ }
892
+ ],
893
+ "socialLinks": [
894
+ {
895
+ "type": "Social",
896
+ "altText": "Twitter",
897
+ "label": "Twitter",
898
+ "url": "https://x.com/ss0x00",
899
+ "icon": "twitter",
900
+ "__metadata": { "modelName": "Social" }
901
+ },
902
+ {
903
+ "type": "Social",
904
+ "altText": "LinkedIn",
905
+ "label": "LinkedIn",
906
+ "url": "https://linkedin.com/in/shriyans-sudhi",
907
+ "icon": "linkedin",
908
+ "__metadata": { "modelName": "Social" }
909
+ }
910
+ ],
911
+ "styles": { "self": { "width": "full" } },
912
+ "__metadata": { "modelName": "Header" }
913
+ },
914
+ "footer": {
915
+ "type": "Footer",
916
+ "primaryLinks": [
917
+ {
918
+ "type": "Link",
919
+ "label": "Info",
920
+ "url": "/info",
921
+ "altText": "",
922
+ "__metadata": { "modelName": "Link" }
923
+ },
924
+ {
925
+ "type": "Link",
926
+ "label": "Email",
927
+ "url": "mailto:shriyanss@ss0x00.com",
928
+ "altText": "",
929
+ "__metadata": { "modelName": "Link" }
930
+ },
931
+ {
932
+ "type": "Link",
933
+ "label": "Blog",
934
+ "url": "/blog",
935
+ "altText": "",
936
+ "__metadata": { "modelName": "Link" }
937
+ },
938
+ {
939
+ "type": "Link",
940
+ "label": "HackerOne Profile",
941
+ "url": "https://hackerone.com/shriyanss",
942
+ "altText": "HackerOne Public Profile",
943
+ "__metadata": { "modelName": "Link" }
944
+ }
945
+ ],
946
+ "contacts": {
947
+ "type": "ContactBlock",
948
+ "title": "Contact details",
949
+ "phoneAltText": "My phone number",
950
+ "email": "shriyanss@ss0x00.com",
951
+ "emailAltText": "My email",
952
+ "__metadata": { "modelName": "ContactBlock" }
953
+ },
954
+ "copyrightText": "Powered by [Netlify](https://www.netlify.com/platform/).",
955
+ "styles": {
956
+ "self": {
957
+ "width": "narrow",
958
+ "padding": ["pt-16", "pb-16", "pr-4", "pl-4"]
959
+ }
960
+ },
961
+ "__metadata": { "modelName": "Footer" }
962
+ },
963
+ "__metadata": {
964
+ "id": "content/data/config.json",
965
+ "modelName": "Config"
966
+ }
967
+ }
968
+ }
969
+ },
970
+ "__N_SSG": true
971
+ }