Hack The Box - Cascade

December 29, 2023

Cascade

Cascade is a Windows machine running Active Directory. An anonymous LDAP bind allows for enumeration of the environment, leading to the discovery of a password for r.thompson. These credentials grant access to a few SMB shares, one of which contains an encrypted password for s.smith. Once the password is decrypted, it can be used to access a share containing a .NET application. Decompilation and analysis of the application code leads to a hard coded IV and key which can be used to decrypt the password for arksvc stored in a SQLite database. arksvc is a member of the AD Recycle Bin group, members of this group can read deleted AD objects. Viewing the attributes of the deleted objects reveals the password for TempAdmin which is the same password for the administrator, this results in a system shell.

nmap scan:

nmap scan

Open ports:

  • 53 (DNS)
  • 88 (Kerberos)
  • 135 (MSRPC)
  • 139, 445 (SMB)
  • 389, 3268 (LDAP)
  • 636, 3269 (LDAPS)
  • 5985 (WinRM)

Active Directory:

  • domain: cascade.local
  • hostname: CASC-DC1

I wasn't able to access any shares with anonymous logon:

list shares access denied

Anonymous LDAP authentication was enabled, so I used ldapsearch to query LDAP and view AD info:

ldapsearch

After looking through the output, I found a base64 encoded password in the cascadeLegacyPwd attribute for the r.thompson user:

r.thompson cascadeLegacyPwd

Decoded the password:

decode r.thompson password

I was now able to access some SMB shares:

r.thompson list shares

Downloaded the shares:

r.thompson download shares

Files within the Data share:

Data share

The email archive Meeting_Notes_June_2018.html mentioned that a temporary account was used for tasks related to network migration, but more notably, the password used for TempAdmin was the same as the administrator account:

email archive

The registry file VNC Install.reg within the s.smith folder contained an encrypted password:

VNC install registry

There's a command which can be found here that uses native Linux tools to decrypt VNC passwords:

decrypt s.smith password

The credentials authenticated and evil-winrm was able to make a connection:

s.smith evil-winrm shell

s.smith was a member of the Audit Share group:

net user s.smith

This granted access to the Audit share:

s.smith list shares

Within the evil-winrm shell, I downloaded the Audit share:

s.smith download shares

The files in the share looked to be a .NET application:

Audit$ share

I started up a Windows VM and transferred CascAudit.exe and CascCrypto.dll over so that I could look at the decompiled code in ILSpy.

After viewing the code, I found a decryption key within CascAudit.exe:

CascAudit

Next, within CascCrypto.dll, I found an initialization vector (IV):

CascCrypto

Then, I used DB Browser for SQLite to view Audit.db which contained the encrypted password for the ArkSvc user in the Ldap table:

encrypted password

With the encrypted password, decryption key, and IV, I was able to decrypt the password with the following Python script:

# decrypt.py
from base64 import b64decode
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

def decrypt_string(encrypted_string, key):
    key = key.encode('utf-8')
    iv = "1tdyjCbY1Ix49842".encode('utf-8')
    encrypted_bytes = b64decode(encrypted_string)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    decrypted_data = unpad(cipher.decrypt(encrypted_bytes), AES.block_size)
    decrypted_string = decrypted_data.decode('utf-8')
    return decrypted_string

if __name__ == "__main__":
    try:
        encrypted_password = "BQO5l5Kj9MdErXx6Q6AGOw=="
        decrypted_password = decrypt_string(encrypted_password, "c4scadek3y654321")
        print("Decrypted Password:", decrypted_password)
    except Exception as ex:
        print("Error decrypting password:", str(ex))

decrypt ArkSvc password

evil-winrm made a connection as arksvc and the user was a member of the AD Recycle Bin group which allows members to read objects in AD that have been deleted:

arksvc evil-winrm

I used the Get-ADObject cmdlet to view all the properties of deleted AD objects:

Get-ADObject

Within the output, I found an attribute (cascadeLegacyPwd) for the TempAdmin user with a base64 encoded password:

TempAdmin cascadeLegacyPwd

Decoded the password:

decode TempAdmin password

As mentioned in the email archive from the Data share, this was the same password as the administrator user. So I was able to obtain a system shell with psexec.py:

system shell


CTF Writeups | InfoSec Topics

Written by Mike Garrity

Email RSS