Merge branch 'master' of github.com:NotoriousRebel/theHarvester
This commit is contained in:
NotoriousRebel 2019-08-17 23:18:45 -04:00
commit 38f12852ab
3 changed files with 47 additions and 15 deletions

View file

@ -8,4 +8,4 @@ PyYaml==5.1.2
requests==2.22.0 requests==2.22.0
shodan==1.14.0 shodan==1.14.0
texttable==1.6.2 texttable==1.6.2
grequests>=0.4.0 grequests==0.4.0

View file

@ -89,13 +89,17 @@ def start():
if args.source is not None: if args.source is not None:
engines = set(map(str.strip, args.source.split(','))) engines = set(map(str.strip, args.source.split(',')))
if args.source == 'all' and args.exclude is not None: if args.source == 'all' and args.exclude is not None:
engines = modified_source(args.exclude) engines = modified_source(args.exclude)
if set(engines).issubset(Core.get_supportedengines()): if set(engines).issubset(Core.get_supportedengines()):
print(f'\033[94m[*] Target: {word} \n \033[0m') print(f'\033[94m[*] Target: {word} \n \033[0m')
for engineitem in engines: for engineitem in engines:
if engineitem == 'baidu': if engineitem == 'baidu':
print('\033[94m[*] Searching Baidu. \033[0m') print('\033[94m[*] Searching Baidu. \033[0m')
from theHarvester.discovery import baidusearch
try: try:
search = baidusearch.SearchBaidu(word, limit) search = baidusearch.SearchBaidu(word, limit)
search.process() search.process()
@ -110,6 +114,7 @@ def start():
elif engineitem == 'bing' or engineitem == 'bingapi': elif engineitem == 'bing' or engineitem == 'bingapi':
print('\033[94m[*] Searching Bing. \033[0m') print('\033[94m[*] Searching Bing. \033[0m')
from theHarvester.discovery import bingsearch
try: try:
search = bingsearch.SearchBing(word, limit, start) search = bingsearch.SearchBing(word, limit, start)
bingapi = '' bingapi = ''
@ -146,14 +151,17 @@ def start():
elif engineitem == 'crtsh': elif engineitem == 'crtsh':
try: try:
print('\033[94m[*] Searching CRT.sh. \033[0m') print('\033[94m[*] Searching CRT.sh. \033[0m')
from theHarvester.discovery import crtsh
search = crtsh.SearchCrtsh(word) search = crtsh.SearchCrtsh(word)
search.process() search.process()
hosts = filter(search.get_data()) hosts = filter(search.get_data())
all_hosts.extend(hosts) all_hosts.extend(hosts)
db = stash.stash_manager() db = stash.stash_manager()
db.store_all(word, all_hosts, 'host', 'CRTsh') db.store_all(word, all_hosts, 'host', 'CRTsh')
except Exception as e:
pass except Exception:
print(f'\033[93m[!] An timeout occurred with crtsh, cannot find {args.domain}\033[0m')
elif engineitem == 'dnsdumpster': elif engineitem == 'dnsdumpster':
try: try:
print('\033[94m[*] Searching DNSdumpster. \033[0m') print('\033[94m[*] Searching DNSdumpster. \033[0m')
@ -170,6 +178,7 @@ def start():
elif engineitem == 'dogpile': elif engineitem == 'dogpile':
try: try:
print('\033[94m[*] Searching Dogpile. \033[0m') print('\033[94m[*] Searching Dogpile. \033[0m')
from theHarvester.discovery import dogpilesearch
search = dogpilesearch.SearchDogpile(word, limit) search = dogpilesearch.SearchDogpile(word, limit)
search.process() search.process()
emails = filter(search.get_emails()) emails = filter(search.get_emails())
@ -227,6 +236,7 @@ def start():
elif engineitem == 'google': elif engineitem == 'google':
print('\033[94m[*] Searching Google. \033[0m') print('\033[94m[*] Searching Google. \033[0m')
from theHarvester.discovery import googlesearch
search = googlesearch.search_google(word, limit, start) search = googlesearch.search_google(word, limit, start)
search.process(google_dorking) search.process(google_dorking)
emails = filter(search.get_emails()) emails = filter(search.get_emails())
@ -279,6 +289,7 @@ def start():
elif engineitem == 'linkedin': elif engineitem == 'linkedin':
print('\033[94m[*] Searching Linkedin. \033[0m') print('\033[94m[*] Searching Linkedin. \033[0m')
from theHarvester.discovery import linkedinsearch
search = linkedinsearch.SearchLinkedin(word, limit) search = linkedinsearch.SearchLinkedin(word, limit)
search.process() search.process()
people = search.get_people() people = search.get_people()
@ -295,6 +306,7 @@ def start():
elif engineitem == 'netcraft': elif engineitem == 'netcraft':
print('\033[94m[*] Searching Netcraft. \033[0m') print('\033[94m[*] Searching Netcraft. \033[0m')
from theHarvester.discovery import netcraft
search = netcraft.SearchNetcraft(word) search = netcraft.SearchNetcraft(word)
search.process() search.process()
hosts = filter(search.get_hostnames()) hosts = filter(search.get_hostnames())
@ -324,6 +336,7 @@ def start():
elif engineitem == 'threatcrowd': elif engineitem == 'threatcrowd':
print('\033[94m[*] Searching Threatcrowd. \033[0m') print('\033[94m[*] Searching Threatcrowd. \033[0m')
from theHarvester.discovery import threatcrowd
try: try:
search = threatcrowd.SearchThreatcrowd(word) search = threatcrowd.SearchThreatcrowd(word)
search.process() search.process()
@ -331,8 +344,8 @@ def start():
all_hosts.extend(hosts) all_hosts.extend(hosts)
db = stash.stash_manager() db = stash.stash_manager()
db.store_all(word, all_hosts, 'host', 'threatcrowd') db.store_all(word, all_hosts, 'host', 'threatcrowd')
except Exception: except Exception as e:
pass print('')
elif engineitem == 'trello': elif engineitem == 'trello':
print('\033[94m[*] Searching Trello. \033[0m') print('\033[94m[*] Searching Trello. \033[0m')
@ -352,6 +365,7 @@ def start():
elif engineitem == 'twitter': elif engineitem == 'twitter':
print('\033[94m[*] Searching Twitter usernames using Google. \033[0m') print('\033[94m[*] Searching Twitter usernames using Google. \033[0m')
from theHarvester.discovery import twittersearch
search = twittersearch.SearchTwitter(word, limit) search = twittersearch.SearchTwitter(word, limit)
search.process() search.process()
people = search.get_people() people = search.get_people()
@ -368,6 +382,7 @@ def start():
elif engineitem == 'virustotal': elif engineitem == 'virustotal':
print('\033[94m[*] Searching VirusTotal. \033[0m') print('\033[94m[*] Searching VirusTotal. \033[0m')
from theHarvester.discovery import virustotal
search = virustotal.SearchVirustotal(word) search = virustotal.SearchVirustotal(word)
search.process() search.process()
hosts = filter(search.get_hostnames()) hosts = filter(search.get_hostnames())
@ -377,6 +392,7 @@ def start():
elif engineitem == 'yahoo': elif engineitem == 'yahoo':
print('\033[94m[*] Searching Yahoo. \033[0m') print('\033[94m[*] Searching Yahoo. \033[0m')
from theHarvester.discovery import yahoosearch
search = yahoosearch.SearchYahoo(word, limit) search = yahoosearch.SearchYahoo(word, limit)
search.process() search.process()
hosts = search.get_hostnames() hosts = search.get_hostnames()
@ -393,6 +409,7 @@ def start():
all_hosts = [] all_hosts = []
try: try:
print('\033[94m[*] Searching Baidu. \033[0m') print('\033[94m[*] Searching Baidu. \033[0m')
from theHarvester.discovery import baidusearch
search = baidusearch.SearchBaidu(word, limit) search = baidusearch.SearchBaidu(word, limit)
search.process() search.process()
all_emails = filter(search.get_emails()) all_emails = filter(search.get_emails())
@ -405,6 +422,7 @@ def start():
pass pass
try: try:
print('\033[94m[*] Searching Bing. \033[0m') print('\033[94m[*] Searching Bing. \033[0m')
from theHarvester.discovery import bingsearch
bingapi = 'no' bingapi = 'no'
search = bingsearch.SearchBing(word, limit, start) search = bingsearch.SearchBing(word, limit, start)
search.process(bingapi) search.process(bingapi)
@ -435,13 +453,17 @@ def start():
db.store_all(word, uniquehosts, 'host', 'censys') db.store_all(word, uniquehosts, 'host', 'censys')
db.store_all(word, uniqueips, 'ip', 'censys') db.store_all(word, uniqueips, 'ip', 'censys')
print('\033[94m[*] Searching CRT.sh. \033[0m') try:
search = crtsh.SearchCrtsh(word) print('\033[94m[*] Searching CRT.sh. \033[0m')
search.process() from theHarvester.discovery import crtsh
hosts = filter(search.get_data()) search = crtsh.SearchCrtsh(word)
all_hosts.extend(hosts) search.process()
db = stash.stash_manager() hosts = filter(search.get_data())
db.store_all(word, all_hosts, 'host', 'CRTsh') all_hosts.extend(hosts)
db = stash.stash_manager()
db.store_all(word, all_hosts, 'host', 'CRTsh')
except Exception:
print(f'\033[93m[!] An timeout occurred with crtsh: cannot find {args.domain} \033[0m')
try: try:
print('\033[94m[*] Searching DNSdumpster. \033[0m') print('\033[94m[*] Searching DNSdumpster. \033[0m')
@ -456,6 +478,7 @@ def start():
print(f'\033[93m[!] An error occurred with dnsdumpster: {e} \033[0m') print(f'\033[93m[!] An error occurred with dnsdumpster: {e} \033[0m')
print('\033[94m[*] Searching Dogpile. \033[0m') print('\033[94m[*] Searching Dogpile. \033[0m')
from theHarvester.discovery import dogpilesearch
try: try:
search = dogpilesearch.SearchDogpile(word, limit) search = dogpilesearch.SearchDogpile(word, limit)
search.process() search.process()
@ -495,6 +518,7 @@ def start():
except Exception: except Exception:
pass pass
print('\033[94m[*] Searching Google. \033[0m') print('\033[94m[*] Searching Google. \033[0m')
from theHarvester.discovery import googlesearch
search = googlesearch.search_google(word, limit, start) search = googlesearch.search_google(word, limit, start)
search.process(google_dorking) search.process(google_dorking)
emails = filter(search.get_emails()) emails = filter(search.get_emails())
@ -546,6 +570,7 @@ def start():
print(e) print(e)
print('\033[94m[*] Searching Linkedin. \033[0m') print('\033[94m[*] Searching Linkedin. \033[0m')
from theHarvester.discovery import linkedinsearch
search = linkedinsearch.SearchLinkedin(word, limit) search = linkedinsearch.SearchLinkedin(word, limit)
search.process() search.process()
people = search.get_people() people = search.get_people()
@ -561,6 +586,7 @@ def start():
print(user) print(user)
print('\033[94m[*] Searching Netcraft. \033[0m') print('\033[94m[*] Searching Netcraft. \033[0m')
from theHarvester.discovery import netcraft
search = netcraft.SearchNetcraft(word) search = netcraft.SearchNetcraft(word)
search.process() search.process()
hosts = filter(search.get_hostnames()) hosts = filter(search.get_hostnames())
@ -588,6 +614,7 @@ def start():
pass pass
print('\033[94m[*] Searching Threatcrowd. \033[0m') print('\033[94m[*] Searching Threatcrowd. \033[0m')
from theHarvester.discovery import threatcrowd
try: try:
search = threatcrowd.SearchThreatcrowd(word) search = threatcrowd.SearchThreatcrowd(word)
search.process() search.process()
@ -615,6 +642,7 @@ def start():
try: try:
print('\033[94m[*] Searching Twitter. \033[0m') print('\033[94m[*] Searching Twitter. \033[0m')
from theHarvester.discovery import twittersearch
search = twittersearch.SearchTwitter(word, limit) search = twittersearch.SearchTwitter(word, limit)
search.process() search.process()
people = search.get_people() people = search.get_people()
@ -630,6 +658,7 @@ def start():
print('\n[*] Virtual hosts:') print('\n[*] Virtual hosts:')
print('------------------') print('------------------')
for l in host_ip: for l in host_ip:
from theHarvester.discovery import baidusearch
search = bingsearch.SearchBing(l, limit, start) search = bingsearch.SearchBing(l, limit, start)
search.process_vhost() search.process_vhost()
res = search.get_allhostnames() res = search.get_allhostnames()
@ -643,6 +672,7 @@ def start():
vhost = sorted(set(vhost)) vhost = sorted(set(vhost))
print('\033[94m[*] Searching VirusTotal. \033[0m') print('\033[94m[*] Searching VirusTotal. \033[0m')
from theHarvester.discovery import virustotal
search = virustotal.SearchVirustotal(word) search = virustotal.SearchVirustotal(word)
search.process() search.process()
hosts = filter(search.get_hostnames()) hosts = filter(search.get_hostnames())
@ -652,6 +682,7 @@ def start():
try: try:
print('\033[94m[*] Searching Yahoo. \033[0m') print('\033[94m[*] Searching Yahoo. \033[0m')
from theHarvester.discovery import yahoosearch
search = yahoosearch.SearchYahoo(word, limit) search = yahoosearch.SearchYahoo(word, limit)
search.process() search.process()
hosts = search.get_hostnames() hosts = search.get_hostnames()

View file

@ -1,12 +1,13 @@
from theHarvester.lib.core import * from theHarvester.lib.core import *
import requests import requests
class SearchCrtsh: class SearchCrtsh:
def __init__(self, word): def __init__(self, word):
self.word = word self.word = word
self.data = set() self.data = set()
def do_search(self): def do_search(self):
try: try:
data = set() data = set()
@ -18,8 +19,8 @@ def do_search(self):
data = set([dct['name_value'][2:] if '*.' == dct['name_value'][:2] else dct['name_value'] for dct in content]) data = set([dct['name_value'][2:] if '*.' == dct['name_value'][:2] else dct['name_value'] for dct in content])
return data return data
return data return data
except Exception as e: except Exception:
print(f'An exception has occurred in crtsh: {e}') pass
def process(self): def process(self):
print('\tSearching results.') print('\tSearching results.')