"Finding the forgotten, weird, lonely subdomains"
A complete automation suite for bug bounty reconnaissance using GAU (GetAllUrls), following the methodology of starting with the smallest/forgotten subdomains first.
This toolkit follows the "outer rings first" methodology:
- Target the smallest GAU outputs first (the forgotten subdomains)
- These often have the nastiest bugs because they're unmaintained
- Automate the tedious parts, focus human effort on interesting findings
- Multi-threaded GAU scanning across all subdomains
- Automatic output file generation per subdomain
- Progress tracking and error handling
- Results sorted by file size (smallest first!)
- Analyzes GAU outputs sorted by file size
- Categorizes findings:
- Interesting paths (
/admin,/api,/debug, etc.) - Interesting file types (
.config,.backup,.env, etc.) - API endpoints
- JavaScript files
- Potential sensitive data
- Interesting paths (
- Identifies empty subdomains for fuzzing/dorking
- Fetches and analyzes JS files for secrets
- Extracts:
- API endpoints
- AWS keys
- API tokens
- JWT tokens
- Secret keys
- Google API keys
- Slack tokens
- S3 buckets
- Firebase URLs
- Prioritizes findings by severity
- Automated dorking for empty/dead subdomains
- Multiple dork patterns (admin, api, config, etc.)
- Finds hidden content not discovered by GAU
- Respects rate limits
- Chains entire workflow together
- Runs all tools in proper sequence
- Organized output structure
- Can run individual steps or full workflow
# Install Python dependencies
pip install -r requirements.txt
# Install GAU
go install github.com/lc/gau/v2/cmd/gau@latest
# Make sure GAU is in your PATH
export PATH=$PATH:$(go env GOPATH)/bin# Clone or download all scripts
git clone <your-repo> gau-recon-suite
cd gau-recon-suite
# Make scripts executable
chmod +x *.py
# Install dependencies
pip install -r requirements.txt# Run everything at once
python master_recon.py -f subdomains.txt
# Custom settings
python master_recon.py -f subdomains.txt \
-o my_recon \
--gau-threads 20 \
--js-threads 10 \
--dork-delay 3python gau_recon.py -f subdomains.txt -o gau_outputs -t 10python gau_analyzer.py -d gau_outputs -o analysispython js_analyzer.py -f analysis/all_js_files.txt -o js_secretspython duckdork.py -f analysis/empty_subdomains.txt -o dork_results# Just run GAU scanning
python master_recon.py -f subdomains.txt --step gau
# Just run analysis
python master_recon.py -f subdomains.txt --step analyze
# Just run JS analysis
python master_recon.py -f subdomains.txt --step js
# Just run dorking
python master_recon.py -f subdomains.txt --step dorkrecon_output/
βββ 1_gau_outputs/ # Raw GAU outputs
β βββ subdomain1.txt
β βββ subdomain2.txt
β βββ scan_results.json
βββ 2_analysis/ # Analyzed findings
β βββ interesting_findings.txt β START HERE!
β βββ complete_analysis.json
β βββ all_js_files.txt
β βββ all_api_endpoints.txt
β βββ empty_subdomains.txt
β βββ top_parameters.txt
βββ 3_js_analysis/ # JS secrets
β βββ HIGH_PRIORITY.txt β CHECK FOR SECRETS!
β βββ js_analysis.json
β βββ all_endpoints.txt
β βββ categories/
β βββ api_keys.txt
β βββ aws_keys.txt
β βββ tokens.txt
β βββ ...
βββ 4_dork_results/ # Dorking results
βββ interesting_urls.txt β HIDDEN CONTENT!
βββ found_urls.txt
βββ dork_results.json
βββ dork_report.txt
js_analysis/HIGH_PRIORITY.txt- Check for exposed secrets (P1 potential!)analysis/interesting_findings.txt- Quick wins and interesting pathsdork_results/interesting_urls.txt- Hidden admin/API panels- Manually test smallest GAU outputs - The forgotten, lonely subdomains
- Test API endpoints - Authorization bypass opportunities
- Fuzz empty subdomains - Use ffuf/dirsearch on empty_subdomains.txt
Think of 500 subdomains as concentric rings:
ββββββββββββββββββββββββββββββββββ
β Outer Ring (Smallest Files) β β Start here!
β ββββββββββββββββββββββββββββ β
β β Middle Ring β β
β β ββββββββββββββββββββ β β
β β β Inner Ring β β β (Most used/tested)
β β β (Main sites) β β β
β β ββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ
Outer rings = Forgotten subdomains = Better bugs!
- Sometimes GAU finds hardcoded URIs that still work
- Old API endpoints with no auth
- Debug pages left in production
- Free P1s just laying there
- Different paths load different JS files
- Each JS file can leak different APIs
- More paths = more attack surface
- Don't skip the boring-looking stuff
Example: T-Mobile
- Worth spending $50/mo for a phone plan?
- YES! Opens 1000s of authenticated endpoints
- Authenticated area = much larger attack surface
# 1. Get your subdomains (from Subfinder, Amass, etc.)
subfinder -d t-mobile.com -o subdomains.txt
# 2. Run the full recon suite
python master_recon.py -f subdomains.txt -o tmobile_recon
# 3. While it's running (will take hours), start manual testing:
# - Browse to the target, create accounts
# - Explore with Burp Suite
# - Map out functionality
# 4. When complete, prioritize findings:
cat tmobile_recon/3_js_analysis/HIGH_PRIORITY.txt
cat tmobile_recon/2_analysis/interesting_findings.txt
cat tmobile_recon/4_dork_results/interesting_urls.txt
# 5. Test the smallest GAU outputs manually:
ls -S tmobile_recon/1_gau_outputs/*.txt | tail -20
# 6. Fuzz empty subdomains:
ffuf -u https://FUZZ.t-mobile.com/ \
-w wordlist.txt \
-w tmobile_recon/2_analysis/empty_subdomains.txt:FUZZ
# 7. Hunt for bugs! π―-f, --file Subdomains file (required)
-o, --output Output directory (default: gau_outputs)
-t, --threads Number of threads (default: 10)
-q, --quiet Quiet mode-d, --dir GAU outputs directory (required)
-o, --output Output directory (default: analysis)-f, --file JS URLs file (required)
-o, --output Output directory (default: js_analysis)
-t, --threads Number of threads (default: 5)-f, --file Subdomains file (required)
-o, --output Output directory (default: dork_results)
-d, --delay Delay between queries (default: 2 seconds)-f, --file Subdomains file (required)
-o, --output Base output directory (default: recon_output)
--gau-threads Threads for GAU (default: 10)
--js-threads Threads for JS analysis (default: 5)
--dork-delay Delay for dorking (default: 2)
--step Run specific step: gau|analyze|js|dorkgo install github.com/lc/gau/v2/cmd/gau@latest
export PATH=$PATH:$(go env GOPATH)/binThese are expected and suppressed by default. The tool needs to fetch JS files from various hosts.
Increase the --dork-delay parameter:
python duckdork.py -f subdomains.txt -d 5Reduce thread counts:
python master_recon.py -f subdomains.txt --gau-threads 5 --js-threads 3This toolkit automates the methodology described in various bug bounty resources:
- Start with reconnaissance
- Mine data systematically
- Prioritize forgotten/unmaintained areas
- Look for secrets in frontend code
- Use search engines for hidden content
This toolkit is for authorized bug bounty programs only:
- Only test targets in authorized bug bounty programs
- Respect scope and rate limits
- Report findings responsibly
- Don't be a jerk
Educational and bug bounty use only. Use responsibly.
Built following the methodology shared by bug bounty hunters who emphasize:
- Testing the forgotten outer rings
- Automating tedious reconnaissance
- Looking for "stupid bugs" in overlooked places
- Being thorough and systematic
Happy Hunting! May you find many P1s in the forgotten subdomains! π―ππ°