@@ -90,27 +90,35 @@ def getSAMRResetInfo(self, context):
9090 resp = e .get_packet ()
9191
9292 for user in resp ["Buffer" ]["Buffer" ]:
93- context .log .info (f"Querying security questions for User: { user ['Name' ]} " )
94- # request SAMR ID 30
95- # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/6b0dff90-5ac0-429a-93aa-150334adabf6
96- r = samr .hSamrOpenUser (dce , domain_handle , samr .MAXIMUM_ALLOWED , user ["RelativeId" ])
97- info = samr .hSamrQueryInformationUser2 (dce , r ["UserHandle" ], samr .USER_INFORMATION_CLASS .UserResetInformation )
98-
99- reset_data = info ["Buffer" ]["Reset" ]["ResetData" ]
100- if reset_data == b"" :
101- continue
102- reset_data = loads (reset_data )
103- questions = reset_data ["questions" ]
104-
105- if len (questions ) == 0 :
106- context .log .highlight (f"User { user ['Name' ]} has no security questions" )
107- else :
108- for qna in questions :
109- question = qna ["question" ]
110- answer = qna ["answer" ]
111- context .log .highlight (f"{ user ['Name' ]} - { question } : { answer } " )
112-
113- samr .hSamrCloseHandle (dce , r ["UserHandle" ])
93+ try :
94+ context .log .info (f"Querying security questions for User: { user ['Name' ]} " )
95+ # request SAMR ID 30
96+ # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/6b0dff90-5ac0-429a-93aa-150334adabf6
97+ r = samr .hSamrOpenUser (dce , domain_handle , samr .MAXIMUM_ALLOWED , user ["RelativeId" ])
98+ info = samr .hSamrQueryInformationUser2 (dce , r ["UserHandle" ], samr .USER_INFORMATION_CLASS .UserResetInformation )
99+
100+ reset_data = info ["Buffer" ]["Reset" ]["ResetData" ]
101+ if reset_data == b"" :
102+ continue
103+ reset_data = loads (reset_data )
104+ questions = reset_data ["questions" ]
105+
106+ if len (questions ) == 0 :
107+ context .log .highlight (f"User { user ['Name' ]} has no security questions" )
108+ else :
109+ for qna in questions :
110+ question = qna ["question" ]
111+ answer = qna ["answer" ]
112+ context .log .highlight (f"{ user ['Name' ]} - { question } : { answer } " )
113+
114+ samr .hSamrCloseHandle (dce , r ["UserHandle" ])
115+ except samr .DCERPCException as e :
116+ if "STATUS_INVALID_INFO_CLASS" in str (e ):
117+ context .log .debug (f"Failed to query security questions for User: { user ['Name' ]} : { e !s} " )
118+ continue
119+ else :
120+ context .log .fail (f"Failed to query security questions for User: { user ['Name' ]} : { e !s} " )
121+ context .log .debug (traceback_format_exc ())
114122 enumeration_context = resp ["EnumerationContext" ]
115123 status = resp ["ErrorCode" ]
116124
0 commit comments