endpointscanner 7.2__tar.gz → 7.2.1__tar.gz
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.
- {endpointscanner-7.2 → endpointscanner-7.2.1}/PKG-INFO +10 -5
- {endpointscanner-7.2 → endpointscanner-7.2.1}/README.md +8 -3
- {endpointscanner-7.2 → endpointscanner-7.2.1}/endpointscanner.egg-info/PKG-INFO +10 -5
- {endpointscanner-7.2 → endpointscanner-7.2.1}/enumerateendpoint.py +23 -3
- {endpointscanner-7.2 → endpointscanner-7.2.1}/pyproject.toml +21 -2
- {endpointscanner-7.2 → endpointscanner-7.2.1}/LICENSE +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.1}/endpointscanner.egg-info/SOURCES.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.1}/endpointscanner.egg-info/dependency_links.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.1}/endpointscanner.egg-info/entry_points.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.1}/endpointscanner.egg-info/requires.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.1}/endpointscanner.egg-info/top_level.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.1}/setup.cfg +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: endpointscanner
|
|
3
|
-
Version: 7.2
|
|
3
|
+
Version: 7.2.1
|
|
4
4
|
Summary: Website endpoint reconnaissance tool and rate limit tester that bypasses simple captchas.
|
|
5
5
|
Project-URL: Homepage, https://github.com/SphericalFlower52811/endpointscanner
|
|
6
6
|
Project-URL: Issues, https://github.com/SphericalFlower52811/endpointscanner/issues
|
|
7
7
|
Project-URL: Repository, https://github.com/SphericalFlower52811/endpointscanner
|
|
8
|
-
Keywords:
|
|
8
|
+
Keywords: web-crawler,rate-limiting,bug-bounty,web-crawler-python,pentest-tool,endpoint-discovery,crawler-python,bugbounty-tool,web-reconnaissance,web-recon-tool,cybersecurity-tools,endpoint-extraction,spa-crawler,reconnaissance,directory-crawler,directory-discoverer,directory-enumeration
|
|
9
9
|
Requires-Python: >=3.9
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
@@ -16,7 +16,7 @@ Requires-Dist: playwright-stealth
|
|
|
16
16
|
Requires-Dist: httpx[http2]>=0.27.0
|
|
17
17
|
Dynamic: license-file
|
|
18
18
|
|
|
19
|
-
# Website Endpoint Scanner and Rate Limit Tester For Websites (Version 7.2.
|
|
19
|
+
# Website Endpoint Scanner and Rate Limit Tester For Websites (Version 7.2.1)
|
|
20
20
|
|
|
21
21
|
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites. Tests for IDOR or other broken access control bugs on websites by changing variables in endpoints to 1. Has a built in rate limit tester that can test on any endpoint, and can bypass simple WAFs/captchas and client-side SPAs.
|
|
22
22
|
|
|
@@ -182,17 +182,22 @@ Version 7.2 added:
|
|
|
182
182
|
- More accurate sorting (previous bug that put /api/health in SPAs patched)
|
|
183
183
|
- Removed the 'Scraped from JS' label as extra files and html src are being scraped.
|
|
184
184
|
|
|
185
|
+
Version 7.2.1 (patch update) added:
|
|
186
|
+
|
|
187
|
+
- fixed bug where paths would still show /
|
|
188
|
+
- fixed bug where some external links were coded into files like e.g. https://n. It is not a real link but got included, and the bug was fixed.
|
|
189
|
+
|
|
185
190
|
## Plans for next version and the future
|
|
186
191
|
|
|
187
192
|
Version 7.3 is planned to have:
|
|
188
193
|
|
|
189
|
-
-
|
|
194
|
+
- More JS Stacks to detect
|
|
190
195
|
- Detecting what type of captcha was used if the script is blocked.
|
|
191
196
|
|
|
192
197
|
Future plans (May be added in the next version):
|
|
193
198
|
|
|
194
199
|
- Recursive scanning (Going into each valid path to find more endpoints as some files only show up in specific endpoints.)
|
|
195
|
-
-
|
|
200
|
+
- Optimisation to make sorting of endpoints faster
|
|
196
201
|
|
|
197
202
|
ai assisted code btw
|
|
198
203
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Website Endpoint Scanner and Rate Limit Tester For Websites (Version 7.2.
|
|
1
|
+
# Website Endpoint Scanner and Rate Limit Tester For Websites (Version 7.2.1)
|
|
2
2
|
|
|
3
3
|
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites. Tests for IDOR or other broken access control bugs on websites by changing variables in endpoints to 1. Has a built in rate limit tester that can test on any endpoint, and can bypass simple WAFs/captchas and client-side SPAs.
|
|
4
4
|
|
|
@@ -164,17 +164,22 @@ Version 7.2 added:
|
|
|
164
164
|
- More accurate sorting (previous bug that put /api/health in SPAs patched)
|
|
165
165
|
- Removed the 'Scraped from JS' label as extra files and html src are being scraped.
|
|
166
166
|
|
|
167
|
+
Version 7.2.1 (patch update) added:
|
|
168
|
+
|
|
169
|
+
- fixed bug where paths would still show /
|
|
170
|
+
- fixed bug where some external links were coded into files like e.g. https://n. It is not a real link but got included, and the bug was fixed.
|
|
171
|
+
|
|
167
172
|
## Plans for next version and the future
|
|
168
173
|
|
|
169
174
|
Version 7.3 is planned to have:
|
|
170
175
|
|
|
171
|
-
-
|
|
176
|
+
- More JS Stacks to detect
|
|
172
177
|
- Detecting what type of captcha was used if the script is blocked.
|
|
173
178
|
|
|
174
179
|
Future plans (May be added in the next version):
|
|
175
180
|
|
|
176
181
|
- Recursive scanning (Going into each valid path to find more endpoints as some files only show up in specific endpoints.)
|
|
177
|
-
-
|
|
182
|
+
- Optimisation to make sorting of endpoints faster
|
|
178
183
|
|
|
179
184
|
ai assisted code btw
|
|
180
185
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: endpointscanner
|
|
3
|
-
Version: 7.2
|
|
3
|
+
Version: 7.2.1
|
|
4
4
|
Summary: Website endpoint reconnaissance tool and rate limit tester that bypasses simple captchas.
|
|
5
5
|
Project-URL: Homepage, https://github.com/SphericalFlower52811/endpointscanner
|
|
6
6
|
Project-URL: Issues, https://github.com/SphericalFlower52811/endpointscanner/issues
|
|
7
7
|
Project-URL: Repository, https://github.com/SphericalFlower52811/endpointscanner
|
|
8
|
-
Keywords:
|
|
8
|
+
Keywords: web-crawler,rate-limiting,bug-bounty,web-crawler-python,pentest-tool,endpoint-discovery,crawler-python,bugbounty-tool,web-reconnaissance,web-recon-tool,cybersecurity-tools,endpoint-extraction,spa-crawler,reconnaissance,directory-crawler,directory-discoverer,directory-enumeration
|
|
9
9
|
Requires-Python: >=3.9
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
@@ -16,7 +16,7 @@ Requires-Dist: playwright-stealth
|
|
|
16
16
|
Requires-Dist: httpx[http2]>=0.27.0
|
|
17
17
|
Dynamic: license-file
|
|
18
18
|
|
|
19
|
-
# Website Endpoint Scanner and Rate Limit Tester For Websites (Version 7.2.
|
|
19
|
+
# Website Endpoint Scanner and Rate Limit Tester For Websites (Version 7.2.1)
|
|
20
20
|
|
|
21
21
|
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites. Tests for IDOR or other broken access control bugs on websites by changing variables in endpoints to 1. Has a built in rate limit tester that can test on any endpoint, and can bypass simple WAFs/captchas and client-side SPAs.
|
|
22
22
|
|
|
@@ -182,17 +182,22 @@ Version 7.2 added:
|
|
|
182
182
|
- More accurate sorting (previous bug that put /api/health in SPAs patched)
|
|
183
183
|
- Removed the 'Scraped from JS' label as extra files and html src are being scraped.
|
|
184
184
|
|
|
185
|
+
Version 7.2.1 (patch update) added:
|
|
186
|
+
|
|
187
|
+
- fixed bug where paths would still show /
|
|
188
|
+
- fixed bug where some external links were coded into files like e.g. https://n. It is not a real link but got included, and the bug was fixed.
|
|
189
|
+
|
|
185
190
|
## Plans for next version and the future
|
|
186
191
|
|
|
187
192
|
Version 7.3 is planned to have:
|
|
188
193
|
|
|
189
|
-
-
|
|
194
|
+
- More JS Stacks to detect
|
|
190
195
|
- Detecting what type of captcha was used if the script is blocked.
|
|
191
196
|
|
|
192
197
|
Future plans (May be added in the next version):
|
|
193
198
|
|
|
194
199
|
- Recursive scanning (Going into each valid path to find more endpoints as some files only show up in specific endpoints.)
|
|
195
|
-
-
|
|
200
|
+
- Optimisation to make sorting of endpoints faster
|
|
196
201
|
|
|
197
202
|
ai assisted code btw
|
|
198
203
|
|
|
@@ -653,6 +653,7 @@ def main():
|
|
|
653
653
|
matches = re.findall(p, respo.text)
|
|
654
654
|
for m in matches:
|
|
655
655
|
m_clean = re.sub(r'(\$\{.*?\}|:[a-zA-Z0-9]+)', '1', m)
|
|
656
|
+
m_clean = m_clean.strip()
|
|
656
657
|
if m_clean != m:
|
|
657
658
|
m_display = f"{m_clean} [Original: {m}]"
|
|
658
659
|
else:
|
|
@@ -705,6 +706,7 @@ def main():
|
|
|
705
706
|
matches = re.findall(p, script.string)
|
|
706
707
|
for m in matches:
|
|
707
708
|
m_clean = re.sub(r'(\$\{.*?\}|:[a-zA-Z0-9]+)', '1', m)
|
|
709
|
+
m_clean = m_clean.strip()
|
|
708
710
|
if m_clean != m:
|
|
709
711
|
m_display = f"{m_clean} [Original: {m}]"
|
|
710
712
|
else:
|
|
@@ -772,7 +774,7 @@ def main():
|
|
|
772
774
|
matches = re.findall(p, js_res.text)
|
|
773
775
|
for m in matches:
|
|
774
776
|
m_clean = re.sub(r'(\$\{.*?\}|:[a-zA-Z0-9]+)', '1', m)
|
|
775
|
-
|
|
777
|
+
m_clean = m_clean.strip()
|
|
776
778
|
if m_clean != m:
|
|
777
779
|
m_display = f"{m_clean} [Original: {m}]"
|
|
778
780
|
else:
|
|
@@ -783,7 +785,7 @@ def main():
|
|
|
783
785
|
if m_clean != m:
|
|
784
786
|
m_display = '/' + m_display
|
|
785
787
|
if not m_clean.lower().endswith(ignored_extensions):
|
|
786
|
-
if m_clean in ["/", "//", "///", "/.", "/..", "/...", "/./", "/ "]:
|
|
788
|
+
if m_clean.strip in ["/", "//", "///", "/.", "/..", "/...", "/./", "/ "]:
|
|
787
789
|
continue
|
|
788
790
|
if any(term in m_clean.lower() for term in USELESSSTUFF):
|
|
789
791
|
continue
|
|
@@ -809,7 +811,7 @@ def main():
|
|
|
809
811
|
if urlparse(target_x_url).netloc == urlparse(target if "://" in target else f"https://{target}").netloc:
|
|
810
812
|
if clean_f not in xml_files:
|
|
811
813
|
xml_files.append(clean_f)
|
|
812
|
-
|
|
814
|
+
|
|
813
815
|
for xmlfile in xml_files:
|
|
814
816
|
if args.scan_timeout:
|
|
815
817
|
ts = checktime(start_test_time, args.scan_timeout) #timer status
|
|
@@ -827,6 +829,10 @@ def main():
|
|
|
827
829
|
for loc in locs:
|
|
828
830
|
clean_path = loc.strip()
|
|
829
831
|
if clean_path and clean_path != "/" and clean_path not in found_paths:
|
|
832
|
+
if clean_path in ["/", "//", "///", "/.", "/..", "/...", "/./", "/ "]:
|
|
833
|
+
continue
|
|
834
|
+
if any(term in clean_path.lower() for term in USELESSSTUFF):
|
|
835
|
+
continue
|
|
830
836
|
found_paths.add(clean_path)
|
|
831
837
|
|
|
832
838
|
if not args.tidy:
|
|
@@ -853,6 +859,11 @@ def main():
|
|
|
853
859
|
for path in sorted(found_paths):
|
|
854
860
|
display_path = discovered_in_js.get(path, path)
|
|
855
861
|
#take away original if disable og actiev
|
|
862
|
+
pure_path = display_path.split(" [Original:")[0]
|
|
863
|
+
if pure_path.strip() in ["/", "//", "///", "/.", "/..", "/...", "/./", "/ "]:
|
|
864
|
+
continue
|
|
865
|
+
if not any(char.isalnum() for char in pure_path):
|
|
866
|
+
continue
|
|
856
867
|
if args.only_original and " [Original: " in display_path:
|
|
857
868
|
display_path = display_path.split(" [Original: ")[1].rstrip(']')
|
|
858
869
|
elif args.disable_og and " [Original:" in display_path:
|
|
@@ -870,6 +881,8 @@ def main():
|
|
|
870
881
|
is_external = parsed_path.netloc and get_base(parsed_path.netloc) != get_base(target_domain)
|
|
871
882
|
|
|
872
883
|
if is_external:
|
|
884
|
+
if "." not in pure_path:
|
|
885
|
+
continue
|
|
873
886
|
results_ext.append(f"{display_path.lstrip('/')}")
|
|
874
887
|
continue
|
|
875
888
|
if "://" in path and parsed_path.netloc == target_domain:
|
|
@@ -878,6 +891,8 @@ def main():
|
|
|
878
891
|
internal_route += f"?{parsed_path.query}"
|
|
879
892
|
path = internal_route if internal_route.startswith('/') else '/' + internal_route
|
|
880
893
|
display_path = path
|
|
894
|
+
if display_path.strip() in ["/", "//", "///", "/.", "/..", "/...", "/./"]:
|
|
895
|
+
continue
|
|
881
896
|
elif parsed_path.netloc and parsed_path.netloc != target_domain:
|
|
882
897
|
results_subd.append(display_path.lstrip('/'))
|
|
883
898
|
continue
|
|
@@ -992,6 +1007,11 @@ def main():
|
|
|
992
1007
|
else:
|
|
993
1008
|
for path in sorted(found_paths):
|
|
994
1009
|
display_path = discovered_in_js.get(path, path)
|
|
1010
|
+
pure_path = display_path.split(" [Original:")[0]
|
|
1011
|
+
if pure_path.strip() in ["/", "//", "///", "/.", "/..", "/...", "/./", "/ "]:
|
|
1012
|
+
continue
|
|
1013
|
+
if not any(char.isalnum() for char in pure_path):
|
|
1014
|
+
continue
|
|
995
1015
|
if args.only_original and " [Original: " in display_path:
|
|
996
1016
|
display_path = display_path.split(" [Original: ")[1].rstrip(']')
|
|
997
1017
|
elif args.disable_og and " [Original:" in display_path:
|
|
@@ -4,11 +4,30 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "endpointscanner"
|
|
7
|
-
version = "7.2"
|
|
7
|
+
version = "7.2.1"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
description = "Website endpoint reconnaissance tool and rate limit tester that bypasses simple captchas."
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
|
-
keywords = [
|
|
11
|
+
keywords = [
|
|
12
|
+
"web-crawler",
|
|
13
|
+
"rate-limiting",
|
|
14
|
+
"bug-bounty",
|
|
15
|
+
"web-crawler-python",
|
|
16
|
+
"pentest-tool",
|
|
17
|
+
"endpoint-discovery",
|
|
18
|
+
"crawler-python",
|
|
19
|
+
"bugbounty-tool",
|
|
20
|
+
"web-reconnaissance",
|
|
21
|
+
"web-recon-tool",
|
|
22
|
+
"cybersecurity-tools",
|
|
23
|
+
"endpoint-extraction",
|
|
24
|
+
"spa-crawler",
|
|
25
|
+
"reconnaissance",
|
|
26
|
+
"directory-crawler",
|
|
27
|
+
"directory-discoverer",
|
|
28
|
+
"directory-enumeration"
|
|
29
|
+
]
|
|
30
|
+
|
|
12
31
|
dependencies = [
|
|
13
32
|
"curl_cffi",
|
|
14
33
|
"beautifulsoup4",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|