MonitorsTwo é uma máquina Linux de dificuldade fácil. Nela é preciso abusar de uma vulnerabilidade da aplicação Cacti para obter acesso como www-data em um docker, quebrar um hash para conseguir acesso de usuário na máquina host e por fim utilizar uma vulnerabilidade do Moby para executar um binário do container no host para conseguir root.
Com um scan do nmap encontra-se duas portas abertas nessa máquina, 80 de uma aplicação web e 22 de ssh.
Acessando a aplicação web encontrei uma página de login para o Cacti na versão 1.2.22. Essa versão pussui vulnerabilidade de Remote Code Execution (RCE), e há exploits públicos e um módulo no Metasploit.
Para explorar essa vulnerabilidade eu utilizei o exploit que tem no exploit-db escrito por Riadh Bouchahoua, pode ser acessado nesse link. Porém para esse exploit funcionar deve ser feito uma alteração, onde está ’local_cacti_ip = self.url.split("//")[1].split("/")[0]’ deve ser alterado para ’local_cacti_ip = “127.0.0.1”'.
...
def exploit(self):
# local_cacti_ip = self.url.split("//")[1].split("/")[0]
local_cacti_ip = "127.0.0.1"
headers = {
'X-Forwarded-For': f'{local_cacti_ip}'
}
...
Assim, ao executar o exploit, consegui acesso como usuário www-data dentro de um container docker.
O binário capsh possui permissão de SUID que podemos utilizar para obter acesso de root nesse docker com o comando abaixo.
capsh --gid=0 --uid=0 --
No diretório raiz do docker há um arquivo chamado entrypoint.sh que possui o login e senha para o banco de dados.
Utilizando essas credenciais pude executar consultas ao banco de dados que tem uma tabela com hashes de senhas de usuários.
Os hashes foram produzidos utilizando o algoritmo bcrypt e o do usuário marcus pode ser quebrado com o uso do hashcat.
hashcat -a 0 -m 3200 hash /usr/share/wordlists/rockyou.txt
Com essa senha que consegui pude, então, entrar na máquina fora do Docker a partir de SSH e na home do marcus está a primeira flag.
Ao logar pelo SSH é falado que o marcus possui um email, olhando no /var/mail/marcus é possível ler o email que destaca 3 vulnerabilidades da máquina.
A terceira vulnerabilidade que está no email, o CVE-2021-41091, pode ser utilizada para fazer o escalonamento de privilégio para root na máquina host. Para isso é preciso voltar ao Docker, como já possuímos privilégio de root lá, daremos privilégio de SUID ao /bin/bash.
chmod u+s /bin/bash
Há um mount do host com o bocker no diretório /var/lib/docker/overlay2/c41d5854e43bd996e128d647cb526b73d04c9ad6325201c85f73fdba372cb2f1/merged, a partir dele podemos acessar e executar os binários do docker.
Esse diretório merged é a mistura do conteúdo da imagem do docker com o container que está sendo executado. O que foi alterado no container em execução com relação a imagem original está salvo na pasta diff. Como alteramos o /bin/bash para ter permissão de SUID, esse binário estará na pasta merged e na diff.
Podemos ver que o bash com SUID está realmente no diretório diff. Por fim, ao executá-lo obtemos root na máquina host e temos acesso a flag.