endpointscanner 7.2__tar.gz → 7.2.2__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.2}/PKG-INFO +16 -9
- {endpointscanner-7.2 → endpointscanner-7.2.2}/README.md +13 -6
- {endpointscanner-7.2 → endpointscanner-7.2.2}/endpointscanner.egg-info/PKG-INFO +16 -9
- {endpointscanner-7.2 → endpointscanner-7.2.2}/enumerateendpoint.py +24 -4
- {endpointscanner-7.2 → endpointscanner-7.2.2}/pyproject.toml +22 -3
- {endpointscanner-7.2 → endpointscanner-7.2.2}/LICENSE +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.2}/endpointscanner.egg-info/SOURCES.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.2}/endpointscanner.egg-info/dependency_links.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.2}/endpointscanner.egg-info/entry_points.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.2}/endpointscanner.egg-info/requires.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.2}/endpointscanner.egg-info/top_level.txt +0 -0
- {endpointscanner-7.2 → endpointscanner-7.2.2}/setup.cfg +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: endpointscanner
|
|
3
|
-
Version: 7.2
|
|
4
|
-
Summary: Website endpoint reconnaissance tool and rate limit tester that
|
|
3
|
+
Version: 7.2.2
|
|
4
|
+
Summary: Website endpoint reconnaissance tool and rate limit tester that can bypass simple captchas and WAFs.
|
|
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,9 +16,9 @@ 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.2)
|
|
20
20
|
|
|
21
|
-
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites.
|
|
21
|
+
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites. Automates IDOR and broken access control vulnerability testing through replacing variables with 1 in endpoints. 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
|
|
|
23
23
|
For Installation, please go to the Installation section below!
|
|
24
24
|
|
|
@@ -67,8 +67,8 @@ Passable arguments:
|
|
|
67
67
|
|
|
68
68
|
## Installation
|
|
69
69
|
|
|
70
|
-
You MUST have python 3.9 or above to use this
|
|
71
|
-
To install endpointscanner, run the command:
|
|
70
|
+
You MUST have python 3.9 or above to use this tool!
|
|
71
|
+
To install the official [endpointscanner Python package](https://pypi.org/project/endpointscanner/), run the command:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
74
|
python3 -m pip install endpointscanner
|
|
@@ -182,17 +182,24 @@ 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
|
+
|
|
190
|
+
Version 7.2.2 just changed wording and description of the tool to be more clear.
|
|
191
|
+
|
|
185
192
|
## Plans for next version and the future
|
|
186
193
|
|
|
187
194
|
Version 7.3 is planned to have:
|
|
188
195
|
|
|
189
|
-
-
|
|
196
|
+
- More JS Stacks to detect
|
|
190
197
|
- Detecting what type of captcha was used if the script is blocked.
|
|
191
198
|
|
|
192
199
|
Future plans (May be added in the next version):
|
|
193
200
|
|
|
194
201
|
- Recursive scanning (Going into each valid path to find more endpoints as some files only show up in specific endpoints.)
|
|
195
|
-
-
|
|
202
|
+
- Optimisation to make sorting of endpoints faster
|
|
196
203
|
|
|
197
204
|
ai assisted code btw
|
|
198
205
|
|
|
@@ -1,6 +1,6 @@
|
|
|
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.2)
|
|
2
2
|
|
|
3
|
-
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites.
|
|
3
|
+
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites. Automates IDOR and broken access control vulnerability testing through replacing variables with 1 in endpoints. 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
|
|
|
5
5
|
For Installation, please go to the Installation section below!
|
|
6
6
|
|
|
@@ -49,8 +49,8 @@ Passable arguments:
|
|
|
49
49
|
|
|
50
50
|
## Installation
|
|
51
51
|
|
|
52
|
-
You MUST have python 3.9 or above to use this
|
|
53
|
-
To install endpointscanner, run the command:
|
|
52
|
+
You MUST have python 3.9 or above to use this tool!
|
|
53
|
+
To install the official [endpointscanner Python package](https://pypi.org/project/endpointscanner/), run the command:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
56
|
python3 -m pip install endpointscanner
|
|
@@ -164,17 +164,24 @@ 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
|
+
|
|
172
|
+
Version 7.2.2 just changed wording and description of the tool to be more clear.
|
|
173
|
+
|
|
167
174
|
## Plans for next version and the future
|
|
168
175
|
|
|
169
176
|
Version 7.3 is planned to have:
|
|
170
177
|
|
|
171
|
-
-
|
|
178
|
+
- More JS Stacks to detect
|
|
172
179
|
- Detecting what type of captcha was used if the script is blocked.
|
|
173
180
|
|
|
174
181
|
Future plans (May be added in the next version):
|
|
175
182
|
|
|
176
183
|
- Recursive scanning (Going into each valid path to find more endpoints as some files only show up in specific endpoints.)
|
|
177
|
-
-
|
|
184
|
+
- Optimisation to make sorting of endpoints faster
|
|
178
185
|
|
|
179
186
|
ai assisted code btw
|
|
180
187
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: endpointscanner
|
|
3
|
-
Version: 7.2
|
|
4
|
-
Summary: Website endpoint reconnaissance tool and rate limit tester that
|
|
3
|
+
Version: 7.2.2
|
|
4
|
+
Summary: Website endpoint reconnaissance tool and rate limit tester that can bypass simple captchas and WAFs.
|
|
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,9 +16,9 @@ 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.2)
|
|
20
20
|
|
|
21
|
-
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites.
|
|
21
|
+
A fast automated website reconnaissance tool that extracts endpoints, files, and even external links from websites. Automates IDOR and broken access control vulnerability testing through replacing variables with 1 in endpoints. 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
|
|
|
23
23
|
For Installation, please go to the Installation section below!
|
|
24
24
|
|
|
@@ -67,8 +67,8 @@ Passable arguments:
|
|
|
67
67
|
|
|
68
68
|
## Installation
|
|
69
69
|
|
|
70
|
-
You MUST have python 3.9 or above to use this
|
|
71
|
-
To install endpointscanner, run the command:
|
|
70
|
+
You MUST have python 3.9 or above to use this tool!
|
|
71
|
+
To install the official [endpointscanner Python package](https://pypi.org/project/endpointscanner/), run the command:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
74
|
python3 -m pip install endpointscanner
|
|
@@ -182,17 +182,24 @@ 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
|
+
|
|
190
|
+
Version 7.2.2 just changed wording and description of the tool to be more clear.
|
|
191
|
+
|
|
185
192
|
## Plans for next version and the future
|
|
186
193
|
|
|
187
194
|
Version 7.3 is planned to have:
|
|
188
195
|
|
|
189
|
-
-
|
|
196
|
+
- More JS Stacks to detect
|
|
190
197
|
- Detecting what type of captcha was used if the script is blocked.
|
|
191
198
|
|
|
192
199
|
Future plans (May be added in the next version):
|
|
193
200
|
|
|
194
201
|
- Recursive scanning (Going into each valid path to find more endpoints as some files only show up in specific endpoints.)
|
|
195
|
-
-
|
|
202
|
+
- Optimisation to make sorting of endpoints faster
|
|
196
203
|
|
|
197
204
|
ai assisted code btw
|
|
198
205
|
|
|
@@ -7,7 +7,7 @@ import argparse
|
|
|
7
7
|
import time
|
|
8
8
|
import json
|
|
9
9
|
from playwright.sync_api import sync_playwright #headless browser to solve captcha
|
|
10
|
-
from playwright_stealth import Stealth #
|
|
10
|
+
from playwright_stealth import Stealth #ensure strict firewalls do not block the playwright browser
|
|
11
11
|
|
|
12
12
|
HEADER = {
|
|
13
13
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
@@ -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.2"
|
|
8
8
|
readme = "README.md"
|
|
9
|
-
description = "Website endpoint reconnaissance tool and rate limit tester that
|
|
9
|
+
description = "Website endpoint reconnaissance tool and rate limit tester that can bypass simple captchas and WAFs."
|
|
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
|