← All labsssrfinternal-network-pivotdenylist-bypasscloud-metadata-style View lab source →Solution walkthrough (spoilers) →
MediumSSRF
LinkPreview — pivoting into the internal network
A link-unfurling feature — paste a URL, get a snippet back, the same category of feature that generates most real-world SSRF reports. Behind it sits a small internal network you were never given direct access to.
Node.jsExpressDocker Compose (2 services)
Run it locally
git clone https://github.com/G3kSec/0xBugLabs.git
cd 0xBugLabs/labs/ssrf/linkpreview-internal-pivot
docker compose up -dThe app is at http://localhost:8082. Tear down with docker compose down.
Objectives (2)
- 01
Reach a service that isn't exposed to you at all
There's more than one container in this lab. One of them has no published port — nothing you can curl directly. Find a way to make the app you *do* have access to fetch it on your behalf.
▸Hints (2) — stuck? optional, no spoilers
- 1.The preview feature fetches a URL server-side. What happens if you point it at the app itself, or at 127.0.0.1?
- 2.The denylist blocks the obvious self-referential hosts. Docker Compose service names also resolve as hostnames — is there a page that lists them?
- 02
Find what that internal service doesn't advertise
Reaching the internal service once isn't the finish line. It has more than one route, and only one of them is the obvious one.
▸Hints (2) — stuck? optional, no spoilers
- 1.An internal-only service rarely has just one route, and `/` is rarely the interesting one.
- 2.Try common internal-tooling paths — something like `/internal/...` or `/config`.