diff --git a/autorecon.py b/autorecon.py index fe4db14..8d7f8a4 100644 --- a/autorecon.py +++ b/autorecon.py @@ -246,8 +246,8 @@ async def service_scan(plugin, service): # Create variables for fformat references. address = service.target.address addressv6 = service.target.address - ipaddress = target.ip - ipaddressv6 = target.ip + ipaddress = service.target.ip + ipaddressv6 = service.target.ip scandir = service.target.scandir protocol = service.protocol port = service.port @@ -265,7 +265,7 @@ async def service_scan(plugin, service): if service.target.ipversion == 'IPv6': nmap_extra += ' -6' - if addressv6 == target.ip: + if addressv6 == service.target.ip: addressv6 = '[' + addressv6 + ']' ipaddressv6 = '[' + ipaddressv6 + ']' @@ -863,6 +863,12 @@ async def main(): sys.exit(0) + for plugin in autorecon.plugins.values(): + for member_name, _ in inspect.getmembers(plugin, predicate=inspect.ismethod): + if member_name == 'check': + plugin.check() + continue + if config['ports']: ports_to_scan = {'tcp':[], 'udp':[]} unique = {'tcp':[], 'udp':[]} diff --git a/plugins/databases.py b/plugins/databases.py index dab52a6..046e31a 100644 --- a/plugins/databases.py +++ b/plugins/databases.py @@ -73,6 +73,10 @@ class OracleTNScmd(ServiceScan): def configure(self): self.match_service_name('^oracle') + def check(self): + if which('tnscmd10g') is None: + error('The tnscmd10g program could not be found. Make sure it is installed. (On Kali, run: sudo apt install tnscmd10g)') + async def run(self, service): if service.target.ipversion == 'IPv4': await service.execute('tnscmd10g ping -h {address} -p {port} 2>&1', outfile='{protocol}_{port}_oracle_tnscmd_ping.txt') @@ -88,6 +92,10 @@ class OracleScanner(ServiceScan): def configure(self): self.match_service_name('^oracle') + def check(self): + if which('oscanner') is None: + error('The oscanner program could not be found. Make sure it is installed. (On Kali, run: sudo apt install oscanner)') + async def run(self, service): await service.execute('oscanner -v -s {address} -P {port} 2>&1', outfile='{protocol}_{port}_oracle_scanner.txt') diff --git a/plugins/http.py b/plugins/http.py index 03b43d6..7a32d40 100644 --- a/plugins/http.py +++ b/plugins/http.py @@ -95,6 +95,18 @@ class DirBuster(ServiceScan): self.match_service_name('^http') self.match_service_name('^nacn_http$', negative_match=True) + def check(self): + tool = self.get_option('tool') + if tool == 'feroxbuster': + if which('feroxbuster') is None: + error('The feroxbuster program could not be found. Make sure it is installed. (On Kali, run: sudo apt install feroxbuster)') + elif tool == 'gobuster': + if which('gobuster') is None: + error('The gobuster program could not be found. Make sure it is installed. (On Kali, run: sudo apt install gobuster)') + elif tool == 'dirsearch': + if which('dirsearch') is None: + error('The dirsearch program could not be found. Make sure it is installed. (On Kali, run: sudo apt install dirsearch)') + async def run(self, service): dot_extensions = ','.join(['.' + x for x in self.get_option('ext').split(',')]) for wordlist in self.get_option('wordlist'): @@ -178,12 +190,14 @@ class WkHTMLToImage(ServiceScan): self.match_service_name('^http') self.match_service_name('^nacn_http$', negative_match=True) + def check(self): + if which('wkhtmltoimage') is None: + error('The wkhtmltoimage program could not be found. Make sure it is installed. (On Kali, run: sudo apt install wkhtmltopdf)') + async def run(self, service): if which('wkhtmltoimage') is not None: if service.protocol == 'tcp': await service.execute('wkhtmltoimage --format png {http_scheme}://{addressv6}:{port}/ {scandir}/{protocol}_{port}_{http_scheme}_screenshot.png') - else: - error('The wkhtmltoimage program could not be found. Make sure it is installed. (On Kali, run: sudo apt install wkhtmltopdf)') class WPScan(ServiceScan): diff --git a/plugins/redis.py b/plugins/redis.py index bbdfbc1..4603904 100644 --- a/plugins/redis.py +++ b/plugins/redis.py @@ -25,11 +25,13 @@ class RedisCli(ServiceScan): def configure(self): self.match_service_name('^redis$') + def check(self): + if which('redis-cli') is None: + error('The redis-cli program could not be found. Make sure it is installed. (On Kali, run: sudo apt install redis-tools)') + async def run(self, service): if which('redis-cli') is not None: _, stdout, _ = await service.execute('redis-cli -p {port} -h {address} INFO', outfile='{protocol}_{port}_redis_info.txt') if not (await stdout.readline()).startswith('NOAUTH Authentication required'): await service.execute('redis-cli -p {port} -h {address} CONFIG GET \'*\'', outfile='{protocol}_{port}_redis_config.txt') await service.execute('redis-cli -p {port} -h {address} CLIENT LIST', outfile='{protocol}_{port}_redis_client-list.txt') - else: - error('The redis-cli program could not be found. Make sure it is installed. (On Kali, run: sudo apt install redis-tools)') diff --git a/plugins/rpc.py b/plugins/rpc.py index 8edcec4..7880bbe 100644 --- a/plugins/rpc.py +++ b/plugins/rpc.py @@ -37,12 +37,7 @@ class RPCDump(ServiceScan): def configure(self): self.match_service_name(['^msrpc', '^rpcbind', '^erpc']) - if which('impacket-rpcdump') is None: - warn('The impacket-rpcdump program could not be found. Some plugins may fail. (On Kali, run: sudo apt install impacket-scripts)') async def run(self, service): - if which('impacket-rpcdump') is not None: - if service.protocol == 'tcp': - await service.execute('impacket-rpcdump -port {port} {address}', outfile='{protocol}_{port}_rpc_rpcdump.txt') - else: - error('The impacket-rpcdump program could not be found. (On Kali, run: sudo apt install impacket-scripts)') + if service.protocol == 'tcp': + await service.execute('impacket-rpcdump -port {port} {address}', outfile='{protocol}_{port}_rpc_rpcdump.txt')