Apimentando a Fase de Recon Web
Apimentando a Fase de Recon Web
Neste artigo iremos abordar algumas das técnicas que utilizo no meu dia-a-dia durante as fases de Recon. Como sabemos, o mundo de hacking é vasto e cada um no final desenvolve o seu próprio modo de sobrevivência, então as ferramentas que apresentarei aqui serão apenas exemplos. Brinquem com suas mentes, brinquem com as tools e abusem do open source ?
Introdução
Em resumo, a fase de Recon se baseia em extrair o máximo de informações possíveis do nosso alvo, tanto de forma ativa quanto passiva, abrindo para o atacante um leque maior de opções para testar, como subdomínios, diretórios, endpoints, serviços etc.
Por ser um procedimento feito antes da exploração das vulnerabilidades em si, muitos pentesters acabam por ignorá-la, tanto por causa da ansiedade em “achar uma vulnerabilidade o mais rápido possível”, quanto pela preguiça de executar algo que possa demorar até horas/dias dependendo do escopo explorado. Porém, por causa disso muitos pentesters acabam deixando diversas vulnerabilidades de lado por onde passam, então lembre-se: não é porque alguém já passou por ali que você não achará nada, às vezes a pessoa apenas esqueceu de olhar debaixo do tapete.
O artigo abordará de forma breve as técnicas, pois o intuito aqui não é viciar o leitor em uma ferramenta, nem torná-lo mestre, e sim apresentar algumas técnicas de Recon que ainda são ignoradas por muitos profissionais.
Descobrindo Subdomínios
Muito bem, começando nossa fase de Recon, a primeira coisa que faço é a enumeração dos subdomínios, porque quanto mais recursos, mais vulnerabilidades.
Existe uma gama imensa de ferramentas que nos permitem fazer a enumeração de subdomínios, algumas trabalham por meio de OSINT, outras por meio de Força Bruta e por aí vai. Portanto é bom nunca utilizarmos apenas uma ferramenta, pois os resultados podem ser diferentes.
No meu caso, gosto de utilizar no mínimo 3 ferramentas principais durante essa fase. Como disse, não vou passar parâmetros de cada uma, e sim apenas seu uso básico, porque o intuito não é esse.
As 3 ferramentas que mais utilizo são:
• Sublist3r
• Knockpy
• Amass
Sublist3r
O Sublist3r é uma tool que utiliza OSINT para pesquisar por meio de alguns mecanismos de buscas e ferramentas como Google, Bing, Yahoo, Virus Total, etc., para descobrir os subdomínios.
Uso básico:
sublist3r.py -d <domínio>
-d = domínio a ser escaneado

Knockpy
O Knockpy também utiliza consulta de ferramentas como Virus Total, além de testar transferência de zona no domínio inserido. Seu principal meio de busca de subdomínios é através de força bruta utilizando uma lista de palavras-chave para subdomínios (a lista pode ser modificada).
Uso básico:
knockpy.py -c <domínio>
-c = cria no final um relatório em csv

Amass
(Desculpe a sinceridade, mas essa ferramenta é sensacional!)
Amass é uma tool que está no git da OWASP. Foi desenvolvida para auxiliar na fase de Recon encontrando subdomínios e afins. Ela é basicamente uma chave suíça pra Recon de subdomínios. Possui brute force, procura por APIs, Web Archives (como Wayback), certificados, consulta reversa de whois, transferências de zona e muito mais.
Uso básico:
amass enum -d <domain> -ip
-d = define o domínio
-ip = mostra o endereço de IP dos domínios descobertos

Filtrando os hosts encontrados
Com os subdomínios em mãos fica a dúvida no ar: qual iremos atacar primeiro?
Para responder essa dúvida, precisaremos de um overview de tudo que pegamos até aqui de uma forma mais legível. Antes de escolher um alvo, é preciso verificar qual dos subdomínios estão respondendo com HTTP/HTTPS, quais são páginas de login, quais estão respondendo com 403 e afins. Para isso, temos ferramentas próprias que fazem essas análises, porque convenhamos: fazer isso manualmente não seria tão rápido assim.
Duas ferramentas muito conhecidas e utilizadas são o HTTProbe e o Aquatone. Irei demonstrar seus usos básicos, porém estas ferramentas são muito interessantes para serem utilizadas como parte de algum script de Recon caso queira desenvolver no futuro, então explore bem seus códigos. São muito utilizadas em frameworks já conhecidos, como LazyRecon e Sn1per.
Aquatone
O HTTProbe e o Aquatone possuem usos e intuitos bem semelhantes, então irei abordar apenas um deles. Para seu uso, é necessário juntar todos os subdomínios descobertos em um único arquivo. Para isso sinta-se à vontade para fazer na mão, criar um script para parsing dos resultados ou fazer por regex. Existem diversas formas de juntar essas informações, abusem de seus conhecimentos.
O Aquatone é uma tool para analisar uma grande quantidade de hosts e fornecer um relatório no final em uma forma mais legível, dando um overview básico dos headers, front-end do site, resposta HTTP etc.
Lembre-se de instalar o Chrome ou Chromium na sua máquina caso ainda não possua. São os navegadores padrões que o Aquatone utiliza.
Uso básico:
cat url.txt | aquatone -chrome-path /path/to/chromeapp/Chrome -out ./Report/
url.txt = arquivo com os subdomínios
-chrome-path = seta a pasta onde o chrome está instalado
– out = local para armazenar os arquivos do relatório final

O relatório ficaria semelhante à figura abaixo:

Selecionando o Alvo
Agora que já possuímos um overview de todos os hosts vivos e respondendo nas portas escolhidas, podemos selecionar qual subdomínio será mais apropriado para começarmos nossos testes. A escolha claro é por conta do Pentester e do que ele pretende explorar, mas lembre-se de procurar pelos seguintes pontos:
- A página é estática ou dinâmica?
- É possível fazer subdomain takeover?
- Possui algum parâmetro? Ele está refletindo ou sendo armazenado na página?
- É possível encontrar algum bucket S3 ou ver algum xml que esteja informando a localização desse bucket?
- Algum dos sites estão retornando erros não tratados?
- Existe autenticação via OAuth? É possível dar bypass?
E por aí vai.
Crawling
Como o foco deste artigo é apenas a parte de web, não irei abordar outros serviços e afins. Como comentei, hacking é um mundo e cada metodologia é mais um outro mundo.
O Crawling em resumo é analisar o código do site, com o intuito de buscar informações, diretórios e endpoints para aumentar ainda mais nosso repertório de conhecimento do alvo. Existem algumas ferramentas que nos permitem executar essa técnica em busca de diretórios e roda de forma recursiva (em várias camadas) dependendo de como você configurá-lo.
Para o crawling eu particularmente prefiro utilizar o BurpSuite. A ferramenta possui uma versão community, portanto caso não possua a versão paga, não se preocupe, porque o crawling está incluso de qualquer forma.
Não irei abordar sobre o burp, apenas mostrar o crawling de forma resumida. Caso queira saber mais detalhes da ferramenta, acesse https://portswigger.net/burp (temos um artigo sobre BurpSuite, já leu? Acesse ele aqui)
Para utilizá-lo:
- Intercepte a requisição
- Clique com o botão direito > Scan
- Selecione a opção de crawling (para versões mais antigas, Spider)
- Faça as devidas configurações e clique em run
Desta forma, a ferramenta irá mapear o site inteiro de forma recursiva. Por padrão, ele executa o crawling em até 8 camadas. Os resultados estarão presentes na aba “Target” do Burp.

Google Hacking
O Google Hacking é uma técnica para fazer pesquisas utilizando queries especiais aceitas pelo google, possibilitando o usuário filtrar por uma pesquisa mais específica. Com isso, podemos, por exemplo, filtrar por extensões, subdomínios e outros conteúdos que estejam disponíveis no google sobre nosso alvo.
Algumas queries são montadas com palavras específicas que possibilitam filtrar por arquivos padrões que possuam vulnerabilidades conhecidas, etc. Essa string chamamos de dorks. Muitas delas são armazenadas no GHDB (Google Hacking Database), para simplificar nossas consultas: https://www.exploit-db.com/google-hacking-database
Porém, já estamos com o alvo selecionado, então é preciso começar com buscas mais amplas e assim ir filtrando cada vez mais dependendo do seu alvo. Existem subdomínios que irão nos retornar milhares de páginas no google se procurarmos por ele, e existem outros que vão nos retornar no máximo duas respostas, então é sempre aconselhável começar a pesquisa por uma busca mais ampla.
Para isso:
site:subdominio.example.com
Dessa forma filtramos todos os resultados referentes a este subdomínio.
Caso a resposta seja muito grande, pode-se ir brincando mais com cada query para criar combinações favoráveis para você, como por exemplo filtrar por mais subdomínios ou filtrar por endpoints.
site:example.com -www (procura por domínios que não contenham www)
site:subdominio.example.com ext:php (procura por endpoints php)
Brute Force em Diretórios
Muitos desenvolvedores acabam deixando nomes comuns em alguns arquivos por padrão para facilitar tanto eles quanto os usuários que acessarem o site. É muito mais fácil acessar um /admin do que um /portaldoadministradorcomnomedificil, não é mesmo?
Está aí o problema. Algumas vezes esses arquivos podem não estar presentes no código fonte ou coisa do tipo, mas são facilmente encontrados através de brute force nesses diretórios. O Brute force permite nada mais do que você mandar uma série de requisições, cada uma tentando consultar um arquivo diferente da sua lista de arquivos. A hora que a consulta responder com um 302 ou 200, o arquivo está lá.
Para isso, podemos utilizar algumas ferramentas. Eu particularmente utilizo ou Intruder do BurpSuite ou o dirsearch. Por ser um artigo “bem-vindo à todos”, iremos focar nas tools open source.
Dirsearch
O Dirsearch é uma ferramenta que permite fazer o brute force em um diretório web.
Seu uso básico é:
dirsearch.py -u http://example.com/ -w wordlist.txt -e * -t <threads> -r
-u = define a url a ser testada
-w = wordlist com os arquivos/diretórios para tentar achar
-e = extensões
-t = threads (em números)
-r = ativa o modo recursivo

