Misbruik van Cloudflare Workers as pass-through proxies (IP-rotasie, FireProx-style)
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Cloudflare Workers kan gedeploy word as deursigtige HTTP pass-through proxies waar die upstream target URL deur die kliĂ«nt verskaf word. Versoeke verlaat Cloudflare se netwerk, sodat die teiken Cloudflare IPâs sien in plaas van die kliĂ«nt se IP. Dit weerspieĂ«l die goed-bekende FireProx-tegniek op AWS API Gateway, maar gebruik Cloudflare Workers.
Belangrike vermoëns
- Support vir alle HTTP methods (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD)
- Target kan verskaf word via ân query-parameter (?url=âŠ), ân header (X-Target-URL), of selfs gekodeer in die path (bv. /https://target)
- Headers en body word deur die proxy deurgegee met hop-by-hop/header filtering soos nodig
- Responses word terugge-relay, met behoue status code en meeste headers
- Opsionele spoofing van X-Forwarded-For (indien die Worker dit stel vanaf ân gebruiker-beheerde header)
- Uiters vinnige/eenvoudige rotasie deur verskeie Worker endpoints te ontplooi en versoeke te versprei
Hoe dit werk (flow)
- KliĂ«nt stuur ân HTTP-versoek na ân Worker URL (
<name>.<account>.workers.devof ân custom domain route). - Worker haal die target uit Ăłf ân query-parameter (?url=âŠ), die X-Target-URL header, of ân path-segment indien geĂŻmplementeer.
- Worker stuur die inkomende method, headers, en body na die gespesifiseerde upstream URL (filtreer problematiese headers).
- Upstream response word teruggestroom na die kliĂ«nt deur Cloudflare; die oorsprong sien Cloudflare se uitgaande IPâs.
###Â Worker implementation example
- Lees target URL vanaf query param, header, of path
- Kopieer ân veilige substel van headers en stuur die oorspronklike method/body voort
- Opsioneel stel X-Forwarded-For deur ân deur-gebruiker-beheerde header (X-My-X-Forwarded-For) of ân ewekansige IP te gebruik
- Voeg permissiewe CORS by en hanteer preflight
Voorbeeld Worker (JavaScript) vir 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>
### Automatiseer ontplooiing en rotasie met FlareProx
FlareProx is 'n Python-instrument wat die Cloudflare API gebruik om baie Worker endpoints te ontplooi en oor hulle te roteer. Dit bied FireProx-like IP rotation vanaf Cloudflare se netwerk.
Opstelling
1) Skep 'n Cloudflare API Token met behulp van die âEdit Cloudflare Workersâ template en kry jou Account ID vanaf die dashboard.
2) Konfigureer FlareProx:
```bash
git clone https://github.com/MrTurvey/flareprox
cd flareprox
pip install -r requirements.txt
Skep die konfigurasielĂȘer flareprox.json:
{
"cloudflare": {
"api_token": "your_cloudflare_api_token",
"account_id": "your_cloudflare_account_id"
}
}
CLI gebruik
- Skep N Worker proxies:
python3 flareprox.py create --count 2
- Lys endpoints:
python3 flareprox.py list
- Gesondheidstoets endpoints:
python3 flareprox.py test
- Verwyder alle endpoints:
python3 flareprox.py cleanup
Verkeer deur ân Worker herlei
- Vorm van navraagparameters:
curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip"
- Kopvorm:
curl -H "X-Target-URL: https://httpbin.org/ip" https://your-worker.account.workers.dev
- Padvorm (indien geĂŻmplementeer):
curl https://your-worker.account.workers.dev/https://httpbin.org/ip
- Metodevoorbeelde:
# 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 beheer
As die Worker X-My-X-Forwarded-For respekteer, kan jy die upstream X-Forwarded-For waarde beĂŻnvloed:
curl -H "X-My-X-Forwarded-For: 203.0.113.10" \
"https://your-worker.account.workers.dev?url=https://httpbin.org/headers"
Programmatiese gebruik
Gebruik die FlareProx-biblioteek om endpoints te skep/lys/toets en versoeke vanaf Python te routeer.
Python-voorbeeld: Stuur 'n POST via 'n ewekansige Worker-endpoint
```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>
**Burp/Scanner integrasie**
- Wys jou tooling (byvoorbeeld Burp Suite) na die Worker-URL.
- Verskaf die werklike upstream met ?url= of X-Target-URL.
- HTTP semantics (methods/headers/body) word behou terwyl jou bron-IP agter Cloudflare gemasker word.
**Operationele notas en perke**
- Cloudflare Workers Free plan laat ongeveer 100,000 versoeke/dag per rekening toe; gebruik verskeie endpunte om verkeer te versprei indien nodig.
- Workers hardloop op Cloudflare se netwerk; baie teikens sal slegs Cloudflare IPs/ASN sien, wat eenvoudige IP allow/deny-lyste of geo-heuristieke kan omseil.
- Gebruik dit verantwoordelik en slegs met magtiging. Respekteer ToS en robots.txt.
## Verwysings
- [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]
> Leer & oefen AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Leer & oefen GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Leer & oefen Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Ondersteun HackTricks</summary>
>
> - Kyk na die [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Sluit aan by die** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) of die [**telegram group**](https://t.me/peass) of **volg** ons op **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Deel hacking tricks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

