hacktricks/network-services-pentesting/pentesting-web/uncovering-cloudflare.md

155 lines
12 KiB
Markdown

# Revelando CloudFlare
<details>
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Técnicas para tentar descobrir servidores web por trás do Cloudflare:
### Técnicas
* Você também pode usar algum serviço que forneça os **registros DNS históricos** do domínio. Talvez a página web esteja rodando em um endereço IP usado anteriormente.
* O mesmo pode ser alcançado **verificando certificados SSL históricos** que poderiam estar apontando para o endereço IP de origem.
* Verifique também **registros DNS de outros subdomínios apontando diretamente para IPs**, pois é possível que outros subdomínios estejam apontando para o mesmo servidor (talvez para oferecer FTP, e-mail ou qualquer outro serviço).
* Se você encontrar um **SSRF dentro da aplicação web**, você pode abusar dele para obter o endereço IP do servidor.
*
Pesquise uma string única da página web em navegadores como shodan (e talvez google e similares?). Talvez você possa encontrar um endereço IP com esse conteúdo.
* De forma semelhante, em vez de procurar por uma string única, você poderia procurar pelo ícone favicon com a ferramenta: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) ou com [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
* Isso não funcionará com muita frequência porque o servidor deve enviar a mesma resposta quando acessado pelo endereço IP, mas nunca se sabe.
### Ferramentas
* Pesquise pelo domínio em [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) ou [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). Ou use a ferramenta [CloudPeler](https://github.com/zidansec/CloudPeler) (que usa essa API)
* Pesquise pelo domínio em [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
* [**CloudFlair**](https://github.com/christophetd/CloudFlair) é uma ferramenta que irá pesquisar usando certificados do Censys que contêm o nome do domínio, depois irá procurar por IPv4s dentro desses certificados e finalmente tentará acessar a página web nesses IPs.
* [Censys](https://search.censys.io/)
* [Shodan](https://shodan.io/)
* [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history)
* Se você tem um conjunto de IPs potenciais onde a página web está localizada, você poderia usar [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder)
```bash
# You can check if the tool is working with
prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one
# If you know the company is using AWS you could use the previous tool to search the
## web page inside the EC2 IPs
DOMAIN=something.com
WIDE_REGION=us
for ir in `curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | select(.region|test("^us")) | .ip_prefix'`; do
echo "Checking $ir"
prips $ir | hakoriginfinder -h "$DOMAIN"
done
```
### Revelando Cloudflare de máquinas AWS
Para uma descrição mais detalhada deste processo, confira:
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
```bash
# Find open ports
sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt
# Format results
cat all_open.txt | sed 's,.*port \(.*\)/tcp on \(.*\),\2:\1,' | tr -d " " > all_open_formated.txt
# Search actual web pages
httpx -silent -threads 200 -l all_open_formated.txt -random-agent -follow-redirects -json -no-color -o webs.json
# Format web results and remove eternal redirects
cat webs.json | jq -r "select((.failed==false) and (.chain_status_codes | length) < 9) | .url" | sort -u > aws_webs.json
# Search via Host header
httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.com -threads 250 -random-agent -follow-redirects -o web_checks.json
```
## Bypassing Cloudflare através do Cloudflare
### Authenticated Origin Pulls
Este mecanismo depende de [**certificados SSL**](https://socradar.io/how-to-monitor-your-ssl-certificates-expiration-easily-and-why/) **do cliente para autenticar conexões** entre os servidores de **reverse-proxy do Cloudflare** e o servidor de **origem**, o que é chamado de **mTLS**.
Em vez de configurar seu próprio certificado, o cliente pode simplesmente usar o certificado do Cloudflare para permitir qualquer conexão do Cloudflare, **independentemente do tenant**.
{% hint style="danger" %}
Portanto, um atacante poderia simplesmente configurar um **domínio no Cloudflare usando o certificado do Cloudflare e apontá-lo** para o endereço **IP do domínio vítima**. Dessa forma, configurando seu domínio completamente desprotegido, o Cloudflare não protegerá as requisições enviadas.
{% endhint %}
Mais informações [**aqui**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
### Allowlist de Endereços IP do Cloudflare
Isso irá **rejeitar conexões que não se originam dos** intervalos de IP do Cloudflare. Isso também é vulnerável à configuração anterior, onde um atacante simplesmente **aponta seu próprio domínio no Cloudflare** para o endereço **IP da vítima** e o ataca.
Mais informações [**aqui**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
## Bypass Cloudflare para scraping
### Cache
Às vezes, você só quer contornar o Cloudflare para fazer scraping da página web. Existem algumas opções para isso:
* Use o cache do Google: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog`
* Use outros serviços de cache, como [https://archive.org/web/](https://archive.org/web/)
### Cloudflare Solvers
Foram desenvolvidos vários solucionadores do Cloudflare:
* [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr)
* [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [Guia aqui](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/)
* [cloudflare-scrape](https://github.com/Anorov/cloudflare-scrape)
* [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
* [Cloudflare-IUAM-Solver](https://github.com/ninja-beans/cloudflare-iuam-solver)
* [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Arquivado]
* [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
### Navegadores Headless Fortificados <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
A outra opção é fazer todo o trabalho de scraping com um navegador headless que foi fortificado para parecer com o navegador de um usuário real:
* **Puppeteer:** O [plugin stealth](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) para [puppeteer](https://github.com/puppeteer/puppeteer).
* **Playwright:** O [plugin stealth](https://www.npmjs.com/package/playwright-stealth) chegará ao Playwright em breve. Acompanhe os desenvolvimentos [aqui](https://github.com/berstend/puppeteer-extra/issues/454) e [aqui](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra).
* **Selenium:** O [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) é um patch otimizado do Selenium Chromedriver.
### Smart Proxy com Bypass Integrado do Cloudflare <a href="#option-5-smart-proxy-with-cloudflare-built-in-bypass" id="option-5-smart-proxy-with-cloudflare-built-in-bypass"></a>
A alternativa ao uso de bypasses open source do Cloudflare é usar smart proxies que desenvolvem e mantêm seus próprios bypasses privados do Cloudflare.
Eles são tipicamente mais confiáveis, pois é mais difícil para o Cloudflare desenvolver patches para eles, e são desenvolvidos por empresas de proxy que têm motivação financeira para estar sempre um passo à frente do Cloudflare e corrigir seus bypasses no minuto em que param de funcionar.
A maioria dos provedores de smart proxy ([ScraperAPI](https://www.scraperapi.com/?fp_ref=scrapeops), [Scrapingbee](https://www.scrapingbee.com/?fpr=scrapeops), [Oxylabs](https://oxylabs.go2cloud.org/aff_c?offer_id=7&aff_id=379&url_id=32), [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb)) têm alguma forma de bypass do Cloudflare que funciona em graus variados e variam em custo.
No entanto, uma das melhores opções é usar o [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/), pois ele integra mais de 20 provedores de proxy na mesma API de proxy e encontra o provedor de proxy mais barato/melhor para seus domínios alvo.
### Engenharia Reversa da Proteção Anti-Bot do Cloudflare <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
Esta abordagem funciona (e é o que muitas soluções de smart proxy fazem), no entanto, não é para os fracos de coração.
**Vantagens:** A vantagem desta abordagem é que, se você está fazendo scraping em larga escala e não quer rodar centenas (se não milhares) de instâncias completas de navegadores headless caros. Em vez disso, você pode desenvolver o bypass do Cloudflare mais eficiente em termos de recursos possível. Um que é projetado exclusivamente para passar nos testes de JS, TLS e IP fingerprint do Cloudflare.
**Desvantagens:** As desvantagens desta abordagem é que você terá que mergulhar profundamente em um sistema anti-bot que foi feito propositalmente difícil de entender por fora, e testar diferentes técnicas para enganar seu sistema de verificação. Depois, manter este sistema à medida que o Cloudflare continua a desenvolver sua proteção anti-bot.
## Referências
* [https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/)
<details>
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga** me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
</details>