Сканим поддомены: Подборка софта для сканирования поддоменов
Чем больше используемых методов, тем больше шансов найти интересные поддомены, которые другие могли пропустить.
Некоторые спецы рекомендуют использовать только несколько инструментов (таких как Amass, Massdns, Subfinder & Gobuster). Правда люди, у которых плохое подключение к Интернету и не VPS, не смогут использовать эти высокоэффективные и быстрые инструменты. Поэтому выбирайте то, что работает для вас!
Методы
Linux tools
AltDNS
Subdomain discovery through alterations and permutations
https://github.com/infosec-au/altdns
Installation
git clone https://github.com/infosec-au/altdns.git
cd altdns
pip install -r requirements.txt
Usage:
Generate a list of altered subdomains: ./altdns.py -i known-subdomains.txt -o new_subdomains.txt
Generate a list of altered subdomains & resolve them: ./altdns.py -i known-subdomains.txt -o new_subdomains.txt -r -s resolved_subdomains.txt
Other options
-w wordlist.txt: Use custom wordlist (default altdns/words.txt)
-t 10 Number of threads
-d $IP: Use custom resolver
Amass
Brute force, Google, VirusTotal, alt names, ASN discovery
https://github.com/OWASP/Amass
Installation
go get -u github.com/OWASP/Amass/...
Usage
Get target’s ASN from http://bgp.he.net/
amass -d target.com -o $outfile
Get subdomains from ASN: amass.netnames -asn $asn
Assets-from-spf
Parse net blocks & domain names from SPF records
https://github.com/yamakira/assets-from-spf
Installation
git clone https://github.com/yamakira/assets-from-spf.git
pip install click ipwhois
Usage
cd the-art-of-subdomain-enumeration; python assets_from_spf.py target.com
Options
--asn: Enable ASN enumeration
BiLE-suite
HTML parsing, reverse DNS, TLD expansion, horizontal domain correlation
https://github.com/sensepost/BiLE-suite
Installation
aptitude install httrack
git clone https://github.com/sensepost/BiLE-suite.git
Usage
List links related to a site: cd BiLE-suite; perl BiLE.pl target.com target
Extract subdomains from the results of BiLe.pl: ` cat target.mine grep -v “Link from” cut -d’:’ -f2 grep target.com sort uniq`
Bing
Usage
Find subsomains: site
arget.com
Find subdomains & exclude specific ones: site
arget.com -site:www.target.com
Censys_subdomain_enum.py
pip install censys
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Add your CENSYS API ID & SECRET to the-art-of-subdomain-enumeration/censys_subdomain_enum.py
Cloudflare_enum.py
Extract subdomains from Cloudflare
DNS aggregator
https://github.com/appsecco/the-art...tion/blob/master/cloudflare_subdomain_enum.py
Installation
pip install censys
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Usage
the-art-of-subdomain-enumeration; python cloudflare_subdomain_enum.py your@cloudflare.email target.com
Crt_enum_psql.py
Query crt.sh postgres interface for subdomains
https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/crt_enum_psql.py
Installation
pip install psycopg2
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Usage
cd python the-art-of-subdomain-enumeration; python crtsh_enum_psql.py target.com
Crt_enum_web.py
Parse crt.sh web page for subdomains
https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/crt_enum_web.py
Installation
pip install psycopg2
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Usage
cd python the-art-of-subdomain-enumeration; python3 crtsh_enum_web.py target.com
CTFR
Enumerate subdomains using CT logs (crt.sh)
https://github.com/UnaPibaGeek/ctfr
Installation
git clone https://github.com/UnaPibaGeek/ctfr.git
cd ctfr
pip3 install -r requirements.txt
Usage
cd ctfr; python3 ctfr.py -d target.com -o $outfile
Dig
Zone transfer, DNS lookups & reverse lookups
Installation
Installed by default in Kali, otherwise:
aptitude instal dnsutils
Usage
dig +multi AXFR target.com dig +multi AXFR $ns_server target.com
Domains-from-csp
pip install click
Dnscan
cd dnscan
pip install -r requirements.txt
Dnsrecon
cd dnsrecon
pip install -r requirements.txt
Dnssearch
Fierce
Gobuster
cd gobuster/
go get && go build
go install
Google
Knock
git clone https://github.com/guelfoweb/knock.git
cd knock
nano knockpy/config.json # <- set your virustotal API_KEY
python setup.py install
Ldns-walk
Massdns
cd massdns/
make
Nsec3walker
tar -xzf nsec3walker-20101223.tar.gz
cd nsec3walker-20101223
make
./unhash target.com.collect > target.com.unhash
cat target.com.unhash | grep "target" | wc -l
cat target.com.unhash | grep "target" | awk '{print $2;}'
Rapid7 Forward DNS dataset (Project Sonar)
cat 20170417-fdns.json.gz | pigz -dc | grep ".target.org" | jq`
San_subdomain_enum.py
Second Order
Subbrute
git clone https://github.com/TheRook/subbrute.git
./subbrute.py -t target.out
Subfinder
Sublist3r
cd Sublist3r
pip install -r requirements.txt
Theharvester
vhost-brute
git clone https://github.com/gwen001/vhost-brute.git
Virtual-host-discovery
Virustotal_subdomain_enum.py
Search engines
Specialized search engines
Certificate transparency
Git repositories
Wordlists
Чем больше используемых методов, тем больше шансов найти интересные поддомены, которые другие могли пропустить.
Некоторые спецы рекомендуют использовать только несколько инструментов (таких как Amass, Massdns, Subfinder & Gobuster). Правда люди, у которых плохое подключение к Интернету и не VPS, не смогут использовать эти высокоэффективные и быстрые инструменты. Поэтому выбирайте то, что работает для вас!
Методы
- Scraping
- Brute-force
- Alterations & permutations of already known subdomains
- Online DNS tools
- SSL certificates
- Certificate Transparency
- Search engines
- Public datasets
- DNS aggregators
- Git repositories
- Text parsing (HTML, JavaScript, documents…)
- VHost discovery
- ASN discovery
- Reverse DNS
- Zone transfer (AXFR)
- DNSSEC zone walking
- DNS cache snooping
- Content-Security-Policy HTTP headers
- Sender Policy Framework (SPF) records
- Subject Alternate Name (SAN)
Linux tools
AltDNS
Subdomain discovery through alterations and permutations
https://github.com/infosec-au/altdns
Installation
git clone https://github.com/infosec-au/altdns.git
cd altdns
pip install -r requirements.txt
Usage:
Generate a list of altered subdomains: ./altdns.py -i known-subdomains.txt -o new_subdomains.txt
Generate a list of altered subdomains & resolve them: ./altdns.py -i known-subdomains.txt -o new_subdomains.txt -r -s resolved_subdomains.txt
Other options
-w wordlist.txt: Use custom wordlist (default altdns/words.txt)
-t 10 Number of threads
-d $IP: Use custom resolver
Amass
Brute force, Google, VirusTotal, alt names, ASN discovery
https://github.com/OWASP/Amass
Installation
go get -u github.com/OWASP/Amass/...
Usage
Get target’s ASN from http://bgp.he.net/
amass -d target.com -o $outfile
Get subdomains from ASN: amass.netnames -asn $asn
Assets-from-spf
Parse net blocks & domain names from SPF records
https://github.com/yamakira/assets-from-spf
Installation
git clone https://github.com/yamakira/assets-from-spf.git
pip install click ipwhois
Usage
cd the-art-of-subdomain-enumeration; python assets_from_spf.py target.com
Options
--asn: Enable ASN enumeration
BiLE-suite
HTML parsing, reverse DNS, TLD expansion, horizontal domain correlation
https://github.com/sensepost/BiLE-suite
Installation
aptitude install httrack
git clone https://github.com/sensepost/BiLE-suite.git
Usage
List links related to a site: cd BiLE-suite; perl BiLE.pl target.com target
Extract subdomains from the results of BiLe.pl: ` cat target.mine grep -v “Link from” cut -d’:’ -f2 grep target.com sort uniq`
Bing
Usage
Find subsomains: site
Find subdomains & exclude specific ones: site
Censys_subdomain_enum.py
pip install censys
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Add your CENSYS API ID & SECRET to the-art-of-subdomain-enumeration/censys_subdomain_enum.py
- Usage
- cd the-art-of-subdomain-enumeration; python censys_enumeration.py target.com
Cloudflare_enum.py
Extract subdomains from Cloudflare
DNS aggregator
https://github.com/appsecco/the-art...tion/blob/master/cloudflare_subdomain_enum.py
Installation
pip install censys
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Usage
the-art-of-subdomain-enumeration; python cloudflare_subdomain_enum.py your@cloudflare.email target.com
Crt_enum_psql.py
Query crt.sh postgres interface for subdomains
https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/crt_enum_psql.py
Installation
pip install psycopg2
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Usage
cd python the-art-of-subdomain-enumeration; python crtsh_enum_psql.py target.com
Crt_enum_web.py
Parse crt.sh web page for subdomains
https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/crt_enum_web.py
Installation
pip install psycopg2
git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
Usage
cd python the-art-of-subdomain-enumeration; python3 crtsh_enum_web.py target.com
CTFR
Enumerate subdomains using CT logs (crt.sh)
https://github.com/UnaPibaGeek/ctfr
Installation
git clone https://github.com/UnaPibaGeek/ctfr.git
cd ctfr
pip3 install -r requirements.txt
Usage
cd ctfr; python3 ctfr.py -d target.com -o $outfile
Dig
Zone transfer, DNS lookups & reverse lookups
Installation
Installed by default in Kali, otherwise:
aptitude instal dnsutils
Usage
dig +multi AXFR target.com dig +multi AXFR $ns_server target.com
Domains-from-csp
- Description
- Extract domain names from Content Security Policy(CSP) headers
- https://github.com/yamakira/domains-from-csp
- Installation
pip install click
- Usage
- Parse CSP header for domains: cd domains-from-csp; python csp_parser.py $URL
- Parse CSP header & resolve the domains: cd domains-from-csp; python csp_parser.py $URL -r
Dnscan
- Description
- AXFR, brute force
- https://github.com/rbsec/dnscan
- Install
cd dnscan
pip install -r requirements.txt
- Usage
- Subdomain brute-force of a domain: dnscan.py -d target.com -o outfile -w $wordlist
- Subdomain brute-force of domains listed in a file (one by line): dnscan.py -l $domains_file -o outfile -w $wordlist
- Other options:
- -i $file: Output discovered IP addresses to a text file
- -r: Recursively scan subdomains
- -T: TLD expansion
Dnsrecon
- Description
- DNS zone transfer, DNS cache snooping, TLD expansion, SRV enumeration, DNS records enumeration, brute-force, check for Wildcard resolution, subdomain scraping, PTR record lookup, check DNS server cached records, mDNS records enumeration…
- https://github.com/darkoperator/dnsrecon
- Installation
- aptitude install dnsrecon on Kali, or:
cd dnsrecon
pip install -r requirements.txt
- Usage
- Brute-force: dnsrecon -d target.com -D wordlist.txt -t brt
- DNS cache snooping: dnsrecon -t snoop -D wordlist.txt -n 2.2.2.2 where 2.2.2.2 is the IP of the target’s NS server
- Options
- --threads 8: Number of threads
- -n nsserver.com: Use a custom name server
- Output options
- --db: SQLite 3 file
- --xml: XML file
- --json: JSON file
- --csv: CSV file
Dnssearch
- Description
- Subdomain brute-force
- https://github.com/evilsocket/dnssearch
- Installation
- Add ~/go/bin/ to PATH by adding this line to ~/.profile: export PATH=$PATH:/home/mima/go/bin/
- Usage
- dnssearch -domain target.com -wordlist $wordlist
- Other options
- -a bool: Lookup A records (default true)
- -txt bool: Lookup TXT records (default false)
- -cname bool: Show CNAME records (default false)
- -consumers 10: Number of threads (default 8)
Fierce
- Description
- AXFR, brute force, reverse DNS
- https://github.com/bbhunter/fierce-domain-scanner (original link not available anymore)
- Installation
- Installed by default on Kali
- Usage fierce -dns target.com
Gobuster
- Description
- todo
- https://github.com/OJ/gobuster
- Installation
cd gobuster/
go get && go build
go install
- Usage
- gobuster -m dns -u target.com -w $wordlist
- Other options:
- -i: Show IP addresses
- -t 50: Number of threads (default 10)
- Search engine
- Usage
- Find subsomains: site:*.target.com
- Find subdomains & exclude specific ones: site:*.target.com -site:www.target.com -site:help.target.com
Knock
- Description
- AXFR, virustotal, brute-force
- https://github.com/guelfoweb/knock
- Install
git clone https://github.com/guelfoweb/knock.git
cd knock
nano knockpy/config.json # <- set your virustotal API_KEY
python setup.py install
- Usage
- Use default wordlist: knockpy target.com
- Use custom wordlist: knockpy target.com -w $wordlist
- Resolve domain name & get response headers: knockpy -r target.com or knockpy -r $ip
- Save scan output in CSV: knockpy -c target.com
- Export full report in JSON: knockpy -j target.com
Ldns-walk
- Description
- DNSSEC zone walking
- Installation
- aptitude install ldnsutils
- Usage
- Detect if DNSSEC NSEC or NSEC3 is used:
- ldns-walk target.com
- ldns-walk @nsserver.com target.com
- If DNSSEC NSEC is enabled, you’ll get all the domains
- If DNSSEC NSEC3 is enabled, use Nsec3walker
Massdns
- Description
- DNS resolver
- https://github.com/blechschmidt/massdns
- Installation
cd massdns/
make
- Usage
- Resolve domains: cd massdns; ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt -o S -w output.txt
- Subdomain brute-force: ./scripts/subbrute.py wordlist.txt target.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w output.txt
- Get subdomains with CT logs parser & resolve them with Massdns: ./scripts/ct.py target.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w output.txt
- Other options:
- -s 5000: Number of concurrent lookups (default 10000)
- -t A (default), -t AAAA, -t PTR…: Type of DNS records to retrieve
- Output options
- -o S -w output.txt: Save output as simple text
- -o F: Save output as full text
- -o J: Save output as ndjson
Nsec3walker
- Description
- DNSSEC NSEC3 zone walking
- https://dnscurve.org/nsec3walker.html
- Installation
tar -xzf nsec3walker-20101223.tar.gz
cd nsec3walker-20101223
make
- Usage
./unhash target.com.collect > target.com.unhash
cat target.com.unhash | grep "target" | wc -l
cat target.com.unhash | grep "target" | awk '{print $2;}'
Rapid7 Forward DNS dataset (Project Sonar)
- Description
- Public dataset containing the responses to DNS requests for all forward DNS names known by Rapid7’s Project Sonar
- https://opendata.rapid7.com/sonar.fdns_v2/
- Installation
- aptitude install jq pigz
- Usage
cat 20170417-fdns.json.gz | pigz -dc | grep ".target.org" | jq`
San_subdomain_enum.py
- Description
- Extract subdomains listed in Subject Alternate Name(SAN) of SSL/TLS certificates
- https://github.com/appsecco/the-art-of-subdomain-enumeration/blob/master/san_subdomain_enum.py
- Installation
- git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
- Usage
- cd python the-art-of-subdomain-enumeration; ./san_subdomain_enum.py target.com
Second Order
- Description
- Second-order subdomain takeover scanner
- Can also be leveraged as an HTML parser to enumerate subdomains
- https://github.com/mhmdiaa/second-order
- Installation
- go get github.com/mhmdiaa/second-order
- Usage
- Create a new copy of the default config.json file: cp ~/go/src/github.com/mhmdiaa/second-order/config.json ~/go/src/github.com/mhmdiaa/second-order/config-subs-enum.json
- And edit ` ~/go/src/github.com/mhmdiaa/second-order/config-subs-enum.json to replace “LogCrawledURLs”: false with “LogCrawledURLs”: true`
- second-order -base https://target.com -config config.json -output target.com
- Look for new subdomains in the resulting folder (./target.com)
Subbrute
- Description
- Brute-force
- https://github.com/TheRook/subbrute
- Installation
git clone https://github.com/TheRook/subbrute.git
- Usage
- Test a single domain: ./subbrute.py target.com
- Test multiple domains: ./subbrute.py target1.com target2.com
- Test a list of domains: ./subbrute.py -t domains.txt
- Enumerate subdomains, then their own subdomains:
./subbrute.py -t target.out
- Other options
- -s wordlist.txt: Use a custom subdomains wordlist
- -p: Print data from DNS records
- -o outfile.txt: Save output in Greppable format
- -j JSON: Save output to JSON file
- -c 10: Number of threads (default 8)
- -r resolvers.txt: Use a custom list of DNS resolvers
Subfinder
- Description
- VirusTotal, PassiveTotal, SecurityTrails, Censys, Riddler, Shodan, Bruteforce
- https://github.com/subfinder/subfinder
- Installation:
- go get github.com/subfinder/subfinder
- Configure API keys: ./subfinder --set-config VirustotalAPIKey=0x41414141
- Usage
- Scraping: ./subfinder -d target.com -o $outfile
- Scraping & brute-force: subfinder -b -d target.com -w $wordlist -o $outfile
- Brute-force only: ./subfinder --no-passive -d target.com -b -w $wordlist -o $outfie
- Other options:
- -t 100: Number of threads (default 10)
- -r 8.8.8.8,1.1.1.1 or -rL resolvers.txt: Use custom resolvers
- -nW: Exclude wildcard subdomains
- -recursive: Use recursion
- -o $outfile -oJ: JSON output
Sublist3r
- Description
- Baidu, Yahoo, Google, Bing, Ask, Netcraft, DNSdumpster, VirusTotal, Threat Crowd, SSL Certificates, PassiveDNS
- https://github.com/aboul3la/Sublist3r
- Installation
cd Sublist3r
pip install -r requirements.txt
- Usage
- Scraping: ./sublist3r.py -d target.com -o $outfile
- Bruteforce: ./sublist3r.py -b -d target.com -o $outfile
- Other options:
- -p 80,443: Show only subdomains which have open ports 80 and 443
Theharvester
- Description
- Tool for gathering subdomain names, e-mail addresses, virtual hosts, open ports/ banners, and employee names from different public sources
- Scraping, Brute-force, Reverse DNS, TLD expansion
- Scraping sources: Threatcrowd, Crtsh, Google, googleCSE, google-profiles, Bing, Bingapi, Dogpile, PGP, LinkedIn, vhost, Twitter, GooglePlus, Yahoo, Baidu, Shodan, Hunter
- https://github.com/laramies/theHarvester
- Installation
- aptitude install theharvester
- Usage
- Scraping: theharvester -d target.com -b all
- Other options:
- -h output.html: Save output to HTML file
- -f output.html: Save output to HTML & XML files
- -t: Also do TLD expansion discovery
- -c: Also do subdomain bruteforce
- -n: Also do a DNS reverse query on all ranges discovered
vhost-brute
- Description
- vhosts brute-force
- https://github.com/gwen001/vhost-brute
- Installation
git clone https://github.com/gwen001/vhost-brute.git
- Usage
- php vhost-brute.php --ip=$ip --domain=target.com --wordlist=$outfile
- Other options:
- --threads=5: Maximum threads (default 1)
- --port: Set port
- --ssl: Force SSL
Virtual-host-discovery
- Description
- vhosts brute-force
- https://github.com/jobertabma/virtual-host-discovery
- Installation
- git clone https://github.com/jobertabma/virtual-host-discovery.git
- Usage
- cd virtual-host-discover; ruby scan.rb --ip=1.1.1.1 --host=target.com --output output.txt
- Other options
- --ssl=on: Enable SSL
- --port 8080: Use a custom port
- --wordlist wordlist.txt: Use a custom wordlist
Virustotal_subdomain_enum.py
- Description
- Query VirusTotal API for subdomains
- DNS aggregator
- https://github.com/appsecco/the-art...tion/blob/master/virustotal_subdomain_enum.py
- Installation
- git clone https://github.com/appsecco/the-art-of-subdomain-enumeration.git
- Usage
- python virustotal_subdomain_enum.py target.com 40
Search engines
Specialized search engines
Certificate transparency
- Crt.sh
- Certspotter.com
- Google Transaprency report
- Facebook CT Monitoring
- Certstream
- CertDB
- Censys.io
- Scans.io
- Riddler
- SecurityTrails
- Common Crawl
- PassiveTotal / RiskIQ Community API
- DNSDB
- Forward DNS dataset
- WhoisXML API
- PremiumDrops.com
Git repositories
Wordlists