Trickster
Resumo
Essa máquina permite acesso inicial ao identificar um diretório .git exposto, e utilizar uma CVE para obter acesso como www-data. Após isso, é necessário escalar privilégios lateralmente por meio de um pivoting para um docker executando o serviço ChangeDetection.io, e utilizar uma outra CVE para obter uma shell ao docker em execução. No docker, estão disponíveis arquivos de backup do ChangeDetection, os quais ao serem restaurados acabam revelando as credenciais do usuário adam. Como usuário adam, está disponível a execução de um software de manipulação de arquivos de impressora 3D como root. Entretanto, esse software é vulnerável a um exploit que permite a execução arbitrária de comandos, o que permite escalar privilégios como root e obter a flag final.
Reconhecimento
Assim que obtive o endereço IP da máquina, realizei uma varredura de portas utilizando o Rustscan e o Nmap, identificando os seguintes serviços em execução na máquina:
Como apontado pelo Nmap, ao tentar acessar a porta 80 ocorre um redirecionamento para http://trickster.htb
, sendo necessário adicionar esse endereço ao arquivo /etc/hosts
da minha máquina Linux:
Agora é possível navegar para esse domínio para analisar o conteúdo da página:
O resultado é uma página estática que não contém nenhuma informação relevante, além de um link que redireciona para o subdomínio shop.trickster.htb
. Novamente, foi necessário adicionar esse endereço ao arquivo /etc/hosts
da minha máquina Linux. Alterei a linha adicionada anteriormente para obter esse resultado:
Acessando a página http://shop.trickster.htb
, é possível encontrar um e-commerce que utiliza o PrestaShop:
Varredura
Realizando uma varredura com o Feroxbuster, foi possível encontrar vários arquivos e diretórios, porém um diretório .git
foi o que mais chamou atenção. Acessando esse diretório pelo navegador, é listado o índice da página:
Com isso, baixei o diretório utilizando o wget
na minha máquina para analisar. Acessando o diretório baixado e utilizando o comando git log
, o seguinte commit é revelado:
Utilizando o comando git status
, é possível observar que existe um diretório que fazia parte do repositório, porém que não foi baixado:
Exploração
Pesquisando sobre o PrestaShop, aplicação de e-commerce utilizada pela página, é possível encontrar uma CVE em que é necessário apenas o endereço do painel de admin do PrestaShop e um nome de usuário (que encontramos anteriormente como autor do commit). Com isso, é possível executar a PoC disponível no GitHub e obter acesso à máquina como usuário www-data
.
Pós-Exploração
Escalando Privilégios Lateralmente
Usuário James
Navegando pelos arquivos do PrestaShop como o usuário www-data
, é possível encontrar informações sensíveis no arquivo ~/prestashop/app/config/parameters.php
. Nesse arquivo, é revelado um usuário e senha para o banco de dados da aplicação:
Após conectar ao banco de dados, é possível extrair o usuário adam@trickster.htb
e seu hash de senha:
Após utilizar o John para crackear esses hashes, foi possível obter acesso SSH ao usuário james
, sendo possível obter a primeira flag.
Usuário Adam
Após um processo de reconhecimento na máquina, identifiquei um contêiner Docker em execução na máquina. Por meio de um Ping Sweep, foi possível descobrir o endereço IP do contêiner. Transferindo o nmap para a máquina, é possível varrer os serviços desse contêiner e encontrar a porta 5000 aberta Realizando encaminhamento de porta via SSH, obtive acesso à porta. 5000 do contêiner:
Acessando essa página, o serviço em execução é o ChangeDetection.io, e é possível se autenticar com a senha do usuário james
.
Pesquisando sobre esse serviço, foi possível encontrar uma CVE ao qual ele é vulnerável e uma PoC que explora essa vulnerabilidade. Executando a PoC conforme as instruções do GitHub, é possível obter acesso como usuário root
ao contêiner (lembrando que o listener do netcat deve ser executado na máquina do alvo, pois o contêiner não possui acesso à internet):
Navegando pelo contêiner, é possível encontrar um diretório datastore
, em que são armazenados os arquivos do ChangeDetection, incluindo os backups que podem ser encontrados no diretório Backups
em formato ZIP. O contêiner possui poucos binários que permitem a transferência de arquivos, então utilizei o /dev/tcp/{IP}/{PORT}
do BASH para baixar o arquivo para máquina do alvo:
Com isso, eu utilizei o scp
para baixar o arquivo ZIP de backup para minha máquina:
Pesquisando na documentação do ChangeDetection, encontrei um tutorial de como restaurar um backup. Com isso, subi um contêiner do ChangeDetection na minha máquina e restaurei o backup extraído do alvo. Após restaurar o backup, acessei a página do ChangeDetection em execução na minha máquina e encontrei uma cópia do arquivo parameters.php
(que encontramos inicialmente), porém dessa vez com as credenciais do usuário adam
:
Escalando Privilégios Verticalmente
Após acessar a máquina via SSH com o usuário adam
e realizar um breve reconhecimento, é possível identificar por meio do comando sudo -l
que ele pode executar o comando /opt/PrusaSlicer/prusaslicer
como superusuário. Pesquisando sobre a ferramenta PrusaSlicer
, é possível encontrar um exploit que permite execução de código como o usuário que está executando a ferramenta. Por fim, basta clonar o repositório do GitHub com o exploit, subir os arquivos para a máquina do alvo, executar o PrusaSlicer
como root e esperar a shell reversa:
Atualizado
Isto foi útil?