Subscan is a powerful subdomain enumeration tool built with Rust, specifically designed for penetration testing purposes. It combines various discovery techniques into a single, lightweight binary, making subdomain hunting easier and faster for security researchers
Features
- 🕵️ Smart Discovery Tricks
- Use multiple search engines (
Google,Yahoo,Bing,DuckDuckGo, etc.) - Integrate with APIs like
Shodan,Censys,VirusTotaland more - Perform zone transfer checks
- Subdomain brute-forcing with optimized wordlists
- Use multiple search engines (
- 🔍 Resolve IP addresses for all subdomains
- 📎 Export reports in
CSV,HTML,JSON, orTXTformats - 🛠️ Configurable
- Customize HTTP requests (user-agent, timeout, etc.)
- Rotate requests via proxies (
--proxyargument) - Fine-tune IP resolver with
--resolverarguments - Filter and run specific modules with
--skipsand--modules
- 🐳 Docker Friendly
- Native support for
amd64andarm64Linux platforms - A tiny container that won't eat up your storage — under 1GB and ready to roll 🚀
- Native support for
- 💻 Compatible with multiple platforms and easy to install as a single binary
Install
🦀 Install the subscan tool using Cargo, Rust's package manager. Make sure you have Rust installed on your system. Then, run
Usage
✨ Here's a quick overview of how to use it
| |
| |
| | | | || | |) \_| (| | | | |
||||| ||
)
)
Start Scan
To scan a domain using all available modules, use the following command
You can also choose specific modules to run or skip using the --skips and --modules arguments. Module names should be provided as a comma-separated list
[!NOTE] If a module is included in both the
--skipsand--modulesarguments, it will be skipped and not executed
Brute Force
Use the brute command to start a brute force attack with a specific wordlist
Environments
All environments are managed by the .env file. Subscan can read your environments from this .env file. You can refer to the .env.template file to see how to create them
[!TIP] Also you can specify your environments from shell
SUBSCAN_VIRUSTOTAL_APIKEY=foo
| Name | Required | Description |
|---|---|---|
SUBSCAN_CHROME_PATH |
false |
Specify your Chrome executable. If not specified, the Chrome binary will be fetched automatically by headless_chrome based on your system architecture |
SUBSCAN_<MODULE_NAME>_HOST |
false |
Some API integration modules can provide user specific host, for these cases, set module specific host |
SUBSCAN_<MODULE_NAME>_APIKEY |
false |
Some modules may include API integration and require an API key for authentication. Set the API key in these cases |
SUBSCAN_<MODULE_NAME>_USERNAME |
false |
Set the username for a module if it uses HTTP basic authentication |
SUBSCAN_<MODULE_NAME>_PASSWORD |
false |
Set the password for a module if it uses HTTP basic authentication |
Docker
🐳 For containerized usage, you can pull the eredotpkfr/subscan Docker image directly from Docker Hub
After pulling the pre-built image, you can easily run the container to perform subdomain enumeration
Specify environment variable via docker --env
To specify wordlist into docker container, use /data directory
Development
📚 You can find all the resources and documentation for developing Subscan in the Development chapter of the project's book page
Credits
🙏 Parts of the codebase are inspired by
- subfinder - Fast passive subdomain enumeration tool
- Sublist3r - Fast subdomains enumeration tool for penetration testers
- subbrute - A DNS meta-query spider that enumerates DNS records, and subdomains
- knock - Knock subdomain scan
- dnsrecon - DNS enumeration script
Contributing
📢 All contributors are welcome! Whether you're fixing bugs, adding new features, improving documentation, or sharing ideas, your contributions are highly valued and appreciated
To get started, please check out the CONTRIBUTING.md file
Donate
Contact
Blog - erdoganyoksul.com Mail - erdoganyoksul3@gmail.com