NetExec/nxc/parsers/nmap.py

31 lines
1.1 KiB
Python

#!/usr/bin/env python3
from libnmap.parser import NmapParser
from nxc.logger import nxc_logger
# right now we are only referencing the port numbers, not the service name, but this should be sufficient for 99% cases
protocol_dict = {
"Ftp": {"ports": [21], "services": ["Ftp"]},
"ssh": {"ports": [22, 2222], "services": ["ssh"]},
"smb": {"ports": [139, 445], "services": ["netbios-ssn", "microsoft-ds"]},
"ldap": {"ports": [389, 636], "services": ["ldap", "ldaps"]},
"mssql": {"ports": [1433], "services": ["ms-sql-s"]},
"rdp": {"ports": [3389], "services": ["ms-wbt-server"]},
"winrm": {"ports": [5985, 5986], "services": ["wsman"]},
"vnc": {"ports": [5900, 5901, 5902, 5903, 5904, 5905, 5906], "services": ["vnc"]},
}
def parse_nmap_xml(nmap_output_file, protocol):
nmap_report = NmapParser.parse_fromfile(nmap_output_file)
targets = []
for host in nmap_report.hosts:
for port, _proto in host.get_open_ports():
if port in protocol_dict[protocol]["ports"]:
targets.append(host.ipv4)
break
nxc_logger.debug(f"Targets parsed from Nmap scan: {targets}")
return targets