Skip to content

Commit 280baad

Browse files
committed
Add try&except block for every user so we continue if the first fails
1 parent 766ef1e commit 280baad

1 file changed

Lines changed: 29 additions & 21 deletions

File tree

nxc/modules/security-questions.py

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)