Resolução da maquina Down da Crowsec.
A máquina Down é disponibilizada no laboratório da Crowsec, para poder ter acesso a essa máquina é preciso ser aluno do Webhacking-na-pratica 2.0. | ||||||||||||||
A máquina está classificada como nível Difícil e seu sistema operacional é Linux. | ||||||||||||||
Reconhecimento | ||||||||||||||
Primeira etapa é fazer o reconhecimento inicial de portas e serviços disponíveis no alvo. Para essa função escolhi utilizar a ferramenta Nmap. | ||||||||||||||
Nmap -sS -sV -v | ||||||||||||||
Resultado: | ||||||||||||||
Então, iniciei o reconhecimento do serviço web na porta 80 | ||||||||||||||
Uma página home de uma empresa de hospedagem. depois de interagir bastante com a página, iniciei a procura por arquivos. | ||||||||||||||
Executei o wfuzz para fazer uma varredura por arquivos no servidor | ||||||||||||||
wfuzz -c -z files,files.txt –hc 404 http:///FUZZ | ||||||||||||||
Resultado: | ||||||||||||||
Um arquivo php encontrado, então resolvi dar uma olhada. | ||||||||||||||
O check.php tinha a função de verificar se meu website estava disponível na internet. | ||||||||||||||
O Problema era que para isso o servidor da aplicação precisaria fazer uma requisição para o meu servidor, deixando o servidor da aplicação vulnerável a SSRF(Server-side Request Forgery). Basicamente é quando o cliente pode fazer o servidor enviar requisições para outros servidores e serviços. | ||||||||||||||
Fui confirmar a vulnerabilidade, configurei um servidor python. | ||||||||||||||
enviei a url do meu servidor web para aplicação. | ||||||||||||||
A requisição foi feita para minha máquina e o ip da requisição pertencia ao servidor da aplicação. Com essa informação, posso utilizar a própria aplicação para interagir com outros serviços não disponíveis ou filtrados no alvo. | ||||||||||||||
Obs: Código apresentou 404, por que o arquivo não existe na minha máquina. | ||||||||||||||
Executei novamente o nmap com a flag -p- para varrer por todas as portas, a procurar de algum serviço que posso usar para acessar via SSRF. | ||||||||||||||
Serviço zabbix-agent estava com estado filtrado, possivelmente alguma regra de firewall estava filtrando o acesso externo, mas posso usar o SSRF para tentar acessar o serv | ||||||||||||||
Explorando o Zabbix | ||||||||||||||
Com o script abaixo, gerei um payload para fazer requisição para zabbix | ||||||||||||||
| ||||||||||||||
Então executei o script e o comando para ser executado | ||||||||||||||
O payload utiliza o protocolo gopher para interagir com o serviço do zabbix. solicitei a execução do comando cat /etc/ passwd, por meio do item system.run presente no zabbix agent. | ||||||||||||||
enviei a requisição com o payload para a aplicação. | ||||||||||||||
Resultado: | ||||||||||||||
| ||||||||||||||
Obtive um RCE(Remote code execution) utilizando o zabbix através de um SSRF existente no servidor. | ||||||||||||||
Iniciei tentativas de obter um reverse shell utilizando o zabbix, mas todas as tentativas o servidor desconectava a shell. | ||||||||||||||
Então comecei a procurar por diretórios webs que tenho acesso pelo servidor web e que tenho permissão de escrita. | ||||||||||||||
Encontrei o diretório assets. | ||||||||||||||
gerei um payload para gravar um reverse shell no diretório assets | ||||||||||||||
esse comando vai fazer uma requisição para minha máquina solicitando o conteúdo do shell.php e seu conteúdo vai ser salvo / var / www /html /assets / shell.php | ||||||||||||||
O conteudo de shell.php | ||||||||||||||
Depois de enviado o payload, verifiquei se meu arquivo foi gravado no servidor. | ||||||||||||||
Foi gravado, inciei o netcat na porta configurada. | ||||||||||||||
Acessei o shell.php e voltei para o netcat. | ||||||||||||||
SHELL !! | ||||||||||||||
| ||||||||||||||
Escalando privilégios | ||||||||||||||
Encontrei em / var / backups/ um arquivo oculto denominado .password.bkp, seu conteúdo era um hash possivelmente extraído do / etc / shadow | ||||||||||||||
Executei o jhon para tentar “quebrar” o hash | ||||||||||||||
Conseguir a senha do usuário DevOps, su DevOPS e a senha encontrada , tive acesso ao usuário | ||||||||||||||
Executei sudo -l | ||||||||||||||
Comecei a pesquisar sobre ansible-playbook e como poderia escalar privilégios para root. | ||||||||||||||
Criei um arquivo chamado shell.yml | ||||||||||||||
Que iniciava uma shell interativa utilizando o sh | ||||||||||||||
Executei o ansible-playbook com sudo | ||||||||||||||
Eee | ||||||||||||||
|