Red Teaming and Web Bug Bounty Fast Endpoint Discovery Tool
Project description
🌊 EndAbyss
Python Version License Version
EndAbyss is a fast endpoint discovery tool that crawls websites to collect endpoints and parameters for bug bounty and red team operations.
🌟 Features
- Red Team/Bug Boun1.0ty Support: Useful for both red team operations and web bug bounty projects
- Static/Dynamic Scanning: Fast static scanning or Playwright-based dynamic scanning for modern frameworks
- Endpoint Discovery: Automatic collection of endpoints from HTML, JavaScript, and API responses
- Parameter Extraction: Automatic extraction of GET/POST parameters from forms and URLs
- Directory Scanning: Wordlist-based directory brute-forcing support
- Pipeline Integration: Supports integration with other tools using
-pipeurl,-pipeendpoint,-pipeparam,-pipejsonoptions - WAF Bypass Options: Delay, random delay, rate limiting, and proxy support
- Modular Design: Can be imported and used as a Python module
🚀 Installation
bash
git clone https://github.com/arrester/endabyss.git
cd endabyss
pip install -r requirements.txt
pip install -e .
or
Python
pip install endabyss
For dynamic scanning mode, install Playwright browsers:
playwright install chromium
📖 Usage
CLI Mode
Basic Scan
endabyss -t http://example.com
Dynamic Scanning Mode
endabyss -t http://example.com -m dynamic
Directory Scanning
endabyss -t http://example.com -ds -w wordlist.txt
Pipeline Output
endabyss -t http://example.com -pipeurl # Output URLs only
endabyss -t http://example.com -pipeendpoint # Output endpoints only
endabyss -t http://example.com -pipeparam # Output parameters only
endabyss -t http://example.com -pipejson # Output JSON format
Pipeline Integration Example
endabyss -t http://example.com -pipeurl | sqlmap --batch
Integration with SubSurfer
Pipeline configuration for scanning endpoints with EndAbyss from web subdomains collected by SubSurfer:
1. Basic Integration (Web Subdomains → Endpoint Collection)
subsurfer -t example.com -pipeweb | xargs -I {} endabyss -t {} -pipeurl
2. Save Results to File
subsurfer -t example.com -pipeweb | xargs -I {} endabyss -t {} -o results.txt
3. Integration with Dynamic Scan Mode
subsurfer -t example.com -pipeweb | xargs -I {} endabyss -t {} -m dynamic -pipeurl
4. Collect Detailed Information in JSON Format
subsurfer -t example.com -pipeweb | xargs -I {} endabyss -t {} -pipejson
5. Include Directory Scanning
subsurfer -t example.com -pipeweb | xargs -I {} endabyss -t {} -ds -w wordlist.txt -pipeurl
Using as a Python Module
Basic Endpoint Scan
from endabyss.core.controller.controller import EndAbyssController
import asyncio
async def main():
controller = EndAbyssController(
target="http://example.com",
mode="static",
verbose=1,
depth=5
)
results = await controller.scan()
print(f"Found {len(results['endpoints'])} endpoints")
print(f"Found {len(results['forms'])} forms")
print(f"Found {len(results['parameters'])} parameter sets")
for param_data in results['parameters']:
url = param_data['url']
params = param_data.get('parameters', {})
param_str = '&'.join([f"{k}={v}" for k, v in params.items()])
print(f"{url}?{param_str} [{param_data['method']}]")
if __name__ == "__main__":
asyncio.run(main())
Dynamic Scanning
from endabyss.core.controller.controller import EndAbyssController
import asyncio
async def main():
controller = EndAbyssController(
target="http://example.com",
mode="dynamic",
headless=True,
wait_time=3.0
)
results = await controller.scan()
for endpoint in results['endpoints']:
print(endpoint['url'])
if __name__ == "__main__":
asyncio.run(main())
Result Save
from endabyss.core.controller.controller import EndAbyssController
import asyncio
async def main():
controller = EndAbyssController("http://example.com")
results = await controller.scan()
output_path = controller.get_output_path("results.json")
controller.save_results(results, output_path)
print(f"Results saved to: {output_path}")
if __name__ == "__main__":
asyncio.run(main())
🔧 Key Features from Reference Tools
EndAbyss incorporates key features from various reference tools:
- Katana: Deep crawling and endpoint discovery methodology
- LinkFinder: JavaScript endpoint extraction using regex patterns
- ParamSpider: Parameter extraction and URL cleaning techniques
- SubSurfer: CLI design, pipeline integration, and modular architecture
📋 Available Options
| Option | Description |
|---|---|
-t, --target |
Target URL or domain |
-tf, --targetfile |
File containing list of targets |
-m, --mode |
Scan mode: static (default) or dynamic |
-d, --depth |
Crawling depth (default: 5) |
-c, --concurrency |
Number of concurrent requests (default: 10) |
-ds, --dirscan |
Enable directory scanning |
-w, --wordlist |
Wordlist file for directory scanning |
--delay |
Delay between requests in seconds |
--random-delay |
Random delay range (e.g. 1-3) |
--proxy |
Proxy URL (HTTP/HTTPS/SOCKS5) |
--rate-limit |
Rate limit (requests per second) |
-pipeurl |
Output URLs only for pipeline |
-pipeendpoint |
Output endpoints only for pipeline |
-pipeparam |
Output parameters only for pipeline |
-pipejson |
Output JSON format for pipeline |
📋 Requirements
- Recommended: Python 3.13.0 or later
- aiohttp
- beautifulsoup4
- playwright (for dynamic scanning)
- rich
- requests
📝 License
MIT License
🤝 Contributions
Bug Report, Feature Suggestions, Issue Report
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file endabyss-1.1.0.tar.gz.
File metadata
- Download URL: endabyss-1.1.0.tar.gz
- Upload date:
- Size: 25.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f5c095a9ed0f8ba6a5ca5f0db31d0e6ec8901b7e4f4d4a157a0ba32019c614
|
|
| MD5 |
8e9ec2e2b591bd8d6ab47ae78ca5f6e0
|
|
| BLAKE2b-256 |
988228937879cdff1fb09e9118b81e078946d85b1d039f98c75ec540fcb13b47
|
Provenance
The following attestation bundles were made for endabyss-1.1.0.tar.gz:
Publisher:
publish.yml on arrester/EndAbyss
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
endabyss-1.1.0.tar.gz -
Subject digest:
78f5c095a9ed0f8ba6a5ca5f0db31d0e6ec8901b7e4f4d4a157a0ba32019c614 - Sigstore transparency entry: 926777707
- Sigstore integration time:
-
Permalink:
arrester/EndAbyss@7d9e19c040af3309ac2b275a3f005e1b96fb7860 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/arrester
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7d9e19c040af3309ac2b275a3f005e1b96fb7860 -
Trigger Event:
push
-
Statement type:
File details
Details for the file endabyss-1.1.0-py3-none-any.whl.
File metadata
- Download URL: endabyss-1.1.0-py3-none-any.whl
- Upload date:
- Size: 28.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4d22d0d8f68e41d473e02c117729d53fe95696520b6a180448099414f3bf2a8
|
|
| MD5 |
0d9b93c7777a1cbe7f3ededa3f2e31aa
|
|
| BLAKE2b-256 |
2f7d2bdaf3557a8c6342b283115cf4be30817cf335320c9ec40e7fe16d816866
|
Provenance
The following attestation bundles were made for endabyss-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on arrester/EndAbyss
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
endabyss-1.1.0-py3-none-any.whl -
Subject digest:
f4d22d0d8f68e41d473e02c117729d53fe95696520b6a180448099414f3bf2a8 - Sigstore transparency entry: 926777708
- Sigstore integration time:
-
Permalink:
arrester/EndAbyss@7d9e19c040af3309ac2b275a3f005e1b96fb7860 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/arrester
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7d9e19c040af3309ac2b275a3f005e1b96fb7860 -
Trigger Event:
push
-
Statement type: