Attacking Windows Credential Manager

Windows Vault and Credential Manager

Credential Managerarrow-up-right is a feature built into Windows since Server 2008 R2 and Windows 7. Thorough documentation on how it works is not publicly available, but essentially, it allows users and applications to securely store credentials relevant to other systems and websites. Credentials are stored in special encrypted folders on the computer under the user and system profiles (MITRE ATT&CKarrow-up-right):

  • %UserProfile%\AppData\Local\Microsoft\Vault\

  • %UserProfile%\AppData\Local\Microsoft\Credentials\

  • %UserProfile%\AppData\Roaming\Microsoft\Vault\

  • %ProgramData%\Microsoft\Vault\

  • %SystemRoot%\System32\config\systemprofile\AppData\Roaming\Microsoft\Vault\

Each vault folder contains a Policy.vpol file with AES keys (AES-128 or AES-256) that is protected by DPAPI. These AES keys are used to encrypt the credentials. Newer versions of Windows make use of Credential Guard to further protect the DPAPI master keys by storing them in secured memory enclaves (Virtualization-based Securityarrow-up-right).

Microsoft often refers to the protected stores as Credential Lockers (formerly Windows Vaults). Credential Manager is the user-facing feature/API, while the actual encrypted stores are the vault/locker folders. The following table lists the two types of credentials Windows stores:

Name
Description

Web Credentials

Credentials associated with websites and online accounts. This locker is used by Internet Explorer and legacy versions of Microsoft Edge.

Windows Credentials

Used to store login tokens for various services such as OneDrive, and credentials related to domain users, local network resources, services, and shared directories.

Credential Manager showing Windows and Generic Credentials with modification dates. No certificate-based credentials.

It is possible to export Windows Vaults to .crd files either via Control Panel or with the following command. Backups created this way are encrypted with a password supplied by the user, and can be imported on other Windows systems.

Stored User Names and Passwords window showing a list of credentials with options to add, remove, or edit.

Enumerating credentials with cmdkey

We can use cmdkeyarrow-up-right to enumerate the credentials stored in the current user's profile:

Stored credentials are listed with the following format:

Key
Value

Target

The resource or account name the credential is for. This could be a computer, domain name, or a special identifier.

Type

The kind of credential. Common types are Generic for general credentials, and Domain Password for domain user logons.

User

The user account associated with the credential.

Persistence

Some credentials indicate whether a credential is saved persistently on the computer; credentials marked with Local machine persistence survive reboots.

The first credential in the command output above, virtualapp/didlogical, is a generic credential used by Microsoft account/Windows Live services. The random looking username is an internal account ID. This entry may be ignored for our purposes.

The second credential, Domain:interactive=SRV01\mcharles, is a domain credential associated with the user SRV01\mcharles. Interactive means that the credential is used for interactive logon sessions. Whenever we come across this type of credential, we can use runas to impersonate the stored user like so:

Command Prompt showing user information and domain details. "whoami" command executed, displaying "srv01\mcharles".

Extracting credentials with Mimikatz

There are many different tools that can be used to decrypt stored credentials. One of the tools we can use is mimikatzarrow-up-right. Even within mimikatz, there are multiple ways to attack these credentials - we can either dump credentials from memory using the sekurlsa module, or we can manually decrypt credentials using the dpapi module. For this example, we will target the LSASS process with sekurlsa:

circle-info

Note: Some other tools which may be used to enumerate and extract stored credentials included SharpDPAPIarrow-up-right, LaZagnearrow-up-right, and DonPAPIarrow-up-right.


What is the password mcharles uses for OneDrive?

Go on our target with rcp :

Use cmdkey command :

Run as mcharles user :

circle-info

Depending on how you tackle this exercise, you might have to deal with UAC. If that is the case, one easy solution can be found by looking up the "msconfig UAC bypass".

We makes some searchs about "msconfig UAC bypass". We found this solution with this link : https://medium.com/@irfanbhat3/bypassing-uac-by-gui-based-bypasses-a1a53e8ee8f2arrow-up-right

Now, we are administrator. Let's locate mimikatz.exe on our linux to send it on Windows machine :

Now, open the python server :

Get mimikatz.exe via curl on our windows target as admin :

Now, use it to get the mcharles's password :

We can get the password of mcharles :

Now, connect with rdp at mcharles :

Check the cmdkey list as mcharles :

We can see the onedrive address.

Let's try to get the password of this account. We need to make msconfig UAC bypass again :

And, now, acces to Administrator's Desktop, and use mimikatz to get mcharles's OneDrive credentials :


Last updated