Ambassador - Medium
Writeup dá máquina Ambassador, da Hack The Box.

A Ambassador é uma máquina de dificuldade média que envolve exploração de versões vulneráveis do Grafana que expõe dados e arquivos importantes da aplicação e do sistema.
RECON
Iniciando o recon com um portscan na máquina, obtemos o seguinte resultado:

É interessante termos a porta do mysql exposta, pois com isso talvez consigamos nos autenticar nela de alguma forma. De todo modo, verificamos a porta 80 primeiro:

Na porta 80 temos um post que expõe pra gente um usuário que podemos usar pra logar via ssh, porém não temos a senha então devemos explorar um pouco mais.
Na porta 3000 temos um grafana exposto, tentamos usar as credenciais admin:admin, grafana:grafana, developer:admin, admin:developer para fazer login, porém, sem sucesso.

No entanto, temos a versão que está rodando, e essa versão específica (v8.2.0) está vulnerável a Leitura Arbritrária de Arquivos de forma não Autenticada com a CVE-2021-43798.
EXPLORAÇÃO
Então vamos tentar confirmar essa vulnerabilidade executando o exploit:

Confirmado!!!!
Com isso confirmado então, podemos procurar arquivos que talvez contenham as creds do usuário developer talvez para conseguir acesso via ssh.
Com base na documentação do Grafana: https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/, no conteúdo do arquivo grafana.ini que se encontra em /etc/grafana/grafana.ini, podemos encontrar as credenciais do usuário do grafana, além de algumas informações que talvez sejam importante anotar, como as creds do banco de dados.

Tentei utilizar o admin_password e a secret_key pra logar via ssh, mas sem sucesso.

Com essas informações em mãos podemos explorar a aplicação web do grafana, mas nada muito útil. Então podemos utilizar o curl pra baixar o arquivo sqlite do grafana utilizando a flag --path-as-is com a mesma lógica que o exploit utiliza para puxar os arquivos.

Analisando o exploit, vemos que ele passa a url e o path dos plugins, o exploit utiliza uma lista de plugins e verifica via GET se algum deles existe, se ele existe, utiliza path transversal para acessar os arquivos que queremos ler, então podemos testar manualmente qual plugin existe no grafana e utilizar dele para ler arquivos utilizando o curl. Para nossa sorte, o primeiro plugin da lista do exploit já retornou como existente usando o curl.

Então agora podemos acessar o arquivo sqlite do grafana. Segundo a documentação, o arquivo está em '/var/lib/grafana/grafana.db'. Agora só usar o curl para baixar o arquivo:

Show, agora vamos abrir ele utilizando o sqlite3 e dar uma explorada:

Temos uma tabela user, que contém o username e a hash da senha do admin com acesso ao grafana.

Depois de procurar em várias tabelas algo de útil, encontrei algo interessante na tabela data_source:

Uma string interessante e não padrão. Lembra que encontramos um usuário num post da aplicação rodando na porta 80? Podemos tentar utilizar essa string para logar via ssh com o usuário developer:

Também sem sucesso!
Depois daqui lembrei que temos um mysql exposto também nessa box, então vamos tentar logar utilizando essas credenciais que acabamos de achar.

Finalmente alguma coisa, então agora vamos explorar as databases.

Já tivemos acesso a database do grafana, então vamos dar uma olhada nessa whackywidget que é a única não padrão.

Temos aqui uma string encodada em base64 na coluna pass, desencodando temos a senha do user developer. Finalmente podemos logar via ssh e pegar nossa primeira flag.

PÓS-EXPLORAÇÃO
Ao entrar na máquina, escolhi executar direto o linpeas, para fazer o recon da máquina. A princípio, ele achou algumas coisas interessantes que vale a pena tentar:

Essa vulnerabilidade é referente ao Polkit, podemos tentar então executar o exploit para ela:

Nada feito. :/
Continuamos olhando o resultado do linpeas e tem outra coisa legal.

No diretório /opt, temos um diretório, então vamos até a pasta opt para vermos o que tem:

Temos duas pastas, consul e my-app. Vamos entrar no my-app primeiro.

Hmmmm, uma pasta .git. Vamos explorar os commits.


Temos um commit com consul, que é o nome de uma das pastas que estão no diretório /opt, que o linpeas nos trouxe. Baseado na documentação do consul: https://developer.hashicorp.com/consul/docs/intro, podemos nos comunicar com ele de muitas formas, além disso, encontrei uma forma de conseguir RCE com um módulo do metasploi. Então vamos:

Primeiro de tudo, vamos fazer um fowarding da porta que está rodando o consul que também está na documentação: https://developer.hashicorp.com/consul/docs/install/ports, a porta HTTP está na porta 8500.
Na nossa máquina:
chisel server -p 9005 --reverse
Na box:
chisel client IP_DA_VPN:9005 R:8500:127.0.0.1:8500
Depois então vamos para o metasploit, fazemos a seguinte configuração, executamos, e temos acesso:

Após isso, só pegar nossa shell, e pegar nossa flag de root, pois já acessamos como usuário máximo:

Last updated