Skip to content

Commit 95ac1af

Browse files
fix(wmi): handle Kerberos auth failures and return proper error codes
1 parent f4bac9b commit 95ac1af

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

nxc/protocols/wmi.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,11 @@ def check_if_admin(self):
155155
if "dcom" in locals():
156156
dcom.disconnect()
157157

158-
if "access_denied" not in str(e).lower():
158+
if "KDC_ERR_PREAUTH_FAILED" in str(e):
159+
self.logger.fail("KDC_ERR_PREAUTH_FAILED returned - check if Kerberos and DNS are working!")
160+
elif "access_denied" not in str(e).lower():
159161
self.logger.fail(str(e))
162+
return False
160163
else:
161164
if not flag or not self.stringBinding:
162165
dcom.disconnect()
@@ -175,6 +178,7 @@ def check_if_admin(self):
175178

176179
if "access_denied" not in str(e).lower():
177180
self.logger.fail(str(e))
181+
return False
178182
else:
179183
dcom.disconnect()
180184
self.logger.extra["protocol"] = "WMI"
@@ -253,11 +257,12 @@ def kerberos_login(self, domain, username, password="", ntlm_hash="", aesKey="",
253257
return False
254258
else:
255259
self.doKerberos = True
256-
self.check_if_admin()
260+
if self.check_if_admin():
261+
out = f"{self.domain}\\{self.username}{used_ccache} {self.mark_pwned()}"
262+
self.logger.success(out)
263+
return True
257264
dce.disconnect()
258-
out = f"{self.domain}\\{self.username}{used_ccache} {self.mark_pwned()}"
259-
self.logger.success(out)
260-
return True
265+
return False
261266

262267
def plaintext_login(self, domain, username, password):
263268
self.password = password

0 commit comments

Comments
 (0)