Credentials table schema
password or hash populated, or both (for example when a plaintext password is entered and its NTLM hash is derived separately). The source column identifies how the credential was obtained.
Capture sources
Responder
LLMNR/NBT-NS/mDNS poisoning captures NTLM challenge-response hashes from machines on the same broadcast domain. Hashes are written to the Responder log file and parsed into the credentials table.
netexec
Authenticated SMB, LDAP, and LSA sweeps return plaintext passwords and hashes. Each appears with a distinct source tag:
netexec(SMB), netexec(LDAP), or netexec(LSA).Kerberoast
Service account TGS hashes in
$krb5tgs$ format are extracted from the kerberoast output file and stored with source = 'kerberoast'.ASREPRoast
AS-REP hashes in
$krb5asrep$ format are extracted with source = 'asreproast'. These are for accounts with Kerberos pre-authentication disabled.GMSA Passwords
Group Managed Service Account NTLM hashes are parsed from netexec output and stored with
source = 'gmsa'.Manual entry
Credentials added directly through the DATA → Credentials UI use
source = 'manual'.Deduplication logic
Each capture function applies source-specific deduplication before writing to the database.Kerberoast hashes (parse_kerberoast_hashes)
Kerberoast hashes change on every request (they include a fresh timestamp), so deduplication is by username + source rather than by hash value. When a username already exists with source = 'kerberoast', the existing row is updated with the new hash:
- Type 23 (most common):
$krb5tgs$23$*username$realm$spn*$... - Type 17/18 computer accounts:
$krb5tgs$18$accountname$$REALM$...(trailing$preserved) - Type 17/18 user accounts:
$krb5tgs$17$accountname$REALM$...
ASREPRoast hashes (parse_asreproast_hashes)
AS-REP hashes also contain timestamps and change on each request. Deduplication is the same pattern — update by username + source = 'asreproast':
GMSA passwords (parse_gmsa_passwords)
GMSA entries are matched with the pattern Account: <name> NTLM: <32-hex>. Deduplication is by username + source = 'gmsa':
How saved credentials populate scan dropdowns
Every authenticated scan modal (BloodHound, Kerberoast, ADCS, Shares, etc.) queries the credentials table and populates a Saved Credentials dropdown. Selecting an entry auto-fills the username, password or hash, and domain fields. This means credentials captured in one scan are immediately usable in subsequent scans without copy-pasting.Filtering by source
The DATA → Credentials page supports filtering by source. Available source values:| Source | Description |
|---|---|
netexec(SMB) | SMB authentication sweep |
netexec(LDAP) | LDAP authentication sweep |
netexec(LSA) | LSA secrets dump |
kerberoast | Kerberoastable TGS hashes |
asreproast | AS-REP hashes |
gmsa | GMSA NTLM hashes |
manual | Manually entered credentials |
Hash Calculator
The Hash Calculator derives cryptographic key material from a plaintext password without needing a domain controller. It uses impacket’s RFC 3962string_to_key implementation to produce:
- NTLM hash — MD4 of the UTF-16LE encoded password
- AES-128 Kerberos key — RFC 3962 string_to_key with 128-bit key
- AES-256 Kerberos key — RFC 3962 string_to_key with 256-bit key
Salt formula
The salt used for AES key derivation depends on account type:| Account type | Detection | Salt formula |
|---|---|---|
| User account | No $ suffix | REALM + username (e.g. CORP.LOCALjsmith) |
| Machine account | Username ends with $ | REALM + host/ + FQDN (e.g. CORP.LOCALhost/ws01.corp.local) |
$ suffix on the username.
All Hash Calculator results are click-to-copy and can be saved directly to the credentials database from the same UI panel.