Beta

This catalog is a work in progress — I'm actively polishing it and adding new labs.

0xBugLabs

Self-hosted · Bug bounty practice

Practice on labs that behave like real targets.

Docker-based labs for bug bounty vulnerabilities and recon techniques. Toy apps, not CVE reproductions — but with real login flows, multiple objectives, and nothing about the bug telegraphed in the UI. Everything runs on your machine.

labs
5
categories
5
objectives
10

Catalog

The labs

see all →
EasyRecon / OSINT

Acme Attack Surface — mapping what's actually reachable

Acme Corp's public marketing site, exactly as it ships. No login form to attack, no input field to fuzz — just a website, and the question of what else is sitting around it that nobody meant to leave reachable.

2 objectivesNode.js, Express, Docker Compose (2 services)
EasyAccess Control / IDOR

Acme HelpDesk — ticket access control

A small internal support-ticket portal for Acme Corp customers. You're given a low-privilege customer account — everything else you find is yours to discover, the same way you'd approach an in-scope target with a test account on a real program.

2 objectivesNode.js, Express, EJS
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.

2 objectivesNode.js, Express, Docker Compose (2 services)
MediumAuth

Meridian — two ways to break authentication

A small banking-style customer portal with two unrelated authentication bugs — one in how password resets are proven, one in how sessions are verified. Neither depends on the other.

2 objectivesNode.js, Express, EJS, custom JWT
MediumXSS

NoteShare — from reflected XSS to admin takeover

A shared-notes app with a real support workflow: report a broken link and a support bot reviews it in a real browser, logged in as an admin. What you do with that is up to you.

2 objectivesNode.js, Express, EJS, Puppeteer

How it works

One folder, one Docker Compose stack

Nothing leaves your machine

This site is only the catalog, deployed once as a static build. Every lab is a container you run and destroy locally — never exposed, never shared.

Multiple objectives, one flag each

Real targets rarely have just one bug. A lab can chain a low-privilege find into something bigger, closer to how an actual engagement goes.

Content lives in the repo

Each lab is a folder with a lab.yaml the catalog reads at build time. No database, no admin panel — the change history is the git history.