Skip to content

fix(variant): use crackable dictionary passwords for Kerberoastable/A…#153

Draft
mkultraWasHere wants to merge 5 commits intomainfrom
fix/variant-crackable-passwords-2
Draft

fix(variant): use crackable dictionary passwords for Kerberoastable/A…#153
mkultraWasHere wants to merge 5 commits intomainfrom
fix/variant-crackable-passwords-2

Conversation

@mkultraWasHere
Copy link
Copy Markdown
Contributor

@mkultraWasHere mkultraWasHere commented Apr 27, 2026

Crackable passwords for Kerberoastable and AS-REP roastable variant users

The variant generator was replacing every password with a random complex string, making SPN and AS-REP roast targets uncrackable with standard wordlists during engagements.

Added

  • GenerateCrackablePassword() in namegen.go — picks from a 56-entry rockyou-derived wordlist so passwords crack with a straight dictionary attack (no rules)
  • findCrackablePasswords() in generator.go — detects users with SPNs (Kerberoastable) and users referenced in asrep*.ps1 scripts (AS-REP roastable), skipping sql_svc which is intentionally uncrackable
  • parseASREPScripts() in generator.go — extracts -Identity "username" from AS-REP roasting PowerShell scripts
  • TestGenerateCrackablePassword covering wordlist membership and output variety

Changed

  • mapPasswords() now branches between GenerateCrackablePassword() and GeneratePassword() based on whether the original password belongs to a roastable user
  • Console output tags crackable password mappings with (crackable) for visibility during generation

Fixed

  • Variant-1 Kerberoast/AS-REP passwords are no longer random strings that defeat dictionary attacks: ryan.myers (Kerberoast), christine.martin (Kerberoast), alexander.peterson (AS-REP), susan.white (AS-REP) now have rockyou-crackable passwords in both config.json and `mapping.json

…S-REP users

The variant generator was replacing ALL passwords with random complex
strings, making Kerberoastable (SPN) and AS-REP roastable user passwords
uncrackable with standard wordlists. This broke the attack path for
engagements relying on hashcat/john dictionary attacks.

- Add GenerateCrackablePassword() using a rockyou-derived wordlist
- Add findCrackablePasswords() to detect SPN and AS-REP roast targets
- Add parseASREPScripts() to extract users from asrep*.ps1 scripts
- Fix 4 broken passwords in variant-1 (sansa.stark, jon.snow,
  brandon.stark, missandei mapped users)

Co-Authored-By: Claude <noreply@anthropic.com>
@dreadnode-renovate-bot dreadnode-renovate-bot Bot added the area/ad-labs Changes made to AD lab definitions label Apr 27, 2026
@mkultraWasHere mkultraWasHere requested a review from Copilot April 27, 2026 16:14
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adjusts the variant generator so Kerberoastable (SPN) and AS-REP roastable users get dictionary-crackable passwords (instead of fully random complex strings), making those targets realistically crackable with standard wordlists during engagements.

Changes:

  • Added a rockyou-style crackable password generator (GenerateCrackablePassword) and associated wordlist.
  • Added detection of roastable accounts (findCrackablePasswords) using SPNs and asrep*.ps1 script parsing.
  • Updated password mapping to branch between crackable vs complex generation and tagged console output; updated Variant-1 config/mapping outputs accordingly.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
cli/internal/variant/namegen.go Adds crackable password wordlist and generator method.
cli/internal/variant/namegen_test.go Adds a unit test for crackable password selection/variety.
cli/internal/variant/generator.go Detects roastable users (SPN/AS-REP scripts) and maps their passwords to dictionary values.
ad/GOAD-variant-1/mapping.json Updates example/generated mapping outputs to reflect crackable passwords for roast targets.
ad/GOAD-variant-1/data/config.json Updates example/generated variant config with crackable passwords for roast targets.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread cli/internal/variant/namegen.go
Comment thread cli/internal/variant/namegen.go
Comment thread cli/internal/variant/generator.go
Comment thread cli/internal/variant/generator.go
mkultraWasHere and others added 3 commits April 27, 2026 17:07
- Warn when no asrep*.ps1 scripts are found or unreadable so
  missing crackable passwords are visible during generation
- Add TestFindCrackablePasswords covering SPN, AS-REP, and
  preserved-user (sql_svc) password classification
- Fix crackablePasswords wordlist count (55 → 56)

Co-Authored-By: Claude <noreply@anthropic.com>
- SSMTransport now raises ConnectionError with actionable messages
  instead of silently returning None on auth/connectivity failures
- Add --restart flag to delete existing report file before launching
- Fix poll countdown always showing 0s by recording time after fetch
- Sanitize report_path with shlex.quote to prevent command injection
- Truncate instance ID to last 5 chars in CLI and footer display
- Add delete_report() to Transport interface

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread cli/internal/variant/generator.go
The preservedUsers guard was present in the SPN/Kerberoastable loop
but missing from the AS-REP roasting loop, allowing a preserved
account like sql_svc to get a crackable password if referenced by
an asrep*.ps1 script. Test updated to cover both paths.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/ad-labs Changes made to AD lab definitions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants