Instant
Resumo
Essa máquina expõe uma aplicação web a qual disponibiliza o link para download de uma aplicação mobile. Essa aplicação mobile integra com uma API, porém as rotas e uma chave de acesso são expostas no código-fonte. Essa API possui uma rota para leitura de arquivos de log, a qual permite a leitura de arquivos locais, configurando uma vulnerabilidade de LFI. Por meio dessa vulnerabilidade de LFI, é possível recuperar a chave privada do usuário shirohige e ganhar acesso remoto à máquina. A partir disso, é possível escalar privilégios recuperando a senha do usuário root armazenada num backup da ferramenta Solar-PuTTY.
Reconhecimento
Realizei uma varredura de portas com o Nmap para identificar os serviços em execução e obtive os seguintes resultados:
Na porta 80 estava em execução um servidor web, que ao ser acessado redireciona para o domínio instant.htb
. Por conta disso, foi necessário adicionar uma entrada ao arquivo /etc/hosts
para que esse domínio fosse resolvido para o servidor:
A seguinte página web foi retornada ao acessar o endereço http://instant.htb
:
A página sugere fazer o download de uma aplicação para realização de transações bancárias. Realizei uma varredura com o ffuf em busca de subdomínios e uma varredura com o feroxbuster em busca de outros diretórios. Porém, em ambos os casos, não obtive nada muito relevante, então decidi realizar o download sugerido. Ao clicar em Download Now
, é realizado o download de uma aplicação Android. Utilizando a ferramenta jadx, descompilei a aplicação para analisar o código-fonte:
A princípio, pode-se notar que a aplicação implementa um CRUD para autenticação, gerir as transações e o perfil de um usuário autenticado. Além disso, ela utiliza a biblioteca okhttp3, uma biblioteca comumente utilizada para realizar requisições web em aplicações Android. Por conta disso, procurei por requisições que estivessem sendo realizadas, e encontrei o endpoint para uma API:
Nessa requisição, além do endpoint para a API, também é possível notar que a aplicação passa um token de acesso ao header Authorization
, o que indica que essa API necessita de um token para ser acessada. Buscando por outras referências ao domínio instant.htb
com a ferramenta de busca do jadx, encontrei uma referência em que o token de acesso é exposto:
Esse token permite acesso à API como usuário administrador:
Entretanto, nenhuma das rotas de API descobertas até então pareciam muito úteis. Explorando um pouco mais a aplicação, encontrei nos Resources um arquivo XML que indicava a quais fontes a aplicação poderia enviar requisições:
Foi possível encontrar outro subdomínio, o swagger-ui.instant.htb
. O Swagger é uma ferramenta utilizada para expor documentações interativas de APIs. Acessando essa página do Swagger, é possível autenticar-se utilizando o token descoberto anteriormente para realizar as consultas:
Além disso, descobri a rota /api/v1/admin/read/log
. Essa rota espera um parâmetro log_file_name
, o qual deveria ser o nome de um arquivo de log presente na máquina. Ao enviar a requisição informando a esse parâmetro o valor de exemplo (1.log), ela retorna o conteúdo do arquivo e o caminho absoluto dele (nesse caso, /home/shirohige/logs/1.log
):
Exploração
Levando em consideração o caminho absoluto retornado, tentei voltar um diretório com ../
e acessar o arquivo .ssh/id_rsa
, onde deveria estar contido a chave privada SSH do usuário shirohige
. Como resultado, a chave privada do usuário foi retornada:
Salvei esse resultado em JSON num arquivo id_rsa.json
e processei ele utilizando o jq, o sed e o tr para salvar somente o conteúdo da chave:
Alterando as permissões da chave com chmod 600 id_rsa
, foi possível acessar a máquina por como usuário shirohige
por meio dessa chave:
Pós exploração
Durante o processo de enumeração após ganhar acesso inicial à máquina, encontrei um subdiretório backups
no diretório /opt
da máquina. Esse diretório continha um subdiretório Solar-PuTTY
com um arquivo sessions-backup.dat
. Pesquisando por esse tipo de arquivo, descobri que se tratava de um backup da ferramenta Solar-PuTTY
, o qual ao ser recuperado pode revelar as credenciais que tinham sido salvas na aplicação. Pesquisando por uma forma de recuperar as credenciais desse arquivo, encontrei um script disponível publicamente no GitHub o qual faz essa tarefa. Utilizando o script, encontrei as credenciais para o usuário root
:
Atualizado
Isto foi útil?