Procurando por Caches
Ta aí o segredo da questão. Parabéns se você chegou até aqui, porque essa é a parte que vai te dar o grande “diferencial”. Pode parecer que não, mas uma maioria esmagadora dos pentesters não dão bola para parte de caches, a qual eu particularmente julgo como uma das mais importantes.
Consultas por caches antigos do site na internet podem trazer parâmetros e endpoints ainda ativos que não podem ser mapeados nem com crawling, nem google hacking e nem brute force. Além disso, os caches podem permitir também bypassar páginas 403, nas quais não possuía conhecimento do que poderia ter depois de determinado diretório, então abuse destas ferramentas!
Para fazer a consulta por caches antigos da página, uma opção útil é acessar https://archive.org e utilizar o Wayback Machine. Porém, temos uma ferramenta que ela pega as respostas do Wayback Machine e já nos retorna na tela as urls capturadas do site. Dessa forma, é possível localizar até mesmo parâmetros antigos que talvez algum dev tenha deixado passar. Lembre-se: quanto mais longe você vai, maior a chance de alguém ter deixado isso pra trás.
Utilizando o WaybackURL
O WaybackURL é a ferramenta anteriormente citada capaz de pegar os resultados do Wayback Machine e nos mostrar na tela.
Uso básico:
cat dominios.txt | waybackurls
dominios.txt = dominios para serem procurados

Com todas as URLs capturadas, jogue-as em um txt e aplique os filtros para pegar apenas o necessário para você. Utilize regex, filtros do linux, scripts ou o que forem melhor. Feito isso, pegue os diretórios/endpoints encontrados e jogue no dirsearch como wordlist, para validar também se o mesmo ainda está funcionando.
OTXUrls
Outra ferramenta útil como bônus é o otxurls. Ele é semelhante ao waybackurls, porém sua fonte de captura é o AlienVault. Ele consulta a ferramenta em buscas de info do host escolhido.
Para utilizá-lo:
otxurls example.com

Analisando JS
Por fim, para finalizar o Recon básico, podemos também analisar os arquivos JS encontrados no site. Eles podem conter informações e outros endpoints. Temos algumas ferramentas que fazem o Passing automático dos JS encontrados. Procure utilizá-las no final de todas as informações capturadas nas outras técnicas, para garantir que a maioria dos JS serão analisados.
Algumas ferramentas interessantes são Linkfinder e JSParser. Neste artigo irei apresentar apenas o Linkfinder, porém ambas possuem o mesmo conceito.
Linkfinder
Descobre parâmetros e endpoints por meio de parsing dos JS da página.
Uso básico:
linkfinder.py -i <domain> -d

Conclusão
Muito bem meus queridos, espero que tenham saído daqui com algum conhecimento a mais. Como disse, isso é apenas um overview de alguns pontos de Recon que achei importante ressaltar por ver que muitas vezes são deixados de lado pela pressa e ansiedade. O mundo de hacking é gigantesco e o de Recon também. Se fôssemos escrever tudo, ficaríamos anos aqui até chegar na conclusão que ainda precisaríamos estudar mais, porque essa é a realidade que nós de Red Team vivemos.
Então agradeço pela leitura e espero ter ajudado vocês em algum pontinho por aí, agora acalmem o coraçãozinho, invistam em ir mais longe do que os outros já foram e partiu hackear ?
Caso desconheça algum termo ou queira saber mais detalhadamente sobre alguma ferramenta, fique a vontade para entrar em contato comigo: henrique.scocco@redbelt.com.br
Segue uma referência muito boa utilizada pelos hackers, caso queira saber mais sobre as tools utilizadas ou termos desconhecidos: www.google.com
Referências
https://github.com/aboul3la/Sublist3r
https://github.com/guelfoweb/knock
https://github.com/OWASP/Amass
https://github.com/tomnomnom/httprobe
https://github.com/michenriksen/aquatone
https://portswigger.net/burp
https://www.google.com/
https://github.com/maurosoria/dirsearch
https://github.com/tomnomnom/waybackurls
https://github.com/lc/otxurls
https://github.com/GerbenJavado/LinkFinder