wlam@hsc-2026 : ~/ops-lab

#Ops Lab

21 live modules · Interactive
stage 01 · observe — watch the perimeter, map the range
netmon --live · perimeter firewall MONITORING
0
Packets cleared
0
Threats blocked
100%
Perimeter integrity
recon --sim · training range IDLE
ipcalc --cidr · subnet math
// network, broadcast, usable host range, wildcard mask & host count — pure bitmath in your browser, no lookups
stage 02 · extract — drop an artifact; strings, metadata, coordinates & hidden payloads come out, ready to pipe downstream
xxd + strings · drop a file NO FILE
exiftool --scan · drop an image NO FILE
geo --locate · lat/lon lookup READY
// nearest-city lookup against ~120 major world cities via the haversine formula — not a full reverse-geocoder, but enough to place a coordinate dropped in a CTF challenge or a photo's EXIF data
stego --lsb · drop a PNG NO FILE
// try each channel — a real payload usually only lives in one, and only the first N bits before it runs into image noise
qr --decode · drop an image NO FILE
// finder-pattern detection, perspective correction and Reed-Solomon error correction — all client-side
stage 03 · decode — feed extracted blobs through every codec, then escalate: single shift → single byte → repeating key → full substitution
magic --decode · run every codec READY
// base64 · base64url · base32 · base58 · base45 · base36 · ascii85 · hex · binary · decimal · a1z26 · bacon · nato · braille · html · unicode · quoted-printable · url · rot13/18/47 · atbash · morse · reverse — decodes & encodes, all client-side
xor --brute · single byte 256 KEYS
// classic single-byte XOR break — frequency-scored, top matches first · best result can feed magic for double-encoded data
caesar --interactive ROT-N
+3
vigenere --crack · IC + chi-squared READY
// index of coincidence ranks candidate key lengths; each is then broken column-by-column with chi-squared English scoring — approximate on short or skewed text
freq --analyze · substitution solver READY
// quick-guess maps observed letters onto English frequency order (ETAOIN…) as a starting point — refine it by hand
stage 04 · crypto & identity — hash it, name it, audit it · break a toy key, read a token, pin its timestamps
sha256 --avalanche WEB CRYPTO
// edit one character — watch ~half the bits flip
hashid --identify
// identified by length & charset — candidates, not certainty
passwd --audit · offline 100 GH/s
// awaiting input
Entropy
0 bits
Charset pool
0 symbols
Offline crack time
// runs 100% in-browser — nothing leaves this page
rsa --toy · small-n textbook RSA READY
// Pollard's rho + Miller-Rabin, entirely client-side — only tractable because this n is deliberately small; that's the whole point of RSA key sizes
jwt --decode · no verify
Header
Payload
// signature is never verified — decode only
date --epoch · timestamp converter
// edit either field — the other updates live; useful for correlating JWT iat/exp and log timestamps
uuid --inspect · decode identifiers
// version & variant read from the bitfields; v1/v6 unwind the 100-ns Gregorian clock, v7 & ULID the millisecond Unix clock — all local
stage 05 · synthesize — every stdout above pipes in here: hunt flags, grep the streams, diff what changed
flaghunter --scan · find any flag READY
// scans for word{...} shapes — known CTF platform prefixes (flag, CTF, HTB, THM, picoCTF…) get a High-confidence badge
grep --pattern · search any text IDLE
// nothing runs until you enter a pattern — matches highlighted, -n line numbers, all client-side
diff --compare · spot what changed SAME
// line-based diff — paste two versions of anything (a patched binary's strings, two config dumps, before/after a decode) and see exactly what moved
entropy --shannon · measure randomness
// awaiting input
// Shannon entropy over UTF-8 bytes (0–8 bits/byte) — high, flat entropy is the fingerprint of encryption, compression, or a random key; English prose sits near 4