sábado, 18 de abril de 2020

HackTheBox - Mango machine walkthrough



TL;DR

The first foothold was to find a specific VHOST and the applicacation running into that. Then dumpping two users' credentials exploiting a NoSQL Injection vulnerability into the login form of that application. The next step was to use a one credential to login over SSH and the other one to move laterally to another user and get the user flag.
The root flag comes running the binary jjs that was with setuid and setgid setted up and also has grant to the user run arbitrary commands .



O ponto inicial foi encontrar um VHOST específico e a aplicação e por tanto uma aplicação específica. Em seguida, recuperar as credenciais de dois usuários que explorando uma vulnerabilidade de injeção NoSQL no formulário de login dessa aplicação. A próxima etapa foi usar uma credencial para efetuar login no SSH e a outra para mover-se lateralmente para outro usuário e obter a flag user.txt


O flag roote veio através da execução do programa jjs que estava com setuid e setguid definidos e que permitia execução de comandos arbitrários.








Passo a passo 

Inspecionando o certificado SSL foi possível recuperar um suposto e-mail válido admin@mango.htb e um virtual host staging-order.mago.htb e então um formulário de login. 

Depois de realizar fuzzings nesse formulário percebeu-se que ele era vulnerável a ataques de NoSQL Injection 





Criado um script para recuperar os usuários e senhas do banco de dados da aplicação,  este script foi inspirado no how to do projeto PayloadsAllTheThings no github.




Após executar tal script e recuperar as credenciais dos usuários mango e admin, o proximo passo foi validar se tais credencias seriam validas em outros serviços além da aplicação web, haja vista que a reutilização de senhas/credenciais é uma prática basteante comum. Esse teste verificou que seria possível obter acesso a máquina atraves do serviço SSH utilizando a as credencias do usuário mago. Apesar do usuário admin não ter acesso através do serviço SSH, foi verificado que serio possível personificá-lo utilizando o comando su e a sua senha recuperada da aplicação web. Este usuário deu acesso a flag user.txt

Como de costume, após obter acesso a um host procurou-se por todo tipo de informação que ajudasse a mover-se lateralmente ou escalar privilégios, o utilitários LinEnum e linpeas automatizam parte desse processo. 


Esse processo identificou que  o executável jjs tinha como seu dono o usuário root e grupo dono admin além de possuir setuid¹setgid definidos. Essa combinação de fatores cria o cenário onde podemos executar esse binário sobre o contexto do usuário root



De acordo com a documentação da Oracle o jjs executa o engenho Nashorn que por sua vez trata-se de um engenho JavaScript desenvolvido em Java. Após uma leitura rápida da documentação dessa engine foi criado um script capaz de receber um comando como aguento e executá-lo usando o jjs, ou seja sobre o contexto do usuário root.

#!/usr/bin/jjs
print($EXEC($ARG[0]));





O próximo passo foi utilizar esse script para adicionar uma chave SSH pública no authorized_keys do usuário root garantindo assim a persistência do acesso. 


Recomendações:



  • Correção do ponto vulnerável a ataques de NoSQL Injection


Detecção 


  • Qualquer configuração básica de um WAF deve ser capaz de detectar explorações de NoSQL Injection. No ModSecurity isso é coberto pela regra OWASP CRS 942290

Referencias:

1. setuid (abreviação de "set user ID upon execution", que significa, "definir ID de usuário sob execução" ) e' um parâmetro de direitos de acesso do Unix que permitem que usuários rodem um executável com as permissões do dono do executável.



Nenhum comentário: