Abusando de Cloudflare Workers como pass-through proxies (IP rotation, FireProx-style)
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
Cloudflare Workers podem ser implantados como pass-through proxies HTTP transparentes onde a URL alvo upstream é fornecida pelo cliente. As requisiçÔes saem da rede da Cloudflare, então o destino observa os IPs da Cloudflare em vez dos do cliente. Isso espelha a conhecida técnica FireProx no AWS API Gateway, mas usando Cloudflare Workers.
Principais capacidades
- Suporte a todos os métodos HTTP (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD)
- O target pode ser fornecido via query parameter (?url=âŠ), um header (X-Target-URL), ou atĂ© codificado no path (por exemplo, /https://target)
- Os headers e o corpo sĂŁo encaminhados via proxy com filtragem hop-by-hop/headers conforme necessĂĄrio
- As respostas sĂŁo retransmitidas de volta, preservando o cĂłdigo de status e a maioria dos headers
- Falsificação opcional do X-Forwarded-For (se o Worker defini-lo a partir de um header controlado pelo usuårio)
- Rotação extremamente rĂĄpida/fĂĄcil ao implantar mĂșltiplos endpoints do Worker e distribuir as requisiçÔes
Como funciona (fluxo)
- O cliente envia uma requisição HTTP para uma URL do Worker (
<name>.<account>.workers.devou uma rota de domĂnio customizado). - O Worker extrai o target a partir de um parĂąmetro de query (?url=âŠ), do header X-Target-URL, ou de um segmento de path se implementado.
- O Worker encaminha o método, os headers e o corpo recebidos para a URL upstream especificada (filtrando headers problemåticos).
- A resposta upstream Ă© transmitida de volta ao cliente atravĂ©s da Cloudflare; a origem vĂȘ os IPs de saĂda da Cloudflare.
Exemplo de implementação do Worker
- LĂȘ a URL alvo do query param, header ou path
- Copia um subconjunto seguro de headers e encaminha o método/corpo original
- Opcionalmente define X-Forwarded-For usando um header controlado pelo usuĂĄrio (X-My-X-Forwarded-For) ou um IP aleatĂłrio
- Adiciona CORS permissivo e lida com preflight
Exemplo de Worker (JavaScript) para pass-through proxying
```javascript /** * Minimal Worker pass-through proxy * - Target URL from ?url=, X-Target-URL, or /https://... * - Proxies method/headers/body to upstream; relays response */ addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) })async function handleRequest(request) { try { const url = new URL(request.url) const targetUrl = getTargetUrl(url, request.headers)
if (!targetUrl) { return errorJSON(âNo target URL specifiedâ, 400, { usage: { query_param: â?url=https://example.comâ, header: âX-Target-URL: https://example.comâ, path: â/https://example.comâ } }) }
let target try { target = new URL(targetUrl) } catch (e) { return errorJSON(âInvalid target URLâ, 400, { provided: targetUrl }) }
// Forward original query params except control ones const passthru = new URLSearchParams() for (const [k, v] of url.searchParams) { if (![âurlâ, â_cbâ, â_tâ].includes(k)) passthru.append(k, v) } if (passthru.toString()) target.search = passthru.toString()
// Build proxied request const proxyReq = buildProxyRequest(request, target) const upstream = await fetch(proxyReq)
return buildProxyResponse(upstream, request.method) } catch (error) { return errorJSON(âProxy request failedâ, 500, { message: error.message, timestamp: new Date().toISOString() }) } }
function getTargetUrl(url, headers) { let t = url.searchParams.get(âurlâ) || headers.get(âX-Target-URLâ) if (!t && url.pathname !== â/â) { const p = url.pathname.slice(1) if (p.startsWith(âhttpâ)) t = p } return t }
function buildProxyRequest(request, target) { const h = new Headers() const allow = [ âacceptâ,âaccept-languageâ,âaccept-encodingâ,âauthorizationâ, âcache-controlâ,âcontent-typeâ,âoriginâ,ârefererâ,âuser-agentâ ] for (const [k, v] of request.headers) { if (allow.includes(k.toLowerCase())) h.set(k, v) } h.set(âHostâ, target.hostname)
// Optional: spoof X-Forwarded-For if provided const spoof = request.headers.get(âX-My-X-Forwarded-Forâ) h.set(âX-Forwarded-Forâ, spoof || randomIP())
return new Request(target.toString(), { method: request.method, headers: h, body: [âGETâ,âHEADâ].includes(request.method) ? null : request.body }) }
function buildProxyResponse(resp, method) { const h = new Headers() for (const [k, v] of resp.headers) { if (![âcontent-encodingâ,âcontent-lengthâ,âtransfer-encodingâ].includes(k.toLowerCase())) { h.set(k, v) } } // Permissive CORS for tooling convenience h.set(âAccess-Control-Allow-Originâ, ââ) h.set(âAccess-Control-Allow-Methodsâ, âGET, POST, PUT, DELETE, OPTIONS, PATCH, HEADâ) h.set(âAccess-Control-Allow-Headersâ, ââ)
if (method === âOPTIONSâ) return new Response(null, { status: 204, headers: h }) return new Response(resp.body, { status: resp.status, statusText: resp.statusText, headers: h }) }
function errorJSON(msg, status=400, extra={}) { return new Response(JSON.stringify({ error: msg, âŠextra }), { status, headers: { âContent-Typeâ: âapplication/jsonâ } }) }
function randomIP() { return [1,2,3,4].map(() => Math.floor(Math.random()*255)+1).join(â.â) }
</details>
### Automatizando implantação e rotação com FlareProx
FlareProx é uma ferramenta em Python que usa a Cloudflare API para implantar vårios Worker endpoints e rotacionar entre eles. Isso fornece rotação de IP similar ao FireProx na rede da Cloudflare.
Configuração
1) Crie um Cloudflare API Token usando o template âEdit Cloudflare Workersâ e obtenha seu Account ID no painel.
2) Configure o FlareProx:
```bash
git clone https://github.com/MrTurvey/flareprox
cd flareprox
pip install -r requirements.txt
Crie o arquivo de configuração flareprox.json:
{
"cloudflare": {
"api_token": "your_cloudflare_api_token",
"account_id": "your_cloudflare_account_id"
}
}
Uso do CLI
- Criar N Worker proxies:
python3 flareprox.py create --count 2
- Listar endpoints:
python3 flareprox.py list
- Endpoints de verificação de integridade:
python3 flareprox.py test
- Excluir todos os endpoints:
python3 flareprox.py cleanup
Roteamento de tråfego através de um Worker
- Formato por parĂąmetro de query:
curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip"
- Formato do cabeçalho:
curl -H "X-Target-URL: https://httpbin.org/ip" https://your-worker.account.workers.dev
- Formato do caminho (se implementado):
curl https://your-worker.account.workers.dev/https://httpbin.org/ip
- Exemplos de métodos:
# GET
curl "https://your-worker.account.workers.dev?url=https://httpbin.org/get"
# POST (form)
curl -X POST -d "username=admin" \
"https://your-worker.account.workers.dev?url=https://httpbin.org/post"
# PUT (JSON)
curl -X PUT -d '{"username":"admin"}' -H "Content-Type: application/json" \
"https://your-worker.account.workers.dev?url=https://httpbin.org/put"
# DELETE
curl -X DELETE \
"https://your-worker.account.workers.dev?url=https://httpbin.org/delete"
X-Forwarded-For controle
Se o Worker respeitar X-My-X-Forwarded-For, vocĂȘ pode influenciar o valor upstream de X-Forwarded-For:
curl -H "X-My-X-Forwarded-For: 203.0.113.10" \
"https://your-worker.account.workers.dev?url=https://httpbin.org/headers"
Uso programĂĄtico
Use a biblioteca FlareProx para criar/listar/testar endpoints e rotear requisiçÔes a partir do Python.
Exemplo em Python: Enviar um POST via um endpoint Worker aleatĂłrio
```python #!/usr/bin/env python3 from flareprox import FlareProx, FlareProxError import jsonInitialize
flareprox = FlareProx(config_file=âflareprox.jsonâ) if not flareprox.is_configured: print(âFlareProx not configured. Run: python3 flareprox.py configâ) exit(1)
Ensure endpoints exist
endpoints = flareprox.sync_endpoints() if not endpoints: print(âCreating proxy endpointsâŠâ) flareprox.create_proxies(count=2)
Make a POST request through a random endpoint
try: post_data = json.dumps({ âusernameâ: âtestuserâ, âmessageâ: âHello from FlareProx!â, âtimestampâ: â2025-01-01T12:00:00Zâ })
headers = { âContent-Typeâ: âapplication/jsonâ, âUser-Agentâ: âFlareProx-Client/1.0â }
response = flareprox.redirect_request( target_url=âhttps://httpbin.org/postâ, method=âPOSTâ, headers=headers, data=post_data )
if response.status_code == 200: result = response.json() print(ââ POST successful via FlareProxâ) print(fâOrigin IP: {result.get(âoriginâ, âunknownâ)}â) print(fâPosted data: {result.get(âjsonâ, {})}â) else: print(fâRequest failed with status: {response.status_code}â)
except FlareProxError as e: print(fâFlareProx error: {e}â) except Exception as e: print(fâRequest error: {e}â)
</details>
**Integração Burp/Scanner**
- Aponte as ferramentas (por exemplo, Burp Suite) para a URL do Worker.
- Forneça o upstream real usando ?url= ou X-Target-URL.
- A semĂąntica HTTP (methods/headers/body) Ă© preservada enquanto mascara seu IP de origem atrĂĄs do Cloudflare.
**Notas operacionais e limites**
- O plano Free do Cloudflare Workers permite aproximadamente 100.000 requisiçÔes/dia por conta; use mĂșltiplos endpoints para distribuir o trĂĄfego se necessĂĄrio.
- Workers rodam na rede do Cloudflare; muitos alvos verĂŁo apenas IPs/ASN do Cloudflare, o que pode contornar listas simples de permissĂŁo/negação por IP ou heurĂsticas geogrĂĄficas.
- Use com responsabilidade e somente com autorização. Respeite o ToS e o robots.txt.
## ReferĂȘncias
- [FlareProx (Cloudflare Workers pass-through/rotation)](https://github.com/MrTurvey/flareprox)
- [Cloudflare Workers fetch() API](https://developers.cloudflare.com/workers/runtime-apis/fetch/)
- [Cloudflare Workers pricing and free tier](https://developers.cloudflare.com/workers/platform/pricing/)
- [FireProx (AWS API Gateway)](https://github.com/ustayready/fireprox)
> [!TIP]
> Aprenda e pratique Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Aprenda e pratique Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Aprenda e pratique Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Support HackTricks</summary>
>
> - Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
> - **Junte-se ao** đŹ [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositĂłrios do github.
>
> </details>
HackTricks Cloud

