BASTION
- Layout for this exercise:
1 - INTRODUCTION
- The goal for this exercise is to develop a hacking process for the vulnerable machine Bastion from Hack The Box pentesting platform:
https://www.hackthebox.eu/
2 - ENUMERATION
- Bastion's IP is 10.10.10.134:
- Scanning with Nmap there are four open ports: 22, 135,139 and 445.
- Scanning deeper those four ports it seems that we have an SMB service running on port 445:
- This Nmap script enumerates the four shared folders:
- Connecting with smbclient:
- As expected, both ADMIN$ and C$ are not accessible:
- IPC$ seems accessible, but it does not yield any valuable information:
- However folder Backups gives us a lot of very important information about Bastion:
- Getting and reading note.txt it gives us a hint about backup related problems:
- Getting and reading SDT65CB.tmp it seems that the file is empty:
- Going into folder WindowsImageBackup\L4mpje-PC\Backup 2019-02-22 124351:
- There are some .vhd and .xml files:
- VHD (Virtual Hard Disk) is a file format representing a virtual hard disk drive (HDD).
- It may contain what is found on a physical HDD, such as disk partitions and a file system, which in turn can contain files and folders.
- It is typically used as the hard disk of a virtual machine.
https://en.wikipedia.org/wiki/VHD_(file_format)
- Getting the 1st .vhd file and applying command strings over it we find a lot of strings, but nothing that could lead to find any interesting hint for our purpose:
............................
3 - EXPLOITATION
3.1 - Mounting the backup .vhd disk
- About the 2nd .vhd disk it is too large (5.4 GB) to check with strings, so it would be a better solution to mount it locally.
- Installing cifs-utils:
- Creating folder /Backups:
- Mounting locally the shared folder /Backups:
- The mounting process is successful:
- Looking for the 2nd .vhd disk:
- The guestmount program can be used to mount virtual machine filesystems and other disk images on the host.
- It uses libguestfs for access to the guest filesystem, and FUSE (the "filesystem in userspace") to make it appear as a mountable device.
http://libguestfs.org/guestmount.1.html
- Installing libguestfs-tools:
- Creating folder /vhd2:
- Using guestmount to mount the 2nd .vhd disk on local folder /mnt/vhd2:
- The mounting process is successful, so now we have access to the whole backup disk .vhd2:
3.2 - Getting the Security Account Manager (SAM)
- The Security Account Manager (SAM) is the database where Windows systems store users's passwords.
- The user passwords are stored in a hashed format in a registry hive either as a LM hash or as a NTLM hash.
- Bastion is a Windows Server 2016 so it uses NTLM hashes for sure.
- This file can be found in %SystemRoot%/System32/config/SAM and is mounted on HKLM/SAM:
- Using samdump2 to retrieve hashes from Bastion's users:
- Accounts Administrator and Guest are disabled, so let's write down hash for user L4mpje:
26112010952d963c8dc4217daec986d9
3.3 - Cracking the NTLM hash
- Hashkiller works online to decrypt the NTLM hash found in previous point:
3.4 - Getting a remote shell
- Now, using credentials L4mpje:bureaulampje we have an SSH connection and a remote shell:
4 - CAPTURING THE 1st FLAG
- Reading user.txt from user l4mpje's Desktop:
5 - PRIVILEGE ESCALATION
- As expected Administrator's Desktop is not accessible, so we need some type of Privilege Escalation:
- Browsing around with the command line we check the presence of the .vhd and .xml files found before:
- Going to L4mpje's home folder:
- However looking for hidden folders we discover a lot more available resources:
- Going inside AppData\Roaming there is a very interesting folder named mRemoteNG:
- Actually mRemoteNG is an open source remote control and connections manager:
- Reading confCons.xml we find encrypted credentials for Administrator:
- It happens that there are online available tools for dealing with mRemoteNG encrypted credentials, for instance the Python script named mremoteng_decrypt.py:
- Launching the script without parameters to explore available optional arguments:
- Applying the -s option, because the encrypted password seems to be encoded with base64 (see the final ==):
- So finally we have the Administrator's password: thXLHM96BeKL0ER2
- Connecting with SSH as Administrator we have a privileged remote shell:
6 - CAPTURING THE 2nd FLAG
- Reading root.txt: