Chemistry
Resumo
Essa máquina expõe uma aplicação web que processa arquivos do tipo CIF. Para isso, ela utiliza uma biblioteca que é vulnerável à injeção de código arbitrário, o que me permitiu acesso inicial à máquina. Ao acessar a máquina, encontrei o arquivo de banco de dados da aplicação, o qual armazenava os usuários e seus hashes de senha em uma tabela. Extraindo a combinação de usuários e hashes, descobri a senha do usuário rosa, o qual utilizei para acesso remoto via SSH. Realizando um reconhecimento para escalar privilégios, encontrei uma porta escutando internamente, a qual encaminhei para minha máquina utilizando o SSH. Essa porta hospedava uma aplicação web que foi iniciada pelo usuário root. Analisando a aplicação, identifiquei uma vulnerabilidade no servidor utilizado (aiohttp), a qual permitiu a leitura arbitrária de arquivos do sistema, possibilitando extrair a chave privada do usuário root e obter acesso remoto privilegiado via SSH.
Reconhecimento
Realizei uma varredura de serviços utilizando a ferramenta Nmap:
Os resultados identificaram 2 portas respondendo na máquina, sendo elas a porta 22
para acesso remoto via SSH e a porta 5000
que expõe um servidor HTTP. A porta 5000 retornou a seguinte página web no navegador:

Utilizei a função de cadastro para me autenticar posteriormente e explorar os recursos da aplicação. Ao me autenticar, encontrei um dashboard:

Essa página permite o upload de arquivos, e sugere que seja enviado um arquivo CIF válido. Além disso, é apresentado um arquivo de exemplo:
Pesquisando sobre esse tipo de arquivo, encontrei a CVE-2024-23346 que explora uma vulnerabilidade na biblioteca pymatgen para execução arbitrária de comandos ao processar arquivos CIF. Analisando o histórico de requisições no meu proxy, identifiquei que a aplicação está utilizando Python por meio do cabeçalho Server
:

Exploração
Portanto, tentei explorar essa vulnerabilidade com base nas instruções disponíveis no GitHub Security Advisory da CVE. Alterei o payload para que baixasse um script em Python da minha máquina e executasse uma shell reversa:
Utilizei a funcionalidade de upload para enviar o arquivo, e ele foi listado logo na tabela abaixo. Ao selecionar a opção View
na coluna Actions
, recebi uma conexão reversa à minha máquina:

Pós exploração
Usuário rosa
Logo após acessar a máquina, executei o comando ls
o qual revelou um arquivo database.db
. Esse arquivo era um banco de dados SQLite, o qual baixei em minha máquina e consegui extrair uma combinação de usuários e seus hashes de senha em uma tabela user
:

Utilizando a ferramenta john
, foi possível reverter a senha do usuário rosa
e obter acesso SSH à máquina.
Usuário root
Após obter acesso SSH à máquina, realizei um reconhecimento e identifiquei uma porta 8080
escutando localmente:

Encaminhei essa porta à minha máquina por meio do SSH:
Acessei essa porta pelo navegador e ela retornou uma aplicação de monitoramento:

Essa aplicação é composta de conteúdo estático, e não é possível interagir ou enviar dados para ela. Analisando novamente as requisições em meu proxy, descobri o servidor que está sendo utilizado:

Pesquisando sobre essa versão do aiohttp, encontrei a CVE-2024-23334, a qual permite a leitura arbitrária de arquivos do servidor. Como essa aplicação foi iniciada pelo usuário root, é possível ler arbitrariamente qualquer arquivo do sistema. Portanto, tentei ler a chave privada do usuário root passando os seguintes parâmetros para o script:
E foi possível extrair a chave privada do usuário root, permitindo acesso remoto via SSH a ele: