Link
Link do Pickle Rick.
Enunciado
This Rick and Morty themed challenge requires you to exploit a webserver to find 3 ingredients that will help Rick make his potion to transform himself back into a human from a pickle.
Execução
Eu não curto máquina temática, fica muito guessing ou o desafio consiste em juntar as pistas e automaticamente vc segue um único fluxo e “owna a máquina” (muitas aspas). No nossa caso, é a segunda opção, então vamos coletar e mapear as evidências e naturalmente o desafio vai nos fornecendo users/senhas/artificios para avançarmos.
Como sempre, começamos por pela etapa de Information Gathering/Scanning.
Ultimamente estou na velocidade da luz pra scanning, zero stealth + –min-rate 200 pra ctfs, então bora agilizar! Executo o nmap em todas as portas mas há apenas as seguintes portas abertas: 22 e 80. Já aproveitei e levantei os serviços e versões, o apache chama atenção, mas como é um ctf easy vou continuar enumerando.
Meu primeiro alvo é o ssh. Tenho creds? Não, mas quero saber se o serviço está aceitando password, chave ou ambos. Nesse ssh apenas é válido login via chave, portanto não tem o que perder tempo com bruteforce caso eu encontre algum username pela aplicação.
Nossa ultima opção é encontrar alguma pista/vulnerabilidade no site. De inicio aparenta ser um site estático em php, mas é necessário coletar mais informações sobre o alvo.
Ao lermos o código fonte da página, podemos encontrar uma informação relevante: O username é R1ckRul3s. O ssh não é uma opção, portanto devemos explorar os diretórios pela força bruta.
Utilizei o gobuster para enumerar os diretórios utilizando uma wordlist curta. Assim caso eu ache algo, vou trabalhando nos vetores encontrados e depois deixo rodando em uma lista maior. No nosso caso, conseguimos encontrar o diretório /assets bem como os arquivos robots.txt, portal.php, login.php e denied.php. Observando os redirecionamentos de denied.php e portal.php para o login.php, podemos presumir que é necessário estar autenticado para acessar essas páginas.
Acessando o robots.txt conseguimos a string Wubbalubbadubdub. Ao acessarmos o login.php encontramos um formulário de autenticação. Testei credenciais padrões como admin, administrator, root, rick, picklerickle e R1ckRul3s para entender o comportamento da aplicação, mas sem diferença de resposta.
Esses ctfs temáticos são complicados: Ou é 100% guessing ou são umas coisas bem toscas, mas paciência. Imaginando o cenário de guessing, já abri o burpsuite, fiz uma requisição de login e enviei para o intruder, utilizei o sniper para carregar uma lista pequena de passwords para realizar o bruteforce e inseri o username como R1ckRul3s. E sim, dei o play e fui analisar outros vetores, mas zero resultados com o bruteforce.
Ao acessar o diretório /assets não encontrei nada relevante pro desafio, então é aquele momento de: Putz, o ctf é temático né. Não teve jeito, inseri o username R1ckRul3s e a senha Wubbalubbadubdub e foi batata, realizou a autenticação com sucesso.
Tendo agora acesso ao portal.php, ele apresenta uma box que podemos enviar comandos. Testei pwd e retornou /var/www/html, ai virou festa! Testei fazer uma bind shell para minha máquina, afim de agilizar o processo de pós exploração, mas sem sucesso.
Decidi enumerar o alvo pela própria aplicação, portanto meu primeiro passo é ler o /etc/passwd para encontrar outros usuários, porém foi identificado que a aplicação possui uma restrição ao executar os comandos cat, head ou semelhantes. Eu nem tinha me atentado, mas tentei ler o /etc/passwd sem ao menos saber qual o meu usuário! Executei o comando id e retornou uid=33(www-data) gid=33(www-data) groups=33(www-data).
No diretório /home há dois usuários, rick e ubuntu, então vou enumerar as permissões do meu usuário atual. Utilizei o find para procurar binários com o suid ativo, mas sem sucesso, então mandei o CLÁSSICO sudo -l e tcharam, nosso user consegue executar com permissões root ao utilizar o sudo. Agora é só encontrar as flags dentro da máquina!
Flags
Primeira coisa é olhar a pasta do site para encontrar outros diretórios e arquivos que não encontramos com o gobuster. Há o arquivo Sup3rS3cretPickl3Ingred.txt e nele há a primeira flag! Só acessar pela raiz da aplicação o arquivo.
Como já tinha enumerado o diretório /home, dentro do /home/rick há o arquivo second ingredients, como não temos head/cat, movi o arquivo para a pasta do site, assim poderia acessar o arquivo de texto sem problemas. Não esqueça de realizar o escape do espaço ao realizar o comando, no meu caso, utilizei sudo mv /home/rick/second\ ingredients /var/www/html/.
Já há flag no site e flag no /home, só falta a flag no /root! Encontrei o arquivo 3rd.txt e movi para a raiz da aplicação, sucesso!
Mitigação
Para gerar valor ao nosso exercicio, quais são as mitigações que podem ser aplicadas? Qual o valor que podemos agregar ao cliente/usuário/write-up?
- Retirar a exposição do usuário R1ckRul3s no código fonte do index.
- Alterar a senha do usuário R1ckRul3s, desvinculando se seu bordão óbvio e criando uma senha forte e complexa.
- Avaliar a necessidade da aplicação possuir a feature de enviar comandos para a máquina server. Caso necessário, criar recursos para executar apenas comandos espefícios e assumindo o risco que é uma feature vulneravel por natureza.
- Remover permissões totais de super usuário do usuário www-data.
CTF temático, meio guessing, mas divertido pra lembrar que: Por mais que se conheça n ferramentas e técnicas, é necessário estar atento as evidências, vetores e informações apresentadas no seu alvo. Podem parecer irrelevantes, mas no decorrer da exploração talvez elas sejam a diferença!
Espero que tenha gostado!