Skip to content
Z3tra

Lab

Where I break things

Not a homelab tour. The point is that testing happens somewhere isolated, on purpose, with the reasoning written down.

Everything I test runs here, on hardware I own, on a network that cannot reach anything that matters. That is not paranoia — it is the difference between practising and causing an incident.

The design goal is disposability. Any machine in here can be destroyed and rebuilt without losing anything, because nothing of value lives in the lab. If a target escapes its box, it lands somewhere with no credentials, no route out and nothing to pivot into.

Network

Three segments, one rule

Nothing in the target segment can reach anything that matters. That is enforced at the network, not by remembering to be careful.

Management

10.10.0.0/24

Hypervisor, storage and the machine I actually work from. Reachable from the LAN, reachable by nothing in the lab.

Full outbound, no inbound from lab segments

Attack

10.10.10.0/24

Where the tooling lives. Can reach the target segment and the internet — some tooling genuinely needs updates and wordlists.

Outbound allowed, reaches targets

Targets

10.10.20.0/24

Deliberately vulnerable machines and applications. Assume every host here is compromised, because that is the point of them.

No outbound. No route to management. Nothing.

Machines

What runs where

Hypervisor

Virtualisation host

Linux

Runs everything. Snapshots before each session so a target can be reverted in seconds instead of rebuilt in an hour.

Management

Attack box

Testing workstation

Kali Linux

Where the tooling lives. Rebuilt from a base snapshot regularly, because a tooling VM accumulates state that quietly changes results.

Attack

Web targets

Vulnerable applications

Linux + Docker

Deliberately vulnerable web applications in containers — a fresh instance per exercise so findings are never contaminated by the last one.

Targets

Windows target

Domain practice

Windows Server

A small Active Directory setup for practising the parts of the OSCP that are not web.

Targets

Development

Application development

Linux

Where Hackuten, Orbyte and Batelys actually get built and staged before anything reaches production.

Management

Tooling

Containers and scripts

Containerised targets

OWASP Juice Shop

The reference vulnerable application. Good for calibrating, less good once you know it.

DVWA

Blunt and useful for isolating one vulnerability class at a time.

Custom targets

Applications I write specifically to contain one bug, to check I can find it from the outside.

Local registry

Images cached locally so the target segment never needs outbound access.

Scripts

lab-up / lab-down

Bash

Brings the target segment up and tears it down. Nothing in the lab runs when I am not using it — idle vulnerable services are just risk.

snapshot-revert

Bash

Reverts every target to its clean snapshot. Run before each session, so results are never inherited from the last one.

recon

Python

Wraps the enumeration I run every time — scans, service detection, content discovery — into one command with consistent output.

notes

Python

Scaffolds a note file per target with the methodology checklist pre-filled. Reduces the friction that makes people skip documentation.

Principles

Why it is built this way

Isolated by default

The target segment has no route to anything I care about and no outbound access. Isolation is enforced at the network, not by remembering to be careful.

Disposable, always

Every machine can be destroyed and rebuilt from a snapshot. Nothing irreplaceable lives in the lab, which means nothing in the lab needs protecting.

Reproducible

Targets are defined as configuration, not hand-configured. A finding I cannot reproduce from a clean state is a finding I do not trust.

Off when unused

The lab is not running right now. Deliberately vulnerable services with an uptime counter are a liability, not a portfolio.