Notes OSCP Tools

Tools

kerbrute

Kerbrute abuses Kerberos pre-authentication to test usernames and passwords against a DC quickly. It needs only the KDC (port 88), which is always open on a Domain Controller, and works through AS-REQ messages rather than SMB or LDAP logons. A single Go binary, no install beyond downloading it.

Install

Not installed on Kali by default, hence command not found. Grab the precompiled release binary, which has no dependencies:

wget https://github.com/ropnop/kerbrute/releases/latest/download/kerbrute_linux_amd64 -O kerbrute
chmod +x kerbrute
sudo mv kerbrute /usr/local/bin/kerbrute      # now on PATH as `kerbrute`
kerbrute -h

With Go already installed, go install github.com/ropnop/kerbrute@latest builds it into ~/go/bin instead.

Kerbrute is cross-platform: the same releases page has kerbrute_windows_amd64.exe and a macOS build, so it can run from a Windows foothold too, though it is normally run from Kali against the DC.

What it does

For each name it sends an AS-REQ and reads the reply:

  • unknown user -> KDC_ERR_C_PRINCIPAL_UNKNOWN
  • valid user -> pre-auth-required error, or an AS-REP if pre-auth is disabled

That difference is what the three modes are built on.

Modes

# confirm which usernames exist, from a wordlist, no passwords sent
kerbrute userenum -d corp.com --dc <DC_IP> /usr/share/seclists/Usernames/Names/names.txt

# one password against many users (spray); respect the lockout policy
kerbrute passwordspray -d corp.com --dc <DC_IP> users.txt 'Season2024!'

# many passwords against one user
kerbrute bruteuser -d corp.com --dc <DC_IP> passwords.txt jeff

Wordlists

Username enumeration is only as good as the list. AD accounts are usually person names, so start with a names list and widen if it comes up empty:

  • /usr/share/seclists/Usernames/Names/names.txt (person names, primary)
  • /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt (large generic, fallback)

Both come from seclists (sudo apt install seclists). If the accounts follow a firstname.lastname or flast convention, the list has to match that format, a plain names list will not hit them. A spray or bruteuser takes a password list instead, such as /usr/share/wordlists/rockyou.txt.

Lockout

User enumeration is safe: a request for a nonexistent or valid user is not a failed logon, so it never touches the bad-password count. Password spraying and brute forcing send real guesses and do count toward lockout, so keep spraying to one or two attempts per user per policy window.