Enumeração
-sC
e -sV
para ativar a execução de scripts padrão e a detecção de versões. O resultado inicial mostra apenas a porta 80 aberta, executando o serviço nginx na versão 1.14.2. Até aqui, tudo parece simples. No entanto, logo abaixo no output, notamos que o campo http-title
retorna a mensagem “Did not follow redirect to http://ignition.htb“. Por enquanto, guarde essa URL em mente.Após uma rápida pesquisa no Google sobre o erro, descobrimos que ele pode ter duas causas principais:
- Digitamos incorretamente o endereço ignition.htb na barra de busca do navegador, e os servidores DNS não conseguem encontrar o endereço IP associado ao nome digitado errado.
- Não inserimos nenhum hostname, como ignition.htb, na barra de busca, mas o site espera que isso seja feito.
Como sabemos que não digitamos nenhum hostname na barra de busca, iremos explorar apenas a segunda possibilidade. Essa opção está relacionada a um problema conhecido como name-based VHosting (ou Virtual Hosting). De acordo com o artigo da Wikipédia sobre Virtual Hosting, temos as seguintes informações:
O Virtual Hosting é um método de hospedagem que permite múltiplos nomes de domínio (com o tratamento separado para cada nome) em um único servidor (ou grupo de servidores). Isso permite que um servidor compartilhe seus recursos, como memória e ciclos de processador, sem a necessidade de todos os serviços utilizarem o mesmo nome de host. O termo virtual hosting é geralmente associado a servidores web, mas os princípios também se aplicam a outros serviços da Internet.
[…]
Uma pré-condição técnica necessária para name-based virtual hosts é um navegador web com suporte ao HTTP/1.1 (algo comum atualmente), que inclui o nome de host no cabeçalho da requisição. Isso permite que um servidor que hospeda múltiplos sites sob um único endereço IP entregue o conteúdo correto de cada site. Mais especificamente, significa configurar o cabeçalho Host no HTTP, que é obrigatório no HTTP/1.1.
[…]
Além disso, se o Sistema de Nomes de Domínio (DNS) não estiver funcionando corretamente, pode ser difícil acessar um site hospedado virtualmente, mesmo se o endereço IP for conhecido. Se o usuário tentar acessar usando o endereço IP diretamente, como em http://10.23.45.67/, o navegador enviará o endereço IP como o nome do host. Como o servidor web depende que o cliente informe qual nome de servidor (vhost) utilizar, ele responderá com o site padrão, muitas vezes não o site esperado pelo usuário.
Uma solução alternativa nesse caso é adicionar o endereço IP e o nome do host ao arquivo de hosts do sistema cliente. Dessa forma, acessar o servidor pelo nome de domínio deve funcionar novamente.
Em resumo, múltiplos sites podem compartilhar o mesmo endereço IP, permitindo que os usuários os acessem separadamente ao visitar os nomes de host específicos de cada site, em vez do endereço IP do servidor de hospedagem. O servidor web ao qual estamos fazendo requisições está nos retornando um erro porque não especificamos um nome de host específico entre os que podem ser hospedados nesse mesmo endereço IP de destino. A partir disso, poderíamos pensar que simplesmente inserir ignition.htb em vez do endereço IP na barra de pesquisa resolveria o problema, mas, infelizmente, não é o caso. Ao inserir um nome de host em vez de um endereço IP como destino da requisição, há um intermediário envolvido que você talvez não conheça.
O Sistema de Nomes de Domínio (DNS) é um sistema hierárquico e descentralizado de nomes para computadores, serviços ou outros recursos conectados à Internet ou a uma rede privada. Ele associa diversas informações aos nomes de domínio atribuídos a cada uma das entidades participantes. De forma mais destacada, o DNS traduz nomes de domínio, que são mais fáceis de memorizar, para os endereços IP numéricos necessários para localizar e identificar serviços e dispositivos de computadores nos protocolos de rede subjacentes. Ao fornecer um serviço de diretório distribuído mundialmente, o Sistema de Nomes de Domínio tem sido um componente essencial da funcionalidade da Internet desde 1985.
Como o DNS está envolvido na tradução dos nomes de host para o único endereço IP disponível no lado do servidor, isso pode se tornar um problema quando o alvo está isolado, como no nosso caso. Para resolver isso, podemos editar o nosso próprio arquivo de hosts local, que inclui correlações entre nomes de host e endereços IP, para compensar a falta de um servidor DNS que faça isso por nós.
Até lá, precisamos primeiro confirmar se nossa suposição está correta. Para obter uma visão mais precisa das requisições e respostas sendo feitas e confirmar nossa suspeita, usaremos uma ferramenta popular e fácil de usar chamada cURL. Essa ferramenta nos permitirá manipular requisições HTTP feitas a um servidor e receber as respostas diretamente no terminal, sem que essas respostas sejam interpretadas pelo navegador como mensagens de erro genéricas, como no exemplo acima.
O cURL já vem pré-instalado na maioria dos sistemas operacionais Linux. Para ver suas funcionalidades, digite curl -h
no terminal.
Ao analisar as opções do menu de ajuda, decidimos simplesmente tornar a saída mais detalhada, a fim de aprender o máximo possível sobre as respostas do alvo. Podemos alcançar isso aumentando a verbosidade da saída do script.
-v
: Torna a operação mais “falante”. Saídas mais detalhadas serão exibidas durante a execução.
Como observado na captura de tela acima, nossa requisição contém um campo Host com o endereço IP do alvo em vez do nome do host. A resposta 302 Found, juntamente com o cabeçalho Location, indica que o recurso solicitado ( / ) foi (temporariamente) movido para http://ignition.htb/. Isso confirma que nossas suposições estavam corretas.
Para resolver o problema que estamos enfrentando, vamos modificar nosso arquivo local de DNS, chamado hosts, localizado no diretório /etc. O primeiro comando ilustrado abaixo tem como objetivo inserir o endereço IP do alvo com o nome de host associado na tabela de hosts, o que permitirá que seu cliente web acesse o site que anteriormente estava apresentando erro.
O segundo comando tem a função de verificar sua entrada anterior. Ler o arquivo /etc/hosts do seu sistema Linux deve retornar uma entrada para ignition.htb com o endereço IP associado ao alvo.
Foothold
Após explorar a página de entrada por um curto período, podemos deduzir que não há nada útil que possa ser aproveitado aqui. A única opção para explorar o site mais a fundo é utilizando o gobuster.
gobuster dir –url http://ignition.htb/ –wordlist /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt