Passo a passo de como eu resolvi a maquina Horizont da Crowsec.
Introdução | ||
A máquina Horizont é disponibilizada no laboratório da Crowsec, para poder ter acesso a essa máquina é preciso ser aluno do Webhacking-na-pratica 2.0. ela está classificada como nível Médio e seu sistema operacional é Linux. | ||
Reconhecimento | ||
O primeiro passo é descobrir quais os serviços que estão sendo executados na máquina, para isso utilizei o Nmap com os seguintes parâmetros: | ||
Nmap -sV -vvv <IP-da-Maquina> | ||
e obtive o seguinte resultado: | ||
Então decidir olhar o serviço http na porta 80. | ||
Depois de olhar e tentar algumas interações, decidir olhar o código fonte da página e encontrei algo bastante interessante | ||
Era um comentário, solicitando que define-se um valor para o parâmetro url, decidir então testar, colocando a url do google como valor do parâmetro. | ||
Opa, o servidor retornou o conteúdo da página web do google =D, mas não parei por aí, fui mais a fundo, e subir um servidor web em python na minha máquina com o comando | ||
python3 -m http.server 8080 e coloquei minha url no parâmetro. | ||
Então descobrir que o IP que fazia a requisição http era o da máquina Horizont. | ||
Ou seja, era um server-side request forgery(SSRF). | ||
Explorando o SSRF | ||
Através, desse SSRF conseguir extrair do metadados da AWS credencias de acesso ao s3. | ||
Com essas informações, configurei o aws cli no meu sistema operacional e executei o comando: aws s3 ls. | ||
Então achei interessante o nome de um diretório s3-ctf | ||
Em seu conteúdo tinha | ||
Então executei o download do arquivo de texto. | ||
Depois abrir o arquivo e nele continha um base64. | ||
Ganhando acesso a aplicação | ||
Eu precisava decodificar o base64, então executei o comando no terminal | ||
base64 -d superadmin_login_backup.txt | ||
e este base64 tinha credenciais de acesso há alguma aplicação | ||
Então fui dar uma olhada no serviço http da porta 8080 que estava sendo executada na maquina | ||
Eee de cara tinha uma função de login | ||
Coloquei as credencias do base64 e pressionei o botão de Login | ||
Conseguir logar no sistema :D. Pressionei o Admin Area. | ||
E fui redirecionado para essa página | ||
Era uma aplicação de CMS, era preciso entender ela e dar um pesquisada por possíveis pontos de exploração. Foi então que encontrei esse artigo escrito por bigb0ss, que demostrou a utilização de um plugin malicioso no HorizontCMS | ||
Explorando HorizontCMS | ||
Fiz o download do plugin disponibilizado no repositório do github do autor do HorizontCMS. | ||
E fui para o seguinte diretório. | ||
E neste diretório continha alguns arquivos. | ||
Abrir o arquivo messages.php com o nano e inserir um código de reverse shell. | ||
| ||
Depois compactei novamente no formato zip todos os arquivos. Voltei para aplicação HorizontCMS e naveguei para o sistema de plugin. | ||
Então fui para a opção de upload new plugin. | ||
Selecionei o meu plugin modificado com a extensão .zip. | ||
E pressionei upload, install, activate e pronto plugin instalado e pronto para testar | ||
Conseguindo uma shell | ||
Então coloquei meu netcat para escutar na porta configurada no código reverse shell, porta 1337. | ||
No Google Maps, pressionei add location. | ||
E inserir dados fictícios, e pressionei Save. | ||
Voltei para o netcat e. | ||
Obtive uma shell no servidor :p, comecei a navegar pelos diretórios e encontrei na raiz do sistema operacional uma flag. | ||
Encontrei a flag de usuário 😊. | ||
Escalando Privilégios | ||
Comecei a procurar por binários com SUID configurados com o comando. | ||
E encontrei esses. | ||
Acessei o site https://gtfobins.github.io/ e comecei a procurar por binários que continha na lista que me permite-se virar root. | ||
Encontrei o binário find. | ||
Naveguei para /usr/bin e executei o comando | ||
E executei o comando whoami, eee | ||
Virei root do sistema operacional. LoL. Fui para o diretório raiz do usuário root e executei o cat no arquivo root.txt | ||
E a peguei a flag root. Maquina Finalizada com sucesso U.u. | ||
Considerações finais | ||
O comprometimento da máquina Horizont, deu em consequência da aplicação permitir que o usuário consiga manipular requisições feitas pelo servidor web, falha chamada de SSRF(Server-side Request Forgery), somando a uma má configuração de permissões dos metadados da AWS, foi possível tornar-se administrador da aplicação CMS. | ||
A escalação de privilegio ocorreu devido o bit SUID está ativado no binário find do sistema operacional. |