Added open port alerts.

This commit is contained in:
Tib3rius 2021-09-03 23:10:11 -04:00
parent 433776a98f
commit 4c3253e233
3 changed files with 37 additions and 12 deletions

View File

@ -436,7 +436,7 @@ async def scan_target(target):
else: else:
continue continue
info('Found {bmagenta}' + service.name + '{rst} on {bmagenta}' + service.protocol + '/' + str(service.port) + '{rst} on {byellow}' + target.address + '{rst}') info('Identified service {bmagenta}' + service.name + '{rst} on {bmagenta}' + service.protocol + '/' + str(service.port) + '{rst} on {byellow}' + target.address + '{rst}')
if not config['only_scans_dir']: if not config['only_scans_dir']:
with open(os.path.join(target.reportdir, 'notes.txt'), 'a') as file: with open(os.path.join(target.reportdir, 'notes.txt'), 'a') as file:
@ -1026,9 +1026,9 @@ async def main():
continue continue
if isinstance(ip, ipaddress.IPv4Address): if isinstance(ip, ipaddress.IPv4Address):
autorecon.pending_targets.append(Target(ip_str, 'IPv4', 'ip', autorecon)) autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv4', 'ip', autorecon))
elif isinstance(ip, ipaddress.IPv6Address): elif isinstance(ip, ipaddress.IPv6Address):
autorecon.pending_targets.append(Target(ip_str, 'IPv6', 'ip', autorecon)) autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv6', 'ip', autorecon))
else: else:
fail('This should never happen unless IPv8 is invented.') fail('This should never happen unless IPv8 is invented.')
except ValueError: except ValueError:
@ -1052,9 +1052,9 @@ async def main():
continue continue
if isinstance(ip, ipaddress.IPv4Address): if isinstance(ip, ipaddress.IPv4Address):
autorecon.pending_targets.append(Target(ip_str, 'IPv4', 'ip', autorecon)) autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv4', 'ip', autorecon))
elif isinstance(ip, ipaddress.IPv6Address): elif isinstance(ip, ipaddress.IPv6Address):
autorecon.pending_targets.append(Target(ip_str, 'IPv6', 'ip', autorecon)) autorecon.pending_targets.append(Target(ip_str, ip_str, 'IPv6', 'ip', autorecon))
else: else:
fail('This should never happen unless IPv8 is invented.') fail('This should never happen unless IPv8 is invented.')
@ -1062,6 +1062,7 @@ async def main():
try: try:
addresses = socket.getaddrinfo(target, None, socket.AF_INET) addresses = socket.getaddrinfo(target, None, socket.AF_INET)
ip = addresses[0][4][0]
found = False found = False
for t in autorecon.pending_targets: for t in autorecon.pending_targets:
@ -1072,10 +1073,11 @@ async def main():
if found: if found:
continue continue
autorecon.pending_targets.append(Target(target, 'IPv4', 'hostname', autorecon)) autorecon.pending_targets.append(Target(target, ip, 'IPv4', 'hostname', autorecon))
except socket.gaierror: except socket.gaierror:
try: try:
addresses = socket.getaddrinfo(target, None, socket.AF_INET6) addresses = socket.getaddrinfo(target, None, socket.AF_INET6)
ip = addresses[0][4][0]
found = False found = False
for t in autorecon.pending_targets: for t in autorecon.pending_targets:
@ -1086,7 +1088,7 @@ async def main():
if found: if found:
continue continue
autorecon.pending_targets.append(Target(target, 'IPv6', 'hostname', autorecon)) autorecon.pending_targets.append(Target(target, ip, 'IPv6', 'hostname', autorecon))
except socket.gaierror: except socket.gaierror:
error(target + ' does not appear to be a valid IP address, IP range, or resolvable hostname.') error(target + ' does not appear to be a valid IP address, IP range, or resolvable hostname.')
errors = True errors = True

View File

@ -5,8 +5,9 @@ from autorecon.io import e, info
class Target: class Target:
def __init__(self, address, ipversion, type, autorecon): def __init__(self, address, ip, ipversion, type, autorecon):
self.address = address self.address = address
self.ip = ip
self.ipversion = ipversion self.ipversion = ipversion
self.type = type self.type = type
self.autorecon = autorecon self.autorecon = autorecon

View File

@ -1,6 +1,6 @@
from autorecon.plugins import PortScan from autorecon.plugins import PortScan
from autorecon.io import error from autorecon.io import info, error
import os import os, re
class QuickTCPPortScan(PortScan): class QuickTCPPortScan(PortScan):
@ -36,7 +36,18 @@ class AllTCPPortScan(PortScan):
if target.ports: # Don't run this plugin if there are custom ports. if target.ports: # Don't run this plugin if there are custom ports.
return [] return []
process, stdout, stderr = await target.execute('nmap {nmap_extra} -A --osscan-guess --version-all -p- -oN "{scandir}/_full_tcp_nmap.txt" -oX "{scandir}/xml/_full_tcp_nmap.xml" {address}', blocking=False) process, stdout, stderr = await target.execute('nmap {nmap_extra} -A --osscan-guess --version-all -p- -oN "{scandir}/_full_tcp_nmap.txt" -oX "{scandir}/xml/_full_tcp_nmap.xml" {address}', blocking=False)
services = await target.extract_services(stdout) services = []
while True:
line = await stdout.readline()
if line is not None:
match = re.search('^Discovered open port ([0-9]+)/tcp', line)
if match:
info('Discovered open port {bmagenta}tcp/' + match.group(1) + '{rst} on {byellow}' + target.address + '{rst}')
service = target.extract_service(line)
if service:
services.append(service)
else:
break
await process.wait() await process.wait()
return services return services
@ -59,7 +70,18 @@ class Top100UDPPortScan(PortScan):
return [] return []
else: else:
process, stdout, stderr = await target.execute('nmap {nmap_extra} -sU -A --version-all --top-ports 100 -oN "{scandir}/_top_100_udp_nmap.txt" -oX "{scandir}/xml/_top_100_udp_nmap.xml" {address}', blocking=False) process, stdout, stderr = await target.execute('nmap {nmap_extra} -sU -A --version-all --top-ports 100 -oN "{scandir}/_top_100_udp_nmap.txt" -oX "{scandir}/xml/_top_100_udp_nmap.xml" {address}', blocking=False)
services = await target.extract_services(stdout) services = []
while True:
line = await stdout.readline()
if line is not None:
match = re.search('^Discovered open port ([0-9]+)/udp', line)
if match:
info('Discovered open port {bmagenta}udp/' + match.group(1) + '{rst} on {byellow}' + target.address + '{rst}')
service = target.extract_service(line)
if service:
services.append(service)
else:
break
await process.wait() await process.wait()
return services return services
else: else: