Sau é uma máquina Linux de dificuldade fácil. Nela é preciso abusar de um SSRF na aplicação Request Basket para acessar uma segunda aplicação web que está em uma porta filtrada. Com isso é possível explorar um RCE do Mailtrail para conseguir uma shell como usuário e por fim utilizar o systemctl com sudo para obter root.
Com um scan do nmap encontra-se três portas abertas nessa máquina, 22 do ssh, 80 está filtrada e não conseguimos acessar e a 55555 que tem uma aplicação web.
A aplicação que está sendo executada na porta 55555 é o Request Basket, um servidor que permite criar endpoint para coletar e inspecionar requisições HTTP.
Ao criar um basket e fazer uma requisição dele podemos ver informações como data e horário, headers, método do HTTP, entre outras.
Nas configurações do basket podemos configurar uma URL para Forward, assim quando fizermos uma requisição para esse basket ele vai redirecionar essa requisição para outra URL. Assim, temos uma vulnerabilidade de Server-Side Request Forgery (SSRF). Aqui eu configurei para ser redirecionado para o localhost na porta 80, dessa forma poderemos acessar essa porta que está sendo filtrada.
Também é necessário selecionar as opções “Proxy Response” e “Expand Forward Path”. A primeira fará com que a resposta da requisição redirecionada retorne para a gente e a outra permitirá adicionarmos um path na requisição.
Com isso, ao acessar a URL do basket recebemos o conteúdo da aplicação que está na porta 80, sendo este o Mailtrail na versão 0.53.
Buscando essa aplicação no google podemos encontrar uma vulnerabilidade de Remote Code Execution (RCE), o CVE-2023-27163. Há exploits públicos para essa vulnerabilidade, aqui eu utilizei o do packet storm escrito por Iyaad Luqman K.
Para esse script é necessário passar como parâmetro o IP e porta em que retornará a reverse shell e a URL do alvo. Ao executá-lo recebemos uma shell como usuário puma. E já conseguimos a primeira flag.
Esse usuário pode executar o comando “systemctl status” com sudo. Esse comando retorna o status do serviços informado, mas o output acontece por meio do less.
Assim, após utilizarmos o comando é aberta uma tela do less, nesse caso não ocorreu devido a não ser uma shell totalmente interativa, e podemos invocar uma shell a partir dele com o comando “!sh”. Como o less foi executado como root então essa shell também é de root, com isso podemos obter a flag de root.