Walkthrough "JSON" — Hack the Box

Gabriel Barbosa
Infosec Stuff
Published in
5 min readMar 4, 2021

Nesse artigo mostraremos a exploração da vulnerabilidade 'Insecure Deserialization' para obter a flag de usuário na máquina;

Pré-visualização da máquina “JSON”, no perfil do Hack the Box

Enumeração
Iniciamos a enumeração do host por meio da varredura de portas com o intuito de identificar os serviços disponíveis. Para desempenhar essa função, foi utilizado o conhecido utilitário nmap para identificar os serviços em execução.

Foi identificado as portas 80 e 443 abertas no host alvo, o que indica que o serviço a ser explorado refere-se a uma aplicação web. O primeiro passo após a enumeração, foi acessar o host pelo browser e identificar o recurso disponível.

Ao carregar a página, identificamos um formulário de acesso que exigia usuário e senha para login. Por meio da exploração de credenciais padrão (ver OWASP) — “admin e admin”, obtemos êxito ao autenticar na plataforma com essas credenciais.

Exploração (Reverse Shell)
Após a autenticação, foi analisado todo o fluxo da mesma, com a finalidade de estudar o comportamento da aplicação. Durante esse procedimento identificamos um endpoint que seria o responsável por conter a vulnerabilidade de “deserialização insegura”.

Endpoint vulnerável

Na imagem acima, podemos validar que o cookie “OAuth2” é responsável por definir o cabeçalho de autenticação “Bearer”. Visto que o cabeçalho detém uma instrução encodada em base64, foi feito o decode.

Decode do base64 do cabeçalho Bearer

Após o decode, foi identificado uma estrutura de uma notação de JavaScript Object Notation (JSON). Foi feita a tentativa de manipular os dados para validar o comportamento da aplicação. Em nossa exploração, foi alterado o valor do objeto ID de “1” para “teste”.

Figura 7: Alteração do valor no JSON obtido

Após isso, foi inserido o payload ao cabeçalho “Bearer”.

Figura 8: Mensagem de erro na resposta da requisição realizada à aplicação

Após alterar os valores e inserir o conteúdo no cabeçalho, recebemos uma mensagem de erro de deserialização.

Deduzimos então que o endpoint estaria vulnerável a falha classificada pelo OWASP como “Insecure Deserialization”. Para explorar a vulnerabilidade, utilizamos a ferramenta “ysoserial.net”.

Em um Windows 10, foi feito o build da ferramenta para gerar o executável.

Figura 9: Build da Ferramenta ysoserial

Sabendo que nossa máquina local é acessível pela máquina alvo, pois estão na mesma rede, iniciamos um servidor HTTP em nossa máquina local expondo nosso executável malicioso, e por meio do “ysoserial.exe”, fizemos com que a máquina alvo baixasse o executável em nosso servidor HTTP, através do Powershell.

Figura 11: Criação do payload malicioso responsável por estabelecer conexão reversa com a nossa máquina

Com o payload estruturado e já encodado em base64 bastou inserir o mesmo no cabeçalho “Bearer” da requisição HTTP e aguardar a requisição da máquina alvo ao nosso servidor HTTP.

Figura 12: Evidência de comprometimento do alvo, requisição ao servidor HTTP bem sucedida

Ao inserir o payload no cabeçalho “Bearer” obtemos um erro na resposta do servidor, entretanto, nosso servidor HTTP recebeu a requisição e foi possível validar que o alvo obteve o nosso executável malicioso.

A partir desse procedimento, foi possível inserir o nosso executável responsável por prover a nossa shell com meterpreter. Depois foi gerado um novo payload com o auxílio do ysoserial.exe que fora o responsável por executar o nosso exe e estabelecer a nossa shell com meterpreter.

Figura 13: Geração do payload responsável por executar nosso arquivo malicioso

Com a conexão reversa obtida com os procedimentos mencionados até aqui, bastou acessar o diretório do usuário e visualizar o conteúdo do arquivo “user.txt” para capturar a flag de user.

Figura 14: Flag de User

Diagrama

O diagrama a seguir ilustra as etapas de exploração para a obtenção da flag de usuário, através da exposição do payload na máquina local e download e execução da mesma por parte do servidor alvo.

Figura 15: Diagrama de Exploração

Pós-Exploração (PrivEsc)
Durante a enumeração realizada na máquina alvo, foi identificado um arquivo XML contendo o HASH e o SALT de um usuário administrativo.

Figura 16: Exposição de Dados Sensíveis

Além disso, neste arquivo também foi possível verificar a existência de um serviço rodando na porta “14147” demarcada como “Admin port”.

Decidimos direcionar a nossa exploração a essa porta com o intuito de validar o serviço em uso.

Figura 17: Output do comando “netstat

Com o utilitário do netstat foi possível identificar que a porta está em uso, no entanto, acessível somente para o localhost. Tentamos acessar o recurso utilizando o FTP mas não seria possível especificar a porta 14147, somente a porta padrão (21).

Figura 18: Output FTP

Para resolver esse problema, utilizamos a nossa sessão Meterpreter para realizar um encaminhamento de portas à partir da porta 14147. Desta forma, podemos expor o serviço em questão para a nossa máquina e realizar o acesso externo.

Figura 19: Módulo do Meterpreter “portfwd”

Com o encaminhamento de portas configurado, foi utilizado o software Filezilla Server em nossa máquina Windows para acessar a porta 14147 da máquina comprometida, inicialmente acessível somente pelo localhost da máquina alvo.

Figura 20: Autenticação via FTP

Após obter acesso ao serviço, foi criado um usuário e concedido permissão de acesso ao diretório do Windows “C:\

Figura 21: Criação de usuário com permissões de acesso administrativo

Após ter criado o usuário e utilizado o mesmo para autenticação no serviço, foi possível obter o arquivo “root.txt”.

Figura 21: Autenticação com o novo usuário administrador ao FTP

Navegando nos diretórios, foi encontrado a flag presente na área de trabalho do usuário “superadmin”.

Figura 22: Obtendo o arquivo root.txt através do acesso FTP

Ao baixar o arquivo e visualizar seu conteúdo, completamos a máquina com sucesso.

Figura 23: Flag de Root

--

--