# Tomghost

## Contexto

Temos uma máquina rodando um **AJP** (Apache Jserv Protocol). O AJP é um protocolo binário que pode fazer proxy de solicitações de entrada de um servidor da Web para um servidor de aplicativos que fica atrás do servidor da Web. Versões abaixo da 7.0.100 estão suscetíveis à [CVE-2020-1938](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1938) (Ghostcat). Consideremos essa máquina uma PoC da CVE em questão.

{% hint style="info" %}
**Tipo:** Apache Tomcat

**IP:** 10.10.76.180
{% endhint %}

## Reconhecimento

Inicialmente, realizamos uma varredura de portas no alvo.

```
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 f3c89f0b6ac5fe95540be9e3ba93db7c (RSA)
|   256 dd1a09f59963a3430d2d90d8e3e11fb9 (ECDSA)
|_  256 48d1301b386cc653ea3081805d0cf105 (ED25519)
53/tcp   open  tcpwrapped
8009/tcp open  ajp13      Apache Jserv (Protocol v1.3)
| ajp-methods: 
|_  Supported methods: GET HEAD POST OPTIONS
8080/tcp open  http       Apache Tomcat 9.0.30
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/9.0.30
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
```

Através da varredura realizada, podemos identificar a porta **8009** (porta padrão do serviço Apache Jserv) aberta. Apenas a identificação dessa porta unida ao contexto do alvo, podemos deduzir que conseguimos explorar essa brecha.

## Exploração

A base [**Exploit Database**](https://www.exploit-db.com) nos mostra um um [exploit](https://www.exploit-db.com/exploits/48143) publicado para o serviço que encontramos. Ou seja, já temos uma "receita de bolo" para apenas executar e obter acesso ao alvo.

<figure><img src="/files/egASZEiTpO28q6bIcSxo" alt=""><figcaption><p>Execução do exploit 48143</p></figcaption></figure>

<figure><img src="/files/oDXQOVaQb8atUviTWmyL" alt=""><figcaption><p>Obtenção de credenciais com a execução do exploit</p></figcaption></figure>

Acabamos de obter um usuário e senha através da exploração inicial. Podemos tentar acessar o alvo via SSH usando as credenciais encontradas.

<figure><img src="/files/DyIRzRlvbyEMUMwDgwYM" alt=""><figcaption><p>Acesso ao alvo com as credenciais encontradas</p></figcaption></figure>

Temos acesso. Navegando pelo sistema de arquivos do alvo, encontrei um outro usuário através da pasta `/home` e, consequentemente, a primeira flag (**user.txt**).

<figure><img src="/files/DzWHBSsN0TKwHoQfxPIu" alt=""><figcaption><p>Primeira flag encontrada</p></figcaption></figure>

## Movimentação Lateral

Levando em consideração que não há muitos privilégios disponíveis ao usuário que encontramos inicialmente, precisamos encontrar uma forma de lateralizar nosso acesso para o outro usuário encontrado.

Dentro do diretório do usuário `skyfuck`, existem dois arquivos interessantes.

<figure><img src="/files/fNafnJqTEkQYU1l8QUAF" alt=""><figcaption><p>Arquivos encontrados</p></figcaption></figure>

Tratam-se, respectivamente, de um arquivo de credenciais e uma chave privada. Nesse caso, podemos gerar uma hash do arquivo `tryhackme.asc` via GPG2John e depois quebrá-la utilizando o próprio John.

<figure><img src="/files/Tnvl888AMi69tTmFfkHV" alt=""><figcaption><p>Geração da hash do arquivo <code>tryhackme.asc</code></p></figcaption></figure>

<figure><img src="/files/IVQJeD7mKabet8pj9kmx" alt=""><figcaption><p>Quebra da senha via John</p></figcaption></figure>

Com a senha do arquivo em mãos, podemos descriptografar o arquivo `credential.pgp` que encontramos no início.

<figure><img src="/files/Ml4SJSYF3ZMT6V6X9i9e" alt=""><figcaption><p>Novas credenciais encontradas no arquivo <code>credential.pgp</code></p></figcaption></figure>

Agora, conseguimos nos movimentar lateralmente para o usuário `merlin`.

<figure><img src="/files/slwOcoECOS0oMD87ybDl" alt=""><figcaption><p>Movimentação lateral realizada com sucesso</p></figcaption></figure>

Agora, com um novo usuário em mãos, podemos tentar escalar nosso privilégios a root.

## Escalação de Privilégio

Executando alguns dos passos que executei inicialmente para consultar permissões no usuário `skyfuck`, consegui encontrar uma aplicação que posso executar como root.

<figure><img src="/files/cO5IcVbbJaxfpHZKc9nn" alt=""><figcaption><p>Podemos executar a aplicação <code>zip</code> com permissões elevadas</p></figcaption></figure>

De acordo com o [**GTFOBins**](https://gtfobins.github.io/gtfobins/zip/), podemos escalar privilégios a root utilizando a aplicação `zip` com os seguintes comandos:

```
TF=$(mktemp -u)
sudo zip $TF /etc/hosts -T -TT 'sh #'
rm $TF
```

<figure><img src="/files/oACFfC2zjJov9Cojlo4e" alt=""><figcaption><p>Escalação de privilégios via abuso da aplicação <code>zip</code></p></figcaption></figure>

Após obter acesso máximo ao sistema, entrei no diretório `/root` e obti a flag `root.txt`. :)


---

# Agent Instructions: 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:

```
GET https://2h4ck.gitbook.io/home/ctf/tryhackme/tomghost.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
