Introdução Link to heading

Dando continuidade à série de postagens sobre desafios realizados, trago a documentação da máquina SunsetDecoy (nível Fácil/Easy), disponível gratuitamente no Proving Grounds Play.

Para quem não está familiarizado, os desafios do tipo Capture The Flag (CTF) envolvem máquinas vulneráveis que têm como objetivo testar as habilidades dos participantes em identificar e explorar essas falhas. Os competidores devem encontrar flags (bandeiras), que são provas de que conseguiram comprometer com sucesso os alvos designados.

Enumeração Link to heading

Para iniciar o processo de enumeração, realizei uma varredura de portas via nmap junto ao IP disponibilizado.

Resultado da execução do nmap

Comando: nmap -sV -p- --min-rate 10000 192.168.177.85

Parâmetros:

  • -sV permite a identificação dos serviços/versões que estão rodando nas portas que forem identificadas como abertas (open);
  • -p- permite o scan de todas as 65.535 portas TCP;
  • --min-rate 10000 informa ao nmap para tentar enviar no mínimo 10000 pacotes por segundo, como uma tentativa de acelerar a análise (pode impactar a precisão dos resultados).

A varredura com nmap retornou um servidor web na porta 80 e um servidor SSH na porta 22. Ao acessar o servidor web via navegador, foi possível identificar que não existe um arquivo index.php ou index.html, visto que a página mostrou seu índice (Index of):

Visualização ao acessar o webserver via navegador

Também foi possível identificar a existência do arquivo save.zip. Ao clicar nele, o mesmo é baixado:

Download do arquivo save.zip

Ao analisar seu tipo através do comando file, foi possível confirmar como sendo um zip. Ao tentar descompactar o arquivo, uma senha é solicitada, e também é possível ver que os arquivos compactados aparentemente se referem a um sistema linux:

Manipulação do arquivo zip

Exploração e acesso inicial Link to heading

Para tentar quebrar esta senha, será utilizada a ferramenta zip2john, que faz parte da ferramenta John the Ripper.

Comando: zip2john save.zip > hash

Geração da hash do zip

Como resultado, a seguinte hash é gerada:

Hash gerada

Na sequência, rodei a ferramenta john utilizando a wordlist rockyou.txt através do parâmetro --wordlist, juntamente com o arquivo de hash gerado anteriormente:

Processo de cracking da hash

Em posse da senha, foi possível fazer a descompactação do arquivo:

Descompactação do zip

Ao analisar o arquivo passwd, foi possível identificar o usuário 296640a3b825115a47b68fc44501c828:

Visualização do arquivo /etc/passwd

Ao analisar o arquivo shadow, foi possível identificar tanto a hash do usuário 296640a3b825115a47b68fc44501c828, quanto do usuário root:

Visualização do arquivo /etc/shadow

Em posse da entrada de passwd e shadow do usuário, utilizei a ferramenta unshadow (também presente ao instalar o John) para concatenar ambas:

Processo de unshadow dos arquivos

Após um processo de sanitização no arquivo, deixando as entradas para os usuários 296640a3b825115a47b68fc44501c828 e root, rodei a ferramenta hashcat.

Comando: hashcat -m 1800 unshadow /usr/share/wordlists/rockyou.txt --show

Parâmetros:

  • -m modo da hash, utilizado para definir o tipo de hash que que será ingerida, nesse caso, sha512crypt (unix);
  • –show usado para mostrar as hashes que foram quebradas.
Processo de unshadow dos arquivos

Como resultado do processo de cracking, foi possível identificar a senha para o usuário 296640a3b825115a47b68fc44501c828.

Como existe um serviço SSH rodando, efetuei a conexão à máquina através deste serviço:

Acesso via SSH

Como o usuário 296640a3b825115a47b68fc44501c828 recebeu uma shell limitada do tipo rbash, efetuei o processo de “breakeout” dessa shell através da definição de um terminal junto à conexão SSH. Passando o parâmetro -t e o binário bash foi possível realizar o bypass:

Acesso via SSH com breakout

Ao tentar ler um arquivo, foi notado que o comando cat não estava disponível, justificado pela falta do caminho (path) do binário na variável de ambiente PATH:

Validação de PATH

Para corrigir, executei o comando abaixo, que adiciona os caminhos de binários mais comuns à variavel PATH:

Comando: export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Rbash brakeout

Uma vez com acesso à máquina e com uma shell que fornece acesso aos principais binários, iniciei o processo de análise manual do sistema de arquivos em busca de artefatos que possam contribuir com a minha exploração.

Dentro do diretório /home/296640a3b825115a47b68fc44501c828 foi possível localizar o arquivo user.txt, contendo a flag de usuário:

Visualização da flag de usuário

Escalonamento de Privilégios Link to heading

Ainda dentro da pasta do usuário, foi possível notar um binário chamado honeypot.decoy, ao rodar o mesmo, a opção 5 chamou a atenção pelo seu comportamento, que indica que um scan de Antivirus será iniciado m um minuto ou menos:

Execução do binário honeypot.decoy

Após executá-lo, aparentemente nada aconteceu, porém, ao analisar os processos da máquina através da ferramenta pspy, que possibilita o usuário ‘bisbilhotar’ os processos sem a necessidade de root, foi possível notar a execução de um programa chamado chkrootkit:

Visualização do processo de chkrootkit

Ao pesquisar na internet sobre o Chkrootkit na versão 0.49, foi possível identificar a possibilidade de executar um escalonamento de privilégios local, conforme indicado nessa documentação.

Conforme indicado no link, se um atacante sabe da execução constante do chkrootkit, seja por meio de um cronjob, seja por meio de outro script, e o atacante tem acesso à pasta temporária /tmp, ele pode utilizar da falha existente para executar um arquivo denominado update como root:

Explicação do processo de exploração

Para explorar, criei um arquivo com o nome update contendo uma shell reversa e um listener de netcat:

Criação da reverse shell

Após esperar um minuto, recebi uma conexão como usuário root:

Shell de root

Dentro do diretório /root foi ppossível localizar o arquivo proof.txt, contendo a flag de root:

Flag de Root

Conclusão Link to heading

O desafio SunsetDecoy foi relativamente simples, mas destaco alguns pontos de atenção:

  • A parte de exportar um novo valor para a variável de ambiente PATH foi algo novo para mim, sendo uma técnica muito interessante de se ter em seu arsenal de “guerra”;
  • Na parte de escalonamento de privilégios, ficou evidenciada a importância de sempre testar/validar as descobertas, pois somente através da execução da opção 5 do binário honeypot.decoy é que foi possível identificar a execução do chkrootkit.