Crowsec Check Write-up
25
0

Crowsec Check Write-up

Resolução da maquina Check do laboratório da Crowsec. Explorando Deserialização do php.

Roberto Francisco
3 min
25
0
Email image

A máquina Check é 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 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 função escolhi utilizar a ferramenta Nmap.

nmap -sS -sV -v <IP>

Resultado:

Email image

Agora, iniciaremos o reconhecimento do serviço web na porta 80.

Email image

Iniciaremos uma varredura de arquivos que possam estar disponíveis no servidor web, utilizando a ferramenta gobuster.

gobuster dir -w raft-large-files.txt -e -u http://<IP-Maquina>/ -t 100

Resultado:

Email image

Encontramos um arquivo zip denominado backup.zip, fazemos o download do arquivo para nossa máquina.

unzip backup.zip

foi extraído um arquivo php denominado contact.php, vamos analisar seu conteúdo.

Email image

Um formulário web do servidor.

Acessamos a pagina via browser para verificar se ela está disponível no servidor.

Email image

A página está disponível, vamos fazer o code review do contact.php para tentar encontrar alguma vulnerabilidade.

Email image

Nessa parte do código mostra uma classe chamada Send, dentro da classe tem duas propriedades “send_file” e “message” e no final do código tem a função __destruct que quando for chamada salvará no diretório atual um arquivo com nome do conteúdo de “send_file” e dentro desse arquivo salvará o conteúdo de “message”.

A função __destruct será chamada automaticamente quando todo o script da classe Send terminar seu processamento.

Vamos continua analisando o script.

Email image

No final do arquivo, o script php aceita receber dados do usuário através do parâmetro ‘check’ via método GET, porem a vulnerabilidade ocorre quando o usuário pode definir o objeto serializado na função  ‘unserialize’ sem nenhum tipo de tratamento.

Vamos utilizar essa vulnerabilidade para manipular os valores das propriedades “send_file” e “message”.

Email image

Criei esse script que contém a classe Send com as propriedades “send_file” e “message” e no final vai retornar à serialização dessa classe.

Email image

Temos nosso objeto serializado, vamos enviar para o servidor.

Email image

Enviamos para o servidor.

Vamos tentar acessar o arquivo poc.php que criamos no servidor e confirmar que realmente está vulnerável.

Email image

Conseguimos execução de código no servidor. 

Email image

                                                         Exploração

Alterei o script para obtermos uma web shell.

Email image

Através do parâmetro “estudo” podemos executar qualquer comando no servidor.

Vamos obter a nossa shell.

Email image

Encodamos em base64 e enviamos para o servidor via parâmetro “estudo”.

echo -n <Seu-Base64> | base64 -d | sh

Resultado:

Email image

Temos nossa shell no servidor. :D

No diretório /opt/ encontramos nossa primeira flag.

Email image

                                                Escalação de Privilégios

Excutamos o comando find / -perm -u=s -type f 2>/dev/null para encontrar por binários com SUID ativado.

Email image

Encontramos o binário checker, vamos executa-lo para ver o que acontece.

Email image

Retornou somente a frase “você não é root,desculpe”

Vamos usar o ghidra para tentar entender como esse binário funciona.

Depois de analisar todo o código, encontrei na função main, o seguinte código.

Email image

Quando o binário é executado ele ler o valor da variável de ambiente chamada “i_am_root”, se for nula então ele retorna a mensagem, se não ele inicia uma shell como root. 

Email image

Configuramos a variável de ambiente com o valor de  1. OBS: pode ser qualquer valor. 

E executamos o binário.

Email image

ROOT!!

Email image
Email image

Segunda flag encontrada.

Email image