0xEtern4lW0lf
Hack The BoxEasyLinux

Cap

4 min de leitura
#IDOR#Linux Capabilities#cap_setuid#Python#PCAP Analysis#FTP#SSH

Introdução

Cap é uma máquina Linux do Hack The Box classificada oficialmente como Easy. A exploração começa em uma aplicação web na porta 80 que captura e disponibiliza pacotes de rede (TCP/UDP). Nela foi encontrada uma vulnerabilidade de IDOR (Insecure Direct Object Reference), que permite baixar arquivos de captura (.pcap) de outros usuários simplesmente alterando um número na URL. Um desses arquivos contém credenciais em texto claro, usadas para acessar a máquina via SSH. Para a escalação de privilégios, um binário do sistema (python3.8) possui a capability cap_setuid, o que permite obter uma shell como root. IP: 10.10.10.245 Link: https://app.hackthebox.com/machines/Cap

Escaneamento

O primeiro passo é escanear a máquina com nmap, primeiro identificando todas as portas abertas e depois rodando detecção de serviço/versão apenas nelas.

ports=$(sudo nmap --open -p- -Pn --min-rate=1000 -T4 10.10.10.245 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) && sudo nmap -Pn -sC -sV -p $ports 10.10.10.245

O nmap encontrou três portas abertas: 21 (FTP), 22 (SSH) e 80 (HTTP).

Enumeração

Porta 80

A página é uma aplicação web que monitora a rede da máquina. O painel aparece com sessão já autenticada como o usuário Nathan. Ao enumerar a página, foi encontrado um botão Download que baixa um arquivo de captura de pacotes (pcap). Analisando a requisição, foi possível identificar que a URL do download pode ser manipulada para acessar arquivos que não pertencem à sessão atual — uma clara falha de controle de acesso (IDOR).

Exploração

O aplicativo vulnerável é o painel web de monitoramento de rede na porta 80. A vulnerabilidade é um IDOR (Insecure Direct Object Reference): o endpoint /download/<id> não valida se o usuário autenticado tem permissão para acessar o arquivo referenciado pelo id, permitindo que qualquer número seja usado para baixar capturas de outras sessões. Ao clicar no botão Download, o navegador dispara uma requisição GET para /download/<id>. Explorando o IDOR, basta iterar sobre esse id para baixar todas as capturas disponíveis:

for i in {0..10}; do wget http://10.10.10.245/download/${i} -O ${i}.pcap 2>/dev/null || break; done;

Os arquivos pcap foram baixados com sucesso. Um dos arquivos pcap continha tráfego FTP em texto claro com credenciais de login:

nathan:Buck3tH4TF0RM3!

Essas credenciais funcionam tanto para FTP quanto para SSH, permitindo o acesso inicial à máquina como o usuário nathan.

Pós-exploração

Elevação de Privilégios

Rodando o linpeas na máquina, ele aponta um binário com capabilities Linux configuradas de forma insegura. Confirmando manualmente com getcap:

getcap -r /usr/bin

O resultado mostra que /usr/bin/python3.8 possui a capability cap_setuid+eip. Isso significa que o binário pode chamar setuid() para assumir qualquer UID, incluindo root, mesmo sem estar rodando com a flag SUID tradicional. Segundo o GTFOBins, essa capability em um interpretador Python é suficiente para escalar diretamente para root:

python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'

Com isso, obtemos uma shell como root e a flag final.

Anexos

  • nmap — varredura de portas e detecção de serviços.
  • wget — automação do download em massa dos arquivos pcap explorando o IDOR.
  • Wireshark / tshark — análise dos arquivos pcap em busca de credenciais em texto claro.
  • linpeas.sh — enumeração automatizada de vetores de escalação de privilégios, incluindo capabilities de binários.
  • GTFOBins — referência da técnica de abuso da capability cap_setuid no Python.

Mitigação

  • Implementar controle de acesso adequado no endpoint /download/<id>, validando no backend se o usuário autenticado é o dono do recurso solicitado (corrige o IDOR), em vez de confiar apenas em um identificador sequencial previsível.
  • Usar identificadores não sequenciais e não previsíveis (UUID) para recursos referenciados por URL.
  • Nunca transmitir credenciais em texto claro (como no FTP); substituir por protocolos com criptografia (SFTP/FTPS) e evitar armazenar capturas de tráfego com dados sensíveis acessíveis publicamente.
  • Revisar e remover capabilities desnecessárias de binários do sistema com getcap -r / periodicamente; cap_setuid nunca deveria estar presente em um interpretador de propósito geral como o Python.
  • Aplicar o princípio do menor privilégio: se o Python precisa de cap_net_bind_service para abrir portas privilegiadas, essa capability deve ser concedida isoladamente, sem cap_setuid.
  • Manter senhas fortes e únicas por serviço, evitando reuso entre FTP e SSH, o que amplia o impacto de qualquer vazamento de credenciais.