Write-up da maquina Smuggler do Hackingclub.
A máquina Smuggler pertence ao Hackingclub, para poder ter acesso a essa máquina é necessário assinar o Hackingclub. | ||||||||||||||||||||||
A máquina está classificada como nível Difícil e seu sistema operacional é Windows. | ||||||||||||||||||||||
Reconhecimento | ||||||||||||||||||||||
Primeira etapa é fazer o reconhecimento inicial de portas e serviços disponíveis no alvo. Para essa finalidade utilizaremos a ferramenta Nmap. | ||||||||||||||||||||||
Nmap -sS -sV -v <IP> | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Identificamos os serviços e as portas disponíveis, como também o nome do domínio smuggler.uhclabs. | ||||||||||||||||||||||
Adicione no / etc /hosts. | ||||||||||||||||||||||
Verificaremos o servidor web na porta 80. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Um sistema Wordpress executando no servidor. | ||||||||||||||||||||||
Iniciaremos uma varredura por plugins instalado no Wordpress, utilizando a ferramenta wpscan. | ||||||||||||||||||||||
O wpscan apresenta muitas informações, irei mostrar somente o necessário. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
O plugin canto está desatualizado e possivelmente possui alguma vulnerabilidade. | ||||||||||||||||||||||
Pesquisando no Google por “plugin canto 1.3.0” encontraremos a CVE-2020-28976. | ||||||||||||||||||||||
Vamos verificar se a vulnerabilidade está disponível na máquina. | ||||||||||||||||||||||
Iniciando um servidor http python. | ||||||||||||||||||||||
Com o curl podemos enviar a requisição para o servidor. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Aparentemente chegou uma requisição criptografada, vamos tentar iniciar um servidor https com python. | ||||||||||||||||||||||
Iniciamos um servidor https. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Com a vulnerabilidade SSRF podemos fazer varredura de portas no alvo, mas trata-se de um SSRF blind, ou seja, não obtemos nenhum tipo de resposta do servidor. Precisaremos analisar o comportamento da aplicação para encontrar um padrão. | ||||||||||||||||||||||
Utilizando o python podemos medir quanto tempo leva para o servidor responder a requisição, sabendo que a porta 445 e 80 estão abertas podemos comparar o tempo de resposta de cada uma com portas fechadas. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Portas abertas são menores que 2. | ||||||||||||||||||||||
Com essa informação podemos criar um script para executar uma varredura de portas baseada em tempo. | ||||||||||||||||||||||
Script: | ||||||||||||||||||||||
| ||||||||||||||||||||||
Esse script será o responsável por encontrar portas abertas localmente no alvo. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Uma rápida pesquisada no Google e encontramos o possível serviço que está sendo executado na porta 10050. | ||||||||||||||||||||||
Se conseguirmos redirecionar a requisição do servidor que vem via SSRF, podemos interagir com serviço do zabbix via protocol smuggling. | ||||||||||||||||||||||
Precisaremos de dois scripts para isso. | ||||||||||||||||||||||
1º script de servidor https que redireciona a requisição. | ||||||||||||||||||||||
| ||||||||||||||||||||||
2º script que gera o payload para executar comando no zabbix. | ||||||||||||||||||||||
| ||||||||||||||||||||||
Vamos verificar se irá funciona. | ||||||||||||||||||||||
Um simples ping na minha máquina para comprovar a execução. | ||||||||||||||||||||||
Payload inserido no https.py | ||||||||||||||||||||||
Enviamos a requisição. | ||||||||||||||||||||||
Pacotes ICMP chegaram na minha máquina. O Protocolo ICMP é utilizado pelo utilitário ping que executamos no alvo. | ||||||||||||||||||||||
Exploração | ||||||||||||||||||||||
Se tentarmos executar uma reverse shell a conexão será derrubada pelo zabbix, precisamos ter outra abordagem. | ||||||||||||||||||||||
Podermos ler o arquivo wp-config.php do Wordpress a procura de alguma credencial. | ||||||||||||||||||||||
Gerando o payload. | ||||||||||||||||||||||
Faremos o mesmo processo para redirecionar a requisição com o novo payload. | ||||||||||||||||||||||
Dessa vez, utilizaremos o browser invés do utilitário curl. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Descobrimos credencias do banco de dados do Wordpress, vamos tentar reutilizar esse password em outro usuário. | ||||||||||||||||||||||
Vamos procurar por usuários na máquina. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Encontramos o usuário zabbix, vamos tentar se conectar utilizando-o e o password descoberto anteriormente. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Shell!! | ||||||||||||||||||||||
| ||||||||||||||||||||||
Flag user encontrada!! | ||||||||||||||||||||||
Escalação de privilégios. | ||||||||||||||||||||||
Precisaremos conseguir uma shell como serviço para conseguir a escalação de privilegios. | ||||||||||||||||||||||
Primeiro geraremos um executável malicioso com o msfvenom. | ||||||||||||||||||||||
Iniciaremos um servidor http em python. | ||||||||||||||||||||||
E iniciamos o download do executável na máquina Windows. | ||||||||||||||||||||||
Utilizaremos o zabbix_get.exe para executar nosso o exe malicioso e obtermos a reverse shell como serviço. | ||||||||||||||||||||||
Comando : | ||||||||||||||||||||||
./zabbix_get.exe -s 127.0.0.1 -k 'system.run[C:\Windows\Temp\hack.exe,nowait]’ | ||||||||||||||||||||||
Executamos o comando. | ||||||||||||||||||||||
Conseguimos, estamos como serviço. | ||||||||||||||||||||||
Executamos whoami /priv . | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Com Impersonate Privilege podemos executar processos em nome de um usuário, para nos ajudar nesse processo utilizaremos o PrintSpoofer.exe. | ||||||||||||||||||||||
Enviaremos o PrintSpoofer para maquina utilizando mesmo método do executável malicioso. | ||||||||||||||||||||||
Executamos o PrintSpoofer. | ||||||||||||||||||||||
Resultado: | ||||||||||||||||||||||
Agora temos a permissão para acessar o diretório Administrator. | ||||||||||||||||||||||
A Flag root capturada. | ||||||||||||||||||||||
|