Admin panel finder and directory brute-forcer (async HTTPX/Typer).
Project description
ShadowGate
ShadowGate is a fast, async-driven web reconnaissance and exposure scanner for detecting admin panels, login interfaces, and misconfigured endpoints across single or multiple targets, built for professional penetration testers and security researchers.
⚠️ Authorized testing only. You must have explicit permission to scan any target.
Overview
ShadowGate combines concurrency, user-agent rotation, proxy routing, and response classification to efficiently identify potentially exposed web interfaces.
It provides structured output (NDJSON/JSON/CSV) suitable for pipelines and automation.
Key features:
- Async scanning engine for high-speed probing.
- Multiple routing modes: direct, proxy list, Tor.
- Customizable wordlists, user-agents, and status-code filters.
- Progress bar and interactive output using Rich.
- Machine-readable formats:
ndjson,json,csv. - Legal disclaimers and safety controls to discourage misuse.
Installation
git clone https://github.com/alimghmi/ShadowGate.git
cd ShadowGate
pip install -e .
Or (future):
pip install shadowgate
Requirements: Python 3.10+
Quickstart
Basic CLI syntax:
python -m shadowgate.cli [GLOBAL FLAGS] COMMAND [OPTIONS]
Example:
python -m shadowgate.cli scan -t https://example.com --assume-legal
Global options
-v,-vv- Increase verbosity (info/debug).--quiet- Suppress non-error logs.--version- Show version and exit.
Commands
scan
Probe target(s) for exposed admin/login panels.
Examples:
# Single target
shadowgate scan -t example.com --assume-legal
# Multiple targets
shadowgate scan --targets targets.txt --assume-legal
# Custom wordlist and user agents
shadowgate scan -t example.com --wordlist common.txt --random-ua --assume-legal
# Save results to file (JSON)
shadowgate scan -t example.com --out json --output results.json --assume-legal
# Route traffic via Tor
shadowgate scan -t example.com --tor --assume-legal
Options summary (high level):
-t, --target: Single URL or domain--targets: File with one target per line--wordlist: Override built-in wordlist--useragents: Override built-in user-agents--proxies/--proxy: File or inline proxy(s)--tor: Route traffic via Tor--status-codes: Acceptable response codes (e.g.,200,3xx,401-403)--rps: Requests per second (default: 10)--concurrency: Number of in-flight requests--timeout: Per-request timeout (seconds)--retries: Retry attempts--follow-redirects: Follow HTTP redirects--random-ua: Rotate User-Agent headers--insecure: Disable TLS verification (warning shown)--out: Output format (ndjson,json,csv,table)--output: Save results to file--assume-legal: Confirm you have authorization
Output formats
ndjson- Newline-delimited JSON (recommended for pipelines)json- Pretty JSONcsv- Spreadsheet-compatibletable- Human-readable Rich table
Example NDJSON line:
{"url":"https://example.com/admin/","status":200,"ok":true,"error":null,"elapsed":0.123}
Logging & Debugging
Control verbosity with -v:
# Info-level logs
shadowgate -v scan -t example.com --assume-legal
# Debug with tracebacks
shadowgate -vv scan -t example.com --assume-legal
Logs and progress/status output are written to STDERR; scan results are emitted to STDOUT (so they can be piped or saved).
Architecture (brief)
cli.py- Typer-based CLI with Rich output and logging controls.engine.py- Asynchronous scanning engine handling requests, rate-limiting, and result collection.utils.py- Wordlists, user-agents, helper utilities.wordlists/- Default wordlists and payloads.
The CLI isolates control-plane logs (stderr) from data-plane output (stdout), enabling safe automation and piping.
Legal & Ethics
ShadowGate is intended for authorized security testing and research only. Unauthorized scanning may be illegal and unethical. Always obtain written permission before testing.
Use the bundled legal command to show the short disclaimer:
shadowgate legal
Contributing
Contributions are welcome.
- Fork the repository
- Create a branch (
git checkout -b feature/your-feature) - Open a Pull Request
Please include tests and documentation for new features.
Project details
Release history Release notifications | RSS feed
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 shadowgate-0.1.2.tar.gz.
File metadata
- Download URL: shadowgate-0.1.2.tar.gz
- Upload date:
- Size: 10.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1563bc658e1e466cfa75bec269e3234ab3e31d309ba556444fa9d98968e15530
|
|
| MD5 |
d41ae6711474b3e7eefb95d631a37c58
|
|
| BLAKE2b-256 |
998d021f99c95bb749997fd3cd870608e35082f73580d66a02493fb3d1d312ed
|
Provenance
The following attestation bundles were made for shadowgate-0.1.2.tar.gz:
Publisher:
release.yaml on alimghmi/ShadowGate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shadowgate-0.1.2.tar.gz -
Subject digest:
1563bc658e1e466cfa75bec269e3234ab3e31d309ba556444fa9d98968e15530 - Sigstore transparency entry: 646261210
- Sigstore integration time:
-
Permalink:
alimghmi/ShadowGate@8221d677185cb21b52fcb0eb8f88b1e2acd22d02 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/alimghmi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@8221d677185cb21b52fcb0eb8f88b1e2acd22d02 -
Trigger Event:
push
-
Statement type:
File details
Details for the file shadowgate-0.1.2-py3-none-any.whl.
File metadata
- Download URL: shadowgate-0.1.2-py3-none-any.whl
- Upload date:
- Size: 35.5 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 |
dfc568569f649c71eb38b180092ee5f02e082222ae2c8965ebe467cb603dbc15
|
|
| MD5 |
48a1e7cc8d61ff5d83b1265243d9b94c
|
|
| BLAKE2b-256 |
47e42ccda520c3d6bc6193e87de6c0b0f1124e1c80ac30629c41e38942cd001e
|
Provenance
The following attestation bundles were made for shadowgate-0.1.2-py3-none-any.whl:
Publisher:
release.yaml on alimghmi/ShadowGate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shadowgate-0.1.2-py3-none-any.whl -
Subject digest:
dfc568569f649c71eb38b180092ee5f02e082222ae2c8965ebe467cb603dbc15 - Sigstore transparency entry: 646261276
- Sigstore integration time:
-
Permalink:
alimghmi/ShadowGate@8221d677185cb21b52fcb0eb8f88b1e2acd22d02 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/alimghmi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@8221d677185cb21b52fcb0eb8f88b1e2acd22d02 -
Trigger Event:
push
-
Statement type: