You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/windows-hardening/active-directory-methodology/README.md
+100Lines changed: 100 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -153,6 +153,104 @@ If you can **access other PCs or shares** with the **null or guest user** you co
153
153
../ntlm/places-to-steal-ntlm-creds.md
154
154
{{#endref}}
155
155
156
+
### Hash Shucking & NT-Candidate Attacks
157
+
158
+
**Hash shucking** treats every NT hash you already possess as a candidate password for other, slower formats whose key material is derived directly from the NT hash. Instead of brute-forcing long passphrases in Kerberos RC4 tickets, NetNTLM challenges, or cached credentials, you feed the NT hashes into Hashcat’s NT-candidate modes and let it validate password reuse without ever learning the plaintext. This is especially potent after a domain compromise where you can harvest thousands of current and historical NT hashes.
159
+
160
+
Use shucking when:
161
+
162
+
- You have an NT corpus from DCSync, SAM/SECURITY dumps, or credential vaults and need to test for reuse in other domains/forests.
163
+
- You capture RC4-based Kerberos material (`$krb5tgs$23$`, `$krb5asrep$23$`), NetNTLM responses, or DCC/DCC2 blobs.
164
+
- You want to quickly prove reuse for long, uncrackable passphrases and immediately pivot via Pass-the-Hash.
165
+
166
+
The technique **does not work** against encryption types whose keys are not the NT hash (e.g., Kerberos etype 17/18 AES). If a domain enforces AES-only, you must revert to the regular password modes.
167
+
168
+
#### Building an NT hash corpus
169
+
170
+
-**DCSync/NTDS** – Use `secretsdump.py` with history to grab the largest possible set of NT hashes (and their previous values):
History entries dramatically widen the candidate pool because Microsoft can store up to 24 previous hashes per account. For more ways to harvest NTDS secrets see:
178
+
179
+
{{#ref}}
180
+
dcsync.md
181
+
{{#endref}}
182
+
183
+
-**Endpoint cache dumps** – `nxc smb <ip> -u <local_admin> -p <password> --local-auth --lsa` (or Mimikatz `lsadump::sam /patch`) extracts local SAM/SECURITY data and cached domain logons (DCC/DCC2). Deduplicate and append those hashes to the same `nt_candidates.txt` list.
184
+
-**Track metadata** – Keep the username/domain that produced each hash (even if the wordlist contains only hex). Matching hashes tell you immediately which principal is reusing a password once Hashcat prints the winning candidate.
185
+
- Prefer candidates from the same forest or a trusted forest; that maximizes the chance of overlap when shucking.
- NT-candidate inputs **must remain raw 32-hex NT hashes**. Disable rule engines (no `-r`, no hybrid modes) because mangling corrupts the candidate key material.
202
+
- These modes are not inherently faster, but the NTLM keyspace (~30,000 MH/s on an M3 Max) is ~100× quicker than Kerberos RC4 (~300 MH/s). Testing a curated NT list is far cheaper than exploring the entire password space in the slow format.
203
+
- Always run the **latest Hashcat build** (`git clone https://github.com/hashcat/hashcat && make install`) because modes 31500/31600/35300/35400 shipped recently.
204
+
- There is currently no NT mode for AS-REQ Pre-Auth, and AES etypes (19600/19700) require the plaintext password because their keys are derived via PBKDF2 from UTF-16LE passwords, not raw NT hashes.
205
+
206
+
#### Example – Kerberoast RC4 (mode 35300)
207
+
208
+
1. Capture an RC4 TGS for a target SPN with a low-privileged user (see the Kerberoast page for details):
Hashcat derives the RC4 key from each NT candidate and validates the `$krb5tgs$23$...` blob. A match confirms that the service account uses one of your existing NT hashes.
225
+
226
+
3. Immediately pivot via PtH:
227
+
228
+
```bash
229
+
nxc smb <dc_ip> -u roastable -H <matched_nt_hash>
230
+
```
231
+
232
+
You can optionally recover the plaintext later with `hashcat -m 1000 <matched_hash> wordlists/` if needed.
233
+
234
+
#### Example – Cached credentials (mode 31600)
235
+
236
+
1. Dump cached logons from a compromised workstation:
3. A successful match yields the NT hash already known in your list, proving that the cached user is reusing a password. Use it directly for PtH (`nxc smb <dc_ip> -u highpriv -H <hash>`) or brute-force it in fast NTLM mode to recover the string.
249
+
250
+
The exact same workflow applies to NetNTLM challenge-responses (`-m 27000/27100`) and DCC (`-m 31500`). Once a match is identified you can launch relay, SMB/WMI/WinRM PtH, or re-crack the NT hash with masks/rules offline.
251
+
252
+
253
+
156
254
## Enumerating Active Directory WITH credentials/session
157
255
158
256
For this phase you need to have **compromised the credentials or a session of a valid domain account.** If you have some valid credentials or a shell as a domain user, **you should remember that the options given before are still options to compromise other users**.
0 commit comments