domingo, 12 de abril de 2020

HackTheBox - Traverxec machine walkthrough


TL; DR


O ponto inicial foi a exploração da execução remota de código no servidor http Nostromo por meio de um path traversal  (CVE 2019-16278). Investigando no sistema de arquivos da máquina, encontramos um diretório "privado" dentro do diretório do usuário. Lá havia um backup da .ssh do usuário, incluindo a chave privada. Depois de recuperar a senha dessa chave, o acesso foi garantido usando as credenciais desse usuário. Esse usuário tinha a capacidade de executar o comando journalctl  utilizando sudo (ou seja no contexto do usuário root) sem solicitar a senha (sudo nopasswd), abusar desse binário foi o caminho para o root.





Passo a passo

O processo de enumeração revelou  um servidor web em execução na porta 80 e a porção  server das respostas HTTP do servidor revelavam que era um nhttpd (Nostromo Web Server) versão 1.9.6. Ao pesquisar por tal software e versão descobriu-se que o mesmo era afetado por um path traversal que conduzia a uma execução remota de código de acordo com o CVE 2019-16278. O primeiro passo foi confirmar que tal vulnerabilidade seria explorável nesse contexto e obter um exploração funcional.





Após confirmar a exploração e depois de obter uma interface de comando (shell) adequada na máquina, começou-se a pesquisar no sistema de arquivos do host procurando arquivos interessantes e terminamos na configuração do servidor da web Nostromo.







O arquivo de configuração revelou que o diretório home do usuário estaria publicado e accessível pelo servidor web, no entanto, apesar de termos encontrado um ".htpasswd" configurado, não havia um ".htaccess" adequado configurado.

Esse arquivo de configuração também revelou que todos os usuários poderiam ter um diretório "público" em sua pasta pessoal e que este séria acessível pelo através do servidor web, significando que o usuário do serviço httpd (www-data) deveria ter pelo menos acesso de leitura nesse diretório.
Nesse diretório público, encontramos um backup das chaves SSH do usuário David . Como a chave privada estava criptografada, usamos o sshng2john.py para converter esta chave em um formato que pudêssemos usar como input para o john  e depois realizar um ataque de dicionario contra essa chave utilizando a wordlist  "rockyou.txt". Esse ataque revelou que a senha dessa chave era hunter 


Essa chave SSH nos deu acesso à máquina como David. No diretório pessoal do usuário, havia uma pasta bin com um script bash chamado "servers-stats.sh". O conteúdo desse script revelou que seria possível executar o comando journalctl usando sudo. Depois de confirmar isso e perceber-se que não era solicitado a senha  do usuário (sudo nopasswd).



O journalctl pode ser explorado de tal maneira a permitir a execução arbritario de comandos, isso é possível por que tal executavvel chama ao fim de sua execuao o programa pager padrão, que normalmente é o "less". O comando less exibe a saída na tela do usuário e aguarda a entrada do usuário assim que o conteúdo for exibido. Isso pode ser explorado executando um comando shell.



/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service


Após journalctl terminar sua execução ele chamara less o qual podemos executar !/bin/ bash e então obter uma interface de comandos







Recomendações



  • Mantenha seus softwares atualizados;
  • Não deixe seu backup em diretórios acessíveis por outros usuários;
  • Não use senha fraca na sua chave privada SSH;
  • Você pode adicionar o parâmetro  "--no-page" no journalctl para evitar chamar pager  no final de execução sua execução.


Detecção


  • Qualquer WAF deveria ser capaz de detectar payloads de ataques de path traversal.




Nenhum comentário: