HackingClub Quarkus Write-up
0
0

HackingClub Quarkus Write-up

Resolução da maquina Quarkus do hackingclub.

Roberto Francisco
3 min
0
0
Email image

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.

                                                     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:

Email image

Identificamos os serviços e as portas disponíveis, iniciaremos o reconhecimento do serviço web na porta 80.

Email image

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

Email image

Encontramos um arquivo .zip chamado backup.zip, vamos fazer o download do arquivo para nossa máquina.

Email image

Agora vamos descompactar o arquivo com o utilitário unzip.

unzip backup.zip

Resultado:

Email image

Acessando o diretório "app" temos o seguinte arquivo .jar.

Email image

Verificando o serviço web na porta 8080 pelo navegador, temos:

Email image

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.

Email image

Vamos abrir o “AuthController.class” com “jd-GUI” para podermos ler o código.

Email image

Resultado:

Email image

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.

Email image

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.

Email image

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.

Email image

Enviamos a requisição.

Resultado:

Email image

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.

Email image

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.

                                                          Exploração

Criaremos o diretório /latest/meta-data/ e no diretório meta-data salvaremos nossa reverse shell php com o nome de local-ipv4.

Email image

Na nossa requisição, alteraremos o valor de "name" para ../var/www/html/shell.php, salvando nossa reverse shell na raiz do servidor web.

Email image

Enviamos a requisição.

Email image

Pronto o servidor solicitou nosso arquivo, vamos verificar se salvou dentro do servidor web.

Acessamos shell.php no servidor web porta 80.

Email image

Conseguimos acesso ao terminal da máquina.

Email image

                                                  Escalação de Privilégios

Depois de analisar a máquina percebi que nossa shell foi escrita pelo usuário tomcat, mas estamos com acesso do usuário apache.

Email image

Vamos tentar obter shell com o usuário tomcat.

Email image

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.

Email image

Faremos do mesmo modo que fizermos com a reverse shell php, somente alterando o valor de "name".

Email image

Acessamos na porta 8081 /sso/shell.jsp.

Email image

Conseguimos acesso como usuário tomcat, executamos sudo -l.

Email image

 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.

Email image

Alteraremos para obter uma reverse shell quando o serviço for reiniciado.

Email image

Vamos executar os comandos com sudo, lembre-se de deixar o netcat escutando na porta 4447:

sudo /bin/systemctl daemon-reload   : para salvar com nossas alterações.

sudo /bin/systemctl restart tomcat   : reiniciar o serviço do tomcat.

Email image

Voltamos para nosso netcat.

Email image

Conseguimos acesso como usuário root !! 

Email image