Pocket CTF Reference · Device home

Proxy Pass

An internal endpoint trusts an address normally supplied by a reverse proxy. Determine whether a direct client can supply the same trust signal.

Objective

Before you begin

Open /challenge/medium/proxy, then request the diagnostic endpoint normally.

Concepts

Headers such as X-Forwarded-For are client input unless a trusted proxy removes inbound copies and writes its own value across a controlled boundary.

Client metadata crosses a proxy boundary only after the proxy replaces inbound forwarding fields and the origin verifies its peer.

A forwarding header begins as client input. A trusted proxy removes inbound copies, writes its own assertion, and uses a controlled connection to the origin. The origin verifies that peer before interpreting the assertion; application authorization is still a separate decision.

Suggested tools

Tool practice

Rehearse the worked tool exercise before using challenge data.

Use -H with the complete quoted Name: value argument. Preserve the denied response and compare it with one changed request. The endpoint supplies the header-name clue; the challenge page supplies the address clue. Keep those two sources distinct in your notes.

Investigation

Observe

Record the header-name hint in the denied response and the expected internal address in the challenge page's deployment note.

Form a hypothesis

Does the application verify the request came through a trusted proxy, or only compare the header text?

Test carefully

Change only the evidence-backed forwarding field, send one request, and compare it with the denied baseline.

Progressive hints

Hint 1

Read the endpoint's denied JSON response.

Hint 2

It names the forwarding header.

Hint 3

Use the response evidence to choose one header value; change nothing else.

Troubleshooting and reset

Header names are case-insensitive, but values must match exactly. This module stores no state and needs no reset.