Resolução da maquina Quarkus do hackingclub.
|
|
A máquina Quarkus pertence ao Hackingclub, para poder ter acesso a essa máquina é necessário assinar o Hackingclub.
A máquina está classificada como nível médio e seu sistema operacional é Linux.
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, iniciaremos o reconhecimento do serviço web na porta 80.
|
|
Acessando o serviço pelo navegador, encontramos a página padrão do apache.
Iniciaremos uma varredura de arquivos, com intuito de encontrar algum arquivo oculto no servidor. Vamos utilizar o wfuzz para essa tarefa.
wfuzz -c -z file,maquinas/wordlists/files.txt –hc 404 http://172.31.28.68/FUZZ
|
|
Encontramos um arquivo .zip chamado backup.zip, vamos fazer o download do arquivo para nossa máquina.
|
|
Agora vamos descompactar o arquivo com o utilitário unzip.
unzip backup.zip
Resultado:
|
|
Acessando o diretório "app" temos o seguinte arquivo .jar.
|
|
Verificando o serviço web na porta 8080 pelo navegador, temos:
|
|
Nosso arquivo backup.zip é o backup da aplicação que está em execução na porta 8080.
Vamos extrair os arquivos de dentro do jar e ver a sua estrutura.
jar xvf ldapsso-1.0.0-SNAPSHOT.jar
Acessando o diretório “com/uhclabs” encontramos três classes java.
|
|
Vamos abrir o “AuthController.class” com “jd-GUI” para podermos ler o código.
|
|
Resultado:
|
|
Os valores dos objetos "name" e "ipaddress" são inseridos na função Runtime. getRuntime(). exec() para serem utilizados como argumentos no comando curl.
Se conseguirmos de alguma forma manipular os valores deles, poderemos comprometer o ambiente.
|
|
Olhando a classe “LdapSSOProvider”, encontramos a rota /sso e uma função que recebe valores em json via POST.
Vamos acessar a rota /sso pelo navegador.
|
|
Encontramos os objetos, agora vamos enviar via método POST para confirmar que podemos manipular esses objetos no backend.
Iniciamos o servidor web python na porta 1338.
|
|
Enviamos a requisição.
Resultado:
|
|
A requisição chegou no servidor python, temos um Server-side Request Forgery. Vamos dar outra olhada no código que é responsável pela requisição que chegou na nossa máquina.
|
|
O comando curl faz uma requisição GET na porta 1338 solicitando /latest/meta-data/local-ipv4 e salva o response em um arquivo com nome do valor do objeto name em /tmp/ .
Com essa informação podemos escalar a vulnerabilidade de SSRF para RFI.
Criaremos o diretório /latest/meta-data/ e no diretório meta-data salvaremos nossa reverse shell php com o nome de local-ipv4.
|
|
Na nossa requisição, alteraremos o valor de "name" para ../var/www/html/shell.php, salvando nossa reverse shell na raiz do servidor web.
|
|
Enviamos a requisição.
|
|
Pronto o servidor solicitou nosso arquivo, vamos verificar se salvou dentro do servidor web.
Acessamos shell.php no servidor web porta 80.
|
|
Conseguimos acesso ao terminal da máquina.
|
|
Depois de analisar a máquina percebi que nossa shell foi escrita pelo usuário tomcat, mas estamos com acesso do usuário apache.
|
|
Vamos tentar obter shell com o usuário tomcat.
|
|
Encontramos o diretório do tomcat.
Precisaremos de uma reverse shell .jsp para conseguir acesso no servidor como tomcat, utilizaremos o msfvenom para gerar nossa reverse shell.
|
|
Faremos do mesmo modo que fizermos com a reverse shell php, somente alterando o valor de "name".
|
|
Acessamos na porta 8081 /sso/shell.jsp.
|
|
Conseguimos acesso como usuário tomcat, executamos sudo -l.
|
|
Temos permissão de root para reiniciar o serviço do tomcat e recarregar as configurações dos serviços do systemctl.
Vamos alterar o arquivo tomcat.service.
|
|
Alteraremos para obter uma reverse shell quando o serviço for reiniciado.
|
|
Vamos executar os comandos com sudo, lembre-se de deixar o netcat escutando na porta 4447:
1º sudo /bin/systemctl daemon-reload : para salvar com nossas alterações.
2º sudo /bin/systemctl restart tomcat : reiniciar o serviço do tomcat.
|
|
Voltamos para nosso netcat.
|
|
Conseguimos acesso como usuário root !!
|
|