CyberSecLabs - Secret Walkthrough

CyberSecLabs - Secret Walkthrough
Photo by Dima Pechurin / Unsplash

\x01 intro

In my quest to continue honing my skill set, I am revisiting CyberSecLabs which I worked on a few years ago but dropped off for some reason. I enjoyed the platform and wanted to come back. Our first box to review is Secret - which is rated as a pretty straightforward box.

We start with SMB enumeration which reveals a cleartext password. Using a list of possible users, we find a user in the domain who is using the password. From there, autologon credentials were discovered in the registry which was valid for another user who had replication rights over the domain object because of an over-permissive nested group membership.

Without further ado - let's jump in!

\x02 Enumeration

As always, we start with a nmap scan to find open ports and services. This time around, I didn't do a full service and version scan and instead chose only to scan open ports and go from there.

We have quite a few ports open, including Kerberos, SMB, LDAP, and Windows Remote Management. Ports 53 and 88 points us in the direction that we're working on a domain controller.

Let's enumerate some ports and see what we're up against.

53/tcp    open  domain           syn-ack
88/tcp    open  kerberos-sec     syn-ack
135/tcp   open  msrpc            syn-ack
139/tcp   open  netbios-ssn      syn-ack
389/tcp   open  ldap             syn-ack
445/tcp   open  microsoft-ds     syn-ack
464/tcp   open  kpasswd5         syn-ack
593/tcp   open  http-rpc-epmap   syn-ack
636/tcp   open  ldapssl          syn-ack
3268/tcp  open  globalcatLDAP    syn-ack
3269/tcp  open  globalcatLDAPssl syn-ack
3389/tcp  open  ms-wbt-server    syn-ack
5985/tcp  open  wsman            syn-ack
9389/tcp  open  adws             syn-ack
49665/tcp open  unknown          syn-ack
49667/tcp open  unknown          syn-ack
49668/tcp open  unknown          syn-ack
49670/tcp open  unknown          syn-ack
49671/tcp open  unknown          syn-ack
49704/tcp open  unknown          syn-ack
49756/tcp open  unknown          syn-ack

RPC - 135

There are a few ports I always check first, and RPC is one of them. If anonymous connections are enabled, we can view users in the domain, query domain information, and more.

However, in this case, we aren't so fortunate. When binding using rpcclient, we get access denied. Bummer...it was worth a shot.

Attempting to enumerate domain users

LDAP - 389

Given the fact we couldn't bind anonymously via rpcclient, the chances of anonymous access via LDAP are slim to none. However, it's essential to check everything and validate.

Using ldapsearch, we don't get anywhere quickly because valid credentials are needed to bind - figures.

Attempting to bind to the LDAP server

SMB - 139/445

Another service I like to enumerate first is SMB. We have a few tools at our disposal to enumerate SMB - smbclient, smbmap, and crackmapexec. Just because, let's use all three.

SMB Enumeration via smbclient

Using smbclient, we connect anonymously and find an intriguing share called Office_Share

Found an interesting share

Connecting to the share reveals a few potential users and a Template directory

After enabling recursive listing, we find a file named Default_Password.txt in the Template directory.

After downloading the file, we get, you guessed it, a default password -

SMB Enumeration via smbmap

Running smbmap with recursive share listing, we see the same file - smbmap -H 172.31.1.4 -u "//" -R

SMB Enumeration via crackmapexec

Using crackmapexec to list shares and see that we have read access to the Office_Share share

Did we need to use three separate tools to enumerate SMB? No. Nevertheless, it's nice to have numerous ways of doing the same thing just in case a particular tool doesn't work for whatever reason.

\x03 Generating User List

Remember what we saw in the Office_Share share? A list of possible users. Let's take those names and put them in a new file called users.txt

Ben Dover
Joe Cakes
Kurby Curtis
Lee Frank

I used namemash to generate a word list of permutations of the names we found which should cover possible AD username schemas.

Finding Valid Users

We have a list of possible username formats, but we don't know which format is being used in the domain. I used kerbrute to go through the word list to find valid users in the domain.

Kerbrute was able to validate 4 usernames - nice!

Now that we have what appears to be a default password (remember, we found that via SMB enumeration) along with a list of valid users, I used crackmapexec to spray the password to see if any user was using that password.

We got a hit! Good ole' jcakes never changed his password from the default - shame on you, Joe. Good for us, bad for him.

\x04 Using Discovered Creds

Great, we have credentials, now what? Well, since we have credentials, are there any service accounts that we can kerberoast? What about potential ASREP roasting? We can use crackmapexec or Impacket to do these checks. In our case, there are no accounts to roast.

Again, I used two different tools for the same check just to show their use. You don't need to use both every time, but it's nice to know just in case one doesn't work.

What about WinRM?

If we recall, our nmap scan found port 5985 to be open which means the Windows Remote Management service is running. Let's confirm if we have access.

Using the winrm protocol in crackmapexec, we can see if jcakes can get a shell via Windows Remote Management. In this case, we can.

We're able to utilize WinRM because jcakes is in the BUILTIN\Remote Management Users group in AD.

\x05 Sniffing with BloodHound

Since we have valid credentials, let's use BloodHound.py to run the BloodHound ingestor to further our AD enumeration and likely attack vectors.

python3 /opt/BloodHound.py/bloodhound.py -c all -u jcakes -p 'Sxxxxxxxx!' -d secret.org --zip -ns 172.31.1.4
Running the python bloodhound ingestor

Once the zip file is uploaded to BloodHound, we begin to analyze what we have and find something interesting.

bdover is a member of the Service Accounts group which for some reason is a member of the Administrators group. Why? Who knows.

Service accounts are admins? 

Due to this nested group membership, members of the Service Accounts group automatically have GenericWrite permissions over Domain Admins. This would allow us to modify the group membership of Domain Admins if we wish.

However, since bdover is technically in the administrator's group (nested groups), he has replication privileges over the secret.org domain object. We can simply do a DCSync attack to dump ntds.dit and own the entire domain.

GetChangesAll & GetChanges Rights

We have an issue though...we don't have a way to go from jcakes to bdover - yet.

\x06 Evil to Get Initial Access

As jcakes can use WinRM, we utilize Evil-WinRM to get our initial shell on the box and get our user flag.

Initial shell using Evil-WinRM

On the Box Enumeration

Once on the box, I did the usual low-hanging fruit enumeration such as running services, local ports, user group membership, etc., and came up short.

To make this easier on myself, I tried to load both PowerView via the upload feature in Evil-WinRM and using Invoke-WebRequest & IEX and hardly got any output other than errors and a DLL hijack path.

Nothing too Helpful

Okay, let's use another tool. It seems to be a theme of this post - numerous tools to do the same thing. This time, let's use WinPEAS. I use the upload feature in Evil-WinRM to get WinPEAS on the box.

After running and reviewing the output, we find an autologon password. Where might this work?

Autologon Credentials

The password could have been discovered manually by running REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultPassword.

\x07 Owning Domain

From the BloodHound dump, we have a pretty good idea of our attack path along with uncovering a new password. When we find a new credential, we need to go back to the start and see what we can access with it.

Since bdover is required for our attack path, let's check to see if the password we just found works for the account. This can be done using crackmapexec.

Since we see Pwn3d!, we know it's game over. We have credentials for bdover who has replication rights - the next step is an DCSync attack.

Checkmate.

Using secretsdump, we can do an DCSync attack and dump ntds.dit

Dumping NTDS.dit

With the administrator hash, we can use Evil-WinRM again to get a privileged shell on the box -

Kyle Gray

Kyle Gray

Hey there 👋 Certs - ITILv3, eJPT, PNPT, CRTP, CRTE, PJPT, CRTO