Skip to content

Commit

Permalink
fixed issue #81 with brute command
Browse files Browse the repository at this point in the history
  • Loading branch information
0xe7 committed Jun 22, 2021
1 parent 700ffff commit 3d14a56
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 deletions.
13 changes: 10 additions & 3 deletions Rubeus/Commands/Brute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,18 @@ public BruteforceConsoleReporter(string passwordsOutfile, uint verbose = 0, bool
this.saveTicket = saveTicket;
}

public void ReportValidPassword(string domain, string username, string password, byte[] ticket)
public void ReportValidPassword(string domain, string username, string password, byte[] ticket, Interop.KERBEROS_ERROR err = Interop.KERBEROS_ERROR.KDC_ERR_NONE)
{
Console.WriteLine("[+] STUPENDOUS => {0}:{1}", username, password);
this.WriteUserPasswordToFile(username, password);
this.HandleTicket(username, ticket);
if (ticket != null)
{
Console.WriteLine("[+] STUPENDOUS => {0}:{1}", username, password);
this.HandleTicket(username, ticket);
}
else
{
Console.WriteLine("[+] UNLUCKY => {0}:{1} ({2})", username, password, err);
}
}

public void ReportValidUser(string domain, string username)
Expand Down
17 changes: 11 additions & 6 deletions Rubeus/lib/Bruteforcer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Rubeus

public interface IBruteforcerReporter
{
void ReportValidPassword(string domain, string username, string password, byte[] ticket);
void ReportValidPassword(string domain, string username, string password, byte[] ticket, Interop.KERBEROS_ERROR err = Interop.KERBEROS_ERROR.KDC_ERR_NONE);
void ReportValidUser(string domain, string username);
void ReportInvalidUser(string domain, string username);
void ReportBlockedUser(string domain, string username);
Expand Down Expand Up @@ -63,7 +63,7 @@ private bool TestUsernamePassword(string username, string password)
}
catch (KerberosErrorException ex)
{
this.HandleKerberosError(ex, username);
return this.HandleKerberosError(ex, username, password);
}

return false;
Expand All @@ -89,18 +89,18 @@ private void GetUsernamePasswordTGT(string username, string password)
this.ReportValidPassword(username, password, TGT);
}

private void HandleKerberosError(KerberosErrorException ex, string username)
private bool HandleKerberosError(KerberosErrorException ex, string username, string password)
{


KRB_ERROR krbError = ex.krbError;
bool ret = false;

switch ((Interop.KERBEROS_ERROR)krbError.error_code)
{
case Interop.KERBEROS_ERROR.KDC_ERR_PREAUTH_FAILED:
this.ReportValidUser(username);
break;

case Interop.KERBEROS_ERROR.KDC_ERR_C_PRINCIPAL_UNKNOWN:
this.ReportInvalidUser(username);
break;
Expand All @@ -110,21 +110,26 @@ private void HandleKerberosError(KerberosErrorException ex, string username)
case Interop.KERBEROS_ERROR.KDC_ERR_ETYPE_NOTSUPP:
this.ReportInvalidEncryptionType(username, krbError);
break;
case Interop.KERBEROS_ERROR.KDC_ERR_KEY_EXPIRED:
this.ReportValidPassword(username, password, null, (Interop.KERBEROS_ERROR)krbError.error_code);
ret = true;
break;
default:
this.ReportKrbError(username, krbError);
throw ex;
}
return ret;
}

private void ReportValidPassword(string username, string password, byte[] ticket)
private void ReportValidPassword(string username, string password, byte[] ticket, Interop.KERBEROS_ERROR err = Interop.KERBEROS_ERROR.KDC_ERR_NONE)
{

validCredentials.Add(username, password);
if (!validUsers.ContainsKey(username))
{
validUsers.Add(username, true);
}
this.reporter.ReportValidPassword(this.domain, username, password, ticket);
this.reporter.ReportValidPassword(this.domain, username, password, ticket, err);
}

private void ReportValidUser(string username)
Expand Down

0 comments on commit 3d14a56

Please sign in to comment.