🙀Tomghost

Olá, viajante! Neste artigo, trago um write-up do desafio Startup, da plataforma TryHackMe.

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 (Ghostcat). Consideremos essa máquina uma PoC da CVE em questão.

Tipo: Apache Tomcat

IP: 10.10.76.180

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 nos mostra um um exploit publicado para o serviço que encontramos. Ou seja, já temos uma "receita de bolo" para apenas executar e obter acesso ao alvo.

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.

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).

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.

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.

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

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

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.

De acordo com o GTFOBins, 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

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

Last updated