@@ -64,15 +64,15 @@ def safe_str(obj):
6464 self .sid_to_user = {} # dictionary mapping sid string to username
6565
6666 try :
67- resp = samr .c (dce , server_handle , domain )[ "DomainId" ]
68- domain_sid = resp .formatCanonical ()
67+ resp = samr .hSamrLookupDomainInSamServer (dce , server_handle , domain )
68+ domain_sid = resp [ "DomainId" ] .formatCanonical ()
6969 context .log .debug (f"Resolved domain SID for { domain } : { domain_sid } " )
7070 except Exception as e :
7171 context .log .debug (f"Failed to lookup SID for domain { domain } : { e !s} " )
7272 return False
7373
7474 try :
75- domain_handle = samr .hSamrOpenDomain (dce , server_handle , samr .DOMAIN_LOOKUP | samr .DOMAIN_LIST_ACCOUNTS , domain )["DomainHandle" ]
75+ domain_handle = samr .hSamrOpenDomain (dce , server_handle , samr .DOMAIN_LOOKUP | samr .DOMAIN_LIST_ACCOUNTS , resp [ "DomainId" ] )["DomainHandle" ]
7676 except Exception as e :
7777 context .log .debug (f"Failed to open domain { domain } : { e !s} " )
7878 return False
@@ -87,61 +87,43 @@ def safe_str(obj):
8787
8888 try :
8989 group_handle = samr .hSamrOpenGroup (dce , domain_handle , samr .GROUP_LIST_MEMBERS , group_rid )["GroupHandle" ]
90-
91- try :
92- resp = samr .hSamrGetMembersInGroup (dce , group_handle )
93- if resp ["Members" ]["Members" ]:
94- for member in resp ["Members" ]["Members" ]:
95- try :
96- rid = int .from_bytes (member .getData (), byteorder = "little" )
97- try :
98- user_handle = samr .hSamrOpenUser (
99- dce ,
100- domain_handle ,
101- samr .MAXIMUM_ALLOWED ,
102- rid
103- )["UserHandle" ]
104-
105- user_info = samr .hSamrQueryInformationUser2 (
106- dce ,
107- user_handle ,
108- samr .USER_INFORMATION_CLASS .UserAllInformation
109- )["Buffer" ]["All" ]
110-
111- username = user_info ["UserName" ]
112- username_str = (
113- username .encode ("utf-16-le" ).decode ("utf-16-le" )
114- if isinstance (username , bytes )
115- else str (username )
116- )
117-
118- full_username = f"{ domain } \\ { username_str } "
119- admin_users .add (f"{ full_username } (Member of { group_name } )" )
120-
121- # map sid string of user to username
122- user_sid = f"{ domain_sid } -{ rid } "
123- self .sid_to_user [user_sid ] = full_username
124-
125- samr .hSamrCloseHandle (dce , user_handle )
126- except Exception as name_e :
127- try :
128- sid_str = domain_sid .formatCanonical ()
129- full_sid = f"{ sid_str } -{ rid } "
130- except Exception :
131- full_sid = "[unrepresentable SID]"
132- context .log .debug (f"Failed to get user info for RID { rid } : { name_e !s} " )
133- admin_users .add (f"{ domain } \\ { full_sid } (Member of { group_name } )" )
134- except Exception as member_e_inner :
135- context .log .debug (f"Error processing group member: { member_e_inner !s} " )
136- except Exception as member_e :
137- context .log .debug (f"Failed to get members of group { group_name } : { member_e !s} " )
138- finally :
139- with suppress (Exception ):
140- samr .hSamrCloseHandle (dce , group_handle )
141-
14290 except Exception as group_e :
14391 context .log .debug (f"Failed to process { group_name } group: { group_e !s} " )
14492 return False
93+ try :
94+ resp = samr .hSamrGetMembersInGroup (dce , group_handle )
95+ if resp ["Members" ]["Members" ]:
96+ for member in resp ["Members" ]["Members" ]:
97+ try :
98+ rid = int .from_bytes (member .getData (), byteorder = "little" )
99+ try :
100+ user_handle = samr .hSamrOpenUser (dce , domain_handle , samr .MAXIMUM_ALLOWED , rid )["UserHandle" ]
101+ username = samr .hSamrQueryInformationUser2 (dce , user_handle , samr .USER_INFORMATION_CLASS .UserAllInformation )["Buffer" ]["All" ]["UserName" ]
102+
103+ full_username = f"{ domain } \\ { username } "
104+ admin_users .add (f"{ full_username } (Member of { group_name } )" )
105+
106+ # map sid string of user to username
107+ user_sid = f"{ domain_sid } -{ rid } "
108+ self .sid_to_user [user_sid ] = full_username
109+
110+ samr .hSamrCloseHandle (dce , user_handle )
111+ except Exception as name_e :
112+ try :
113+ sid_str = domain_sid
114+ full_sid = f"{ sid_str } -{ rid } "
115+ except Exception :
116+ full_sid = "[unrepresentable SID]"
117+ context .log .debug (f"Failed to get user info for RID { rid } : { name_e !s} " )
118+ admin_users .add (f"{ domain } \\ { full_sid } (Member of { group_name } )" )
119+ except Exception as member_e_inner :
120+ context .log .debug (f"Error processing group member: { member_e_inner !s} " )
121+ except Exception as e :
122+ context .log .exception (e )
123+ context .log .debug (f"Failed to get members of group { group_name } : { e !s} " )
124+ finally :
125+ with suppress (Exception ):
126+ samr .hSamrCloseHandle (dce , group_handle )
145127
146128 if admin_users :
147129 # extract usernames only, remove domain and suffix
0 commit comments