298298ENUM_LSAQUERY_DOMAIN_INFO = "enum_lsaquery_domain_info"
299299ENUM_USERS_RPC = "enum_users_rpc"
300300ENUM_GROUPS_RPC = "enum_groups_rpc"
301- ENUM_SERVICES = "services_check"
302301ENUM_SHARES = "enum_shares"
303302ENUM_SERVICES = "enum_services"
304303ENUM_POLICY = "enum_policy"
@@ -376,6 +375,7 @@ def __init__(self, host, credentials, port=None, tls=None, timeout=None, samba_c
376375 self .ip_version = None
377376 self .smb_ports = []
378377 self .ldap_ports = []
378+ self .listeners = []
379379 self .services = []
380380 self .smb_preferred_dialect = None
381381 self .smb1_supported = False
@@ -749,31 +749,31 @@ class ServiceScan():
749749 def __init__ (self , target , scan_list ):
750750 self .target = target
751751 self .scan_list = scan_list
752- self .services = OrderedDict ({})
752+ self .listeners = OrderedDict ({})
753753
754754 def run (self ):
755755 module_name = ENUM_SERVICES
756756 output = {}
757757
758- print_heading (f"Service Scan on { self .target .host } " )
759- for service , port in SERVICES .items ():
760- if service not in self .scan_list :
758+ print_heading (f"Listener Scan on { self .target .host } " )
759+ for listener , port in SERVICES .items ():
760+ if listener not in self .scan_list :
761761 continue
762762
763- print_info (f"Checking { service } " )
764- result = self .check_accessible (service , port )
763+ print_info (f"Checking { listener } " )
764+ result = self .check_accessible (listener , port )
765765 if result .retval :
766766 print_success (result .retmsg )
767767 else :
768- output = process_error (result .retmsg , ["services " ], module_name , output )
768+ output = process_error (result .retmsg , ["listeners " ], module_name , output )
769769
770- self .services [ service ] = {"port" : port , "accessible" : result .retval }
770+ self .listeners [ listener ] = {"port" : port , "accessible" : result .retval }
771771
772- output ["services " ] = self .services
772+ output ["listeners " ] = self .listeners
773773
774774 return output
775775
776- def check_accessible (self , service , port ):
776+ def check_accessible (self , listener , port ):
777777 if self .target .ip_version == 6 :
778778 address_family = socket .AF_INET6
779779 elif self .target .ip_version == 4 :
@@ -784,22 +784,22 @@ def check_accessible(self, service, port):
784784 sock .settimeout (self .target .timeout )
785785 result = sock .connect_ex ((self .target .host , port ))
786786 if result == 0 :
787- return Result (True , f"{ service } is accessible on { port } /tcp" )
788- return Result (False , f"Could not connect to { service } on { port } /tcp: { SOCKET_ERRORS [result ]} " )
787+ return Result (True , f"{ listener } is accessible on { port } /tcp" )
788+ return Result (False , f"Could not connect to { listener } on { port } /tcp: { SOCKET_ERRORS [result ]} " )
789789 except Exception :
790- return Result (False , f"Could not connect to { service } on { port } /tcp" )
790+ return Result (False , f"Could not connect to { listener } on { port } /tcp" )
791791
792792 def get_accessible_services (self ):
793793 accessible = []
794- for service , entry in self .services .items ():
794+ for listener , entry in self .listeners .items ():
795795 if entry ["accessible" ] is True :
796- accessible .append (service )
796+ accessible .append (listener )
797797 return accessible
798798
799799 def get_accessible_ports_by_pattern (self , pattern ):
800800 accessible = []
801- for service , entry in self .services .items ():
802- if pattern in service and entry ["accessible" ] is True :
801+ for listener , entry in self .listeners .items ():
802+ if pattern in listener and entry ["accessible" ] is True :
803803 accessible .append (entry ["port" ])
804804 return accessible
805805
@@ -2694,14 +2694,14 @@ def run(self):
26942694
26952695 def enum (self ):
26962696 '''
2697- Tries to enum services via net rpc serivce list.
2697+ Tries to enum RPC services via net rpc service list.
26982698 '''
26992699
2700- result = SambaNet (['rpc' , 'service' , 'list' ], self .target , self .creds ).run (log = 'Attempting to get services' )
2700+ result = SambaNet (['rpc' , 'service' , 'list' ], self .target , self .creds ).run (log = 'Attempting to get RPC services' )
27012701 services = {}
27022702
27032703 if not result .retval :
2704- return Result (None , f"Could not get services via 'net rpc service list': { result .retmsg } " )
2704+ return Result (None , f"Could not get RPC services via 'net rpc service list': { result .retmsg } " )
27052705
27062706 match_list = re .findall (r"([^\s]*)\s*\"(.*)\"" , result .retmsg , re .MULTILINE )
27072707 if not match_list :
@@ -2776,9 +2776,9 @@ def run(self):
27762776 # SMB and LDAP, simple TCP connect scan is used for that. From the result
27772777 # of the scan and the arguments passed in by the user, a list of modules
27782778 # is generated. These modules will then be run.
2779- services = self .service_scan ()
2780- self .target .services = services
2781- modules = self .get_modules (services )
2779+ listeners = self .service_scan ()
2780+ self .target .listeners = listeners
2781+ modules = self .get_modules (listeners )
27822782 self .run_modules (modules )
27832783
27842784 def service_scan (self ):
@@ -2796,16 +2796,16 @@ def service_scan(self):
27962796 self .target .ldap_ports = scanner .get_accessible_ports_by_pattern ("LDAP" )
27972797 return scanner .get_accessible_services ()
27982798
2799- def get_modules (self , services , session = True ):
2799+ def get_modules (self , listeners , session = True ):
28002800 modules = []
28012801 if self .args .N :
28022802 modules .append (ENUM_NETBIOS )
28032803
2804- if SERVICE_LDAP in services or SERVICE_LDAPS in services :
2804+ if SERVICE_LDAP in listeners or SERVICE_LDAPS in listeners :
28052805 if self .args .L :
28062806 modules .append (ENUM_LDAP_DOMAIN_INFO )
28072807
2808- if SERVICE_SMB in services or SERVICE_SMB_NETBIOS in services :
2808+ if SERVICE_SMB in listeners or SERVICE_SMB_NETBIOS in listeners :
28092809 modules .append (ENUM_SMB )
28102810 modules .append (ENUM_SMB_DOMAIN_INFO )
28112811 modules .append (ENUM_SESSIONS )
@@ -2869,7 +2869,7 @@ def run_modules(self, modules):
28692869 # If sessions are not possible, we regenerate the list of modules again.
28702870 # This will only leave those modules in, which don't require authentication.
28712871 if self .target .sessions and not self .target .sessions [self .creds .auth_method ]:
2872- modules = self .get_modules (self .target .services , session = False )
2872+ modules = self .get_modules (self .target .listeners , session = False )
28732873
28742874 # Try to get domain name and sid via lsaquery
28752875 if ENUM_LSAQUERY_DOMAIN_INFO in modules :
@@ -2891,7 +2891,7 @@ def run_modules(self, modules):
28912891 result = EnumGroupsRpc (self .target , self .creds , self .args .Gm , self .args .d ).run ()
28922892 self .output .update (result )
28932893
2894- # Enum services
2894+ # Enum RPC services
28952895 if ENUM_SERVICES in modules :
28962896 result = EnumServices (self .target , self .creds ).run ()
28972897 self .output .update (result )
@@ -2923,12 +2923,12 @@ def run_modules(self, modules):
29232923 result = BruteForceShares (self .share_brute_params , self .target , self .creds ).run ()
29242924 self .output .update (result )
29252925
2926- if not self .target .services :
2926+ if not self .target .listeners :
29272927 warn ("Aborting remainder of tests since neither SMB nor LDAP are accessible" )
29282928 elif self .target .sessions ['sessions_possible' ] and not self .target .sessions [self .creds .auth_method ]:
29292929 warn ("Aborting remainder of tests, sessions are possible, but not with the provided credentials (see session check results)" )
29302930 elif not self .target .sessions ['sessions_possible' ]:
2931- if SERVICE_SMB not in self .target .services and SERVICE_SMB_NETBIOS not in self .target .services :
2931+ if SERVICE_SMB not in self .target .listeners and SERVICE_SMB_NETBIOS not in self .target .listeners :
29322932 warn ("Aborting remainder of tests since SMB is not accessible" )
29332933 else :
29342934 warn ("Aborting remainder of tests since sessions failed, rerun with valid credentials" )
0 commit comments