π§ΊPassword Hunting and Gathering
Enumerating Password Policies via SMB NULL Sessions (Linux)
Without credentials, we may be able to obtain a password password policy via SMB NULL session or LDAP anonymous bind.
SMB NULL sessions allow an unauthenticated attacker to retrieve information for the domain, such as a list of users, groups, computers and domain password policy.
Using rpcclient
We can use rpcclient to check a Domain controller for SMB Null session access.
rpcclient -U "" -N IPOnce connected we will can run querydominfo to obtain information about the domain.
We can then run getdompwinfo to get the password policy
Domain: TESTDOMAIN
Server:
Comment:
Total Users: 3650
Total Groups: 0
Total Aliases: 37
Sequence No: 1
Force Logoff: -1
Domain Server State: 0x1
Server Role: ROLE_DOMAIN_PDC
Unknown 3: 0x1
rpcclient $> getdompwinfo
min_password_length: 8
password_properties: 0x00000001
DOMAIN_PASSWORD_COMPLEXUsing enum4linux
We can use this tool to scan for NULL shares and retrieve information similarly to rpcclient. We cam also use the latest rewrite of enum4linux, enum4linux-ng which allow us to export data as YAML or JSON files.
Enumerating Null Session (Windows)
It is a less common type of attack from Windows but is sometimes still used.
We can use the net use command to establish a null session from a Windows machine.
Establish a NULL session
Enumerating Password Policy with LDAP Anonymous Bind (Linux)
The technique allows unauthenticated attackers to retrieve information from the domain. This is a legacy configuration and as of Windows Server 2003, only authenticated users are permitted to run LDAP requests.
We can use tools such as windapsearch.py, ldapsearch and ad-ldapdomaindump.py to pull the password policy.
Using ldapsearch
Enumerating Password Policy (Windows)
If we can authenticate to the domain for a Windows host we can use built-in Windows binaries such as net.exe to retrieve the password policy.
Using net.exe
From this command, we should be able to see the following information:
If passwords expire (Maximum password age set to Unlimited)
The minimum password length
The lockout threshold
Time accounts remained locked out for
Using PowerView
PowerView will give us the same output as using net accounts but in a slightly different format.
Password Policy Analysis
The minimum password length:
A common length for passwords is 8 characters, but more and more organizations are now beginning to enforce a 10-14 character password.
The account lockout threshold:
It is not unusual to see a lower threshold such as 3 or even no threshold set
The lockout duration:
30 minutes is common to see but it's a good idea to make sure we adhere to this so we don't accidentally lockout an account
Password complexity is enabled:
This means that a user must choose a password with 3/4 of the following: an uppercase letter, a lowercase letter, a number and at least a special characters.
Making a Target User List
If we are on an internal machine and don't have valid credentials, we can look for SMB NULL session or LDAP anonymous binds on Domain Controllers.
We can do this with the SYSTEM account because it can impersonate the computer. A computer object is treated as a domain user account.
Using enum4linux
We can again use enum4linux to leverage SMB Null sessions and LDAP anonymous binds to obtain a list of usernames using the -U option.
Using rpcclient
We can use the command enumdomusers after connecting to rpcclient
Using CrackMapExec
We can run this tool with the --users flag to show invalid login attempts and the time of the last invalid login attempt.
Gathering Users with LDAP Anonymous
As discussed we can use various tools to gather users when we find an LDAP anonymous bind
Enumerating Users with Kerbrute
An enumeration tool used to brute force and enumerate valid AD users by using and abusing the Kerberos pre-authentication.
Bruteforcing Kerberos pre-authentication does not trigger the "account failed on log on" event, this means that it's harder for blue teams to spot.
First, make sure DNS and IP are in the etc/hosts file
ex: 10.10.191.131 DOMAIN.local
A fantastic list to use is the jsmith.txt one from https://github.com/insidetrust/statistically-likely-usernames
Last updated
Was this helpful